使用 Silverlight 捕获音频
Posted
技术标签:
【中文标题】使用 Silverlight 捕获音频【英文标题】:Capturing audio using Silverlight 【发布时间】:2011-03-30 17:03:15 【问题描述】:我有一些Audiosink
分配给了一些CaptureSource
。
CaptureSource captureSource = new CaptureSource()
VideoCaptureDevice = null,
AudioCaptureDevice = CaptureDeviceConfiguration.GetDefaultAudioCaptureDevice()
;
SampleAudioSink audioSink = new SampleAudioSink()
CaptureSource = captureSource
;
captureSource.Start();
AudioSink
实现只是记录调用的函数以查看它是否正常工作。但是,OnSamples
方法会在 37 个样本后停止调用。
OnCaptureStopped
永远不会被调用; CaptureSource
应该不断地调用这个函数。 CaptureSource
也不会调用 CaptureFailed
事件。
什么会导致这种奇怪的行为,我可以采取什么措施来解决它?
我已将产生问题的完整源代码上传到Pastebin
【问题讨论】:
第 36 次和第 37 次通话时CaptureSource
的 State
是什么?变了吗?
State
== Started
用于所有呼叫。此外,还有一个附加到 CaptureFailed
的事件处理程序,它永远不会被调用。
我读到了,我只是想确保我们没有在这里处理阻止它引发事件的错误 :)
现在我在尝试读取第 37 次通话的状态时收到 InvalidOperationException
。
【参考方案1】:
问题是垃圾收集器在 18 秒后删除了 AudioSink
...
将AudioSink
添加为类成员解决了这个问题。
[...]
TextBox log;
SampleAudioSink audioSink; // to prevent garbage collector from collection
private void Application_Startup (object sender, StartupEventArgs e)
[...]
[...]
【讨论】:
以上是关于使用 Silverlight 捕获音频的主要内容,如果未能解决你的问题,请参考以下文章
在 Asp.Net 解决方案中集成 silverlight 控件的最佳实践