我正在尝试在Microsoft.Skype.Bots.Media audioSocket.AudioMediaReceived上记录传入的缓冲区数据。
根据到目前为止的发现,可能就像将传入的缓冲区数据保存到磁盘并使用ffmpeg这样的工具将缓冲区数据转换为所需的音频格式文件。
一些代码片段:
this.audioSocket.AudioMediaReceived += this.OnAudioMediaReceived;
private void OnAudioMediaReceived(object sender, AudioMediaReceivedEventArgs e)
{
this.GraphLogger.Info($"Received Audio: [VideoMediaReceivedEventArgs(Data=
<{e.Buffer.Data.ToString()}>, Length={e.Buffer.Length}, Timestamp={e.Buffer.Timestamp})]");
// To Do Recording i.e saving each incoming buffer data and create a audio file after the record ends.
e.Buffer.Dispose();
}
Note:以上摘录来自Compliance Recording Bot的git hub sample。
我想出的一种可能的方法是:
private void OnAudioMediaReceived(object sender, AudioMediaReceivedEventArgs e)
{
this.GraphLogger.Info($"Received Audio:
[VideoMediaReceivedEventArgs(Data=<{e.Buffer.Data.ToString()}>,
Length={e.Buffer.Length}, Timestamp={e.Buffer.Timestamp})]");
byte[] managedArray = new byte[e.Buffer.Length];
var handler = e.Buffer.Data;
int start = 0;
int length = (int)e.Buffer.Length;
Marshal.Copy(handler, managedArray, start, length);
var path = @"D:\files";
var filePath = Path.Combine(path, "test.wav");
File.WriteAllBytes(filePath, managedArray);
// TBD: Compliance Recording bots can record the Audio here
e.Buffer.Dispose();
}
但是问题是,只要继续进行通话/录音,音频媒体缓冲区数据就会继续流(流),并且此解决方案将不起作用。
任何帮助将不胜感激。
您能否在https://github.com/microsoftgraph/microsoft-graph-docs/issues下发布您的问题以提高知名度?谢谢