- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在后台代理中使用自定义 MediaStreamSource 从 Web 流式传输音乐。在良好的网络条件下,这工作正常,但当网络连接不稳定时,就会出现一个奇怪的问题。
当轨道开始播放时,通过第一次调用 MediaStreamSource.GetSampleAsync() 一切顺利。由于连接时断时续,如果没有足够的数据可用,源调用 ReportGetSampleProgress(double) 并返回而不报告样本。这符合 MSDN 文档和代码示例。
奇怪的是,根本没有对 GetSampleAsync 的进一步调用!随着缓冲的继续,源继续 ReportGetSampleProgress 直到样本准备就绪,此时它调用 ReportGetSampleProgress(1.0)
以指示缓冲区已满。
我尝试了几种方法,包括:
ReportGetSampleCompleted
缓冲完成时;这失败了,因为下载事件来自任意线程,并且此方法显然对调用线程以及对 GetSampleAsync 的调用是否在堆栈上都很敏感;无效的调用环境会导致 COM 错误。一旦最初未能读取样本而挂起,我如何才能让流式传输再次开始?
最佳答案
ReportGetSampleCompleted
一旦数据可用,就是这种情况下的正确方法。
您必须在 MSS 中跟踪是否需要立即报告任何新样本数据或等待 GetSampleAsync
被调用。
但是请注意,由于竞争条件而导致的失败在所涉及的各个线程之间是可能的。
关于c# - BackgroundAudioPlayer 是 'Playing' 但没有调用 GetSampleAsync(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15442933/
我在后台代理中使用自定义 MediaStreamSource 从 Web 流式传输音乐。在良好的网络条件下,这工作正常,但当网络连接不稳定时,就会出现一个奇怪的问题。 当轨道开始播放时,通过第一次调用
我是一名优秀的程序员,十分优秀!