上一篇 | 这是最后一篇日志下一篇
C/C++ 订阅所有【C/C++】的日志

边下边看的实现方式

    最近折腾了一阵子的边下边看,总算是有点眉目,能支持一部分格式的边下边看了。

    这不是啥新技术,很多下载程序都有边下边看,但是它们的支持并不好。为了支持更多的文件格式,下载工具使用的是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文件。

 



[本日志由 ClassyK 于 2009-12-20 11:21 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: 边下边看 DirectShow
相关日志:
评论: 2 | 引用: 0 | 查看次数: -
回复回复ClassyK[2010-01-25 04:46 PM | del]
我并没有系统的看过什么书,了解的也都是网上的东西。
我想最重要的还是研究windows sdk中的一些例子。
回复回复orangecat[2010-01-21 02:50 PM | del]
我现在刚开始来研究边下边看的实现,对这方面都不太懂,ClassyK  能不能推荐看些什么书,或什么资料好呢?
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.