我正在使用自定义 MediaStreamSource 在后台代理中从网络流式传输音乐。在良好的网络条件下,这可以正常工作,但当网络连接不稳定时,就会出现一个奇怪的问题。
当曲目开始播放时,通过第一次调用 MediaStreamSource.GetSampleAsync() 一切顺利。因为连接不稳定,如果没有足够的数据可用,源调用 ReportGetSampleProgress(double) 并返回而不报告样本。这符合 MSDN 文档和代码示例。
奇怪的是根本没有对 GetSampleAsync 的进一步调用!随着缓冲的继续,源继续 ReportGetSampleProgress 直到样本准备好,此时它调用ReportGetSampleProgress(1.0)
以指示缓冲区已满。
我尝试了几种方法,包括:
ReportGetSampleCompleted
缓冲完成时;这失败了,因为下载事件来自任意线程,并且此方法显然对调用线程以及对 GetSampleAsync 的调用是否在堆栈上都很敏感;无效的调用情况会导致 COM 错误。- 在精确的错误情况下,停止并启动 BackgroundAudioPlayer:这将无法重新启动流式传输。
一旦最初无法读取示例挂起,我如何才能重新开始流式传输?