使用 4 个或更多流停止 WMP
Stalling WMP with 4 or more streams
我用 C 开发了一个应用程序,可以在后台显示 4 个视频和 1 个声音文件。
视频使用了微软在WMP SDK中提供的C++class中的WMP对象。音频使用 Windows' MCI(媒体控制接口)发送命令字符串。
为了能够播放很多不同的格式,我安装了 windows.7.codec.pack.
我遇到一个问题,当播放超过 3 个媒体文件(视频或音频)时,媒体 停顿 。要开始的视频不断地从状态 3(正在播放)循环到状态 9(准备新媒体)再到状态 10(准备开始播放 - 没有任何事情发生),依此类推。这被视为视频闪烁(状态 3),然后几秒钟没有任何内容(黑色或桌面背景,状态 9)。视频开始后,播放到结束都很好。
将要播放的媒体文件数量减少到 2 个视频和 1 个音频可以正常播放;增加到 3 个或更多视频和 1 个音频,就会发生这种情况。任务管理器显示 CPU 负载小于 25%,因此 CPU 不可能是问题所在。
似乎 MCI 和 WMP 在后台共享东西,因为不仅视频卡顿,音频也停止而没有报告错误(查询 MCI returns 它正在播放,但没有声音)。
我升级到windows.7.codec.pack.v4.2.6
。这表现很糟糕
我恢复到 windows.7.codec.pack.v4.1.6
。这有更好的性能,但仍然不完美。
我的问题:
有什么方法可以配置 Windows 或编解码器包来无缝处理 5 个流吗?
如何向开发者报告这个问题?
还有其他编解码包没有这个问题吗?
还有其他建议吗?
系统信息:Intel i7-3520M X64 双核 2.9Ghz,8GB 物理内存和 NVIDIA Quatro K1000M 显示适配器。
我想我找到了解决方案。
播放视频后,我调用了Player的Close()
方法。文档说:
The close method releases Windows Media Player resources.
Remarks
This method closes the current digital media file, not the Player itself.
我确实想释放媒体文件,这样它就不会在文件系统中忙碌了。但是,似乎释放的资源不仅仅是媒体文件。结果,为了播放下一个媒体文件,播放器不得不重新分配资源。看来原来是个瓶颈。
不再调用 Close()
,只是给它 URL(文件名)下一个要播放的媒体文件现在解决了问题。 (有时我仍然需要重试一些,但总体表现现在已经可以接受了。)
下一个媒体文件开始播放时释放媒体文件。
我用 C 开发了一个应用程序,可以在后台显示 4 个视频和 1 个声音文件。
视频使用了微软在WMP SDK中提供的C++class中的WMP对象。音频使用 Windows' MCI(媒体控制接口)发送命令字符串。
为了能够播放很多不同的格式,我安装了 windows.7.codec.pack.
我遇到一个问题,当播放超过 3 个媒体文件(视频或音频)时,媒体 停顿 。要开始的视频不断地从状态 3(正在播放)循环到状态 9(准备新媒体)再到状态 10(准备开始播放 - 没有任何事情发生),依此类推。这被视为视频闪烁(状态 3),然后几秒钟没有任何内容(黑色或桌面背景,状态 9)。视频开始后,播放到结束都很好。
将要播放的媒体文件数量减少到 2 个视频和 1 个音频可以正常播放;增加到 3 个或更多视频和 1 个音频,就会发生这种情况。任务管理器显示 CPU 负载小于 25%,因此 CPU 不可能是问题所在。
似乎 MCI 和 WMP 在后台共享东西,因为不仅视频卡顿,音频也停止而没有报告错误(查询 MCI returns 它正在播放,但没有声音)。
我升级到windows.7.codec.pack.v4.2.6
。这表现很糟糕
我恢复到 windows.7.codec.pack.v4.1.6
。这有更好的性能,但仍然不完美。
我的问题:
有什么方法可以配置 Windows 或编解码器包来无缝处理 5 个流吗?
如何向开发者报告这个问题?
还有其他编解码包没有这个问题吗?
还有其他建议吗?
系统信息:Intel i7-3520M X64 双核 2.9Ghz,8GB 物理内存和 NVIDIA Quatro K1000M 显示适配器。
我想我找到了解决方案。
播放视频后,我调用了Player的Close()
方法。文档说:
The close method releases Windows Media Player resources.
Remarks
This method closes the current digital media file, not the Player itself.
我确实想释放媒体文件,这样它就不会在文件系统中忙碌了。但是,似乎释放的资源不仅仅是媒体文件。结果,为了播放下一个媒体文件,播放器不得不重新分配资源。看来原来是个瓶颈。
不再调用 Close()
,只是给它 URL(文件名)下一个要播放的媒体文件现在解决了问题。 (有时我仍然需要重试一些,但总体表现现在已经可以接受了。)
下一个媒体文件开始播放时释放媒体文件。