边下边看的实现方式
作者:ClassyK 日期:2009-12-20
最近折腾了一阵子的边下边看,总算是有点眉目,能支持一部分格式的边下边看了。
这不是啥新技术,很多下载程序都有边下边看,但是它们的支持并不好。为了支持更多的文件格式,下载工具使用的是http服务器的方式来提供播放数据。这可以兼容更多的播放器,然而致命的弱点就是拖动进度条时,很可能就无限期挂起。这种方式的实现,具体可以参与easyMule的源码。
另外一种方式就是使用directshow的filter来做。为了实现对未知视频文件的边下边看,需要source filter与splitter filter,这里最好的示例就是微软在windows sdk中的memfile项目。尽管memfile有些bug,但是非常值得参考(虽然memfile的bug并不多,确是折磨了我一阵子,主要是刚开始没有耐心仔细阅读directshow的基础文档导致的)。这种方案的优势是对进度条的拖动支持很好,但是其弱点就是无法支持各种格式。不过对大部分应用而言,应当也够了。除了memfile外,如果需要rmvb,avi,mkv等格式的便下边看,可以去看看hc-mpc中的解码器部分,以便查阅为啥ms的memfile不能工作。
不过上面的方法到目前而言,也有问题我还没有解决,那就是缓冲百分比的问题。主要是每个格式的处理不同。譬如realmedia的文件,刚开始启动播放的时候,它除了读取文件头外,还需要读取文件尾。而要做一个各种格式都适合的方式,是很难的。(播放位置,以及缓冲区长度倒是可以用比特率来大概的计算出来)。
另外,需要提到的是迅雷的thunder realmedia splitter,不知道是否改自hc-mpc中的代码。当这个thunder realmedia splitter工作(正在播放时),有可能导致其他播放器同时播放rmvb文件失败。但hc-mpc中的realmedia splitter则不会。
最后,感谢www.gdcl.co.uk网站提供的wmv parser源码,让我可以顺利的在线播放wmv文件。
文章来自: 本站原创
Tags: 边下边看 DirectShow
相关日志:
上一篇
下一篇

回复
我想最重要的还是研究windows sdk中的一些例子。