整个架构是,服务器生成AVI文件,客户端PULL这个AVI文件到缓存,然后播放器通过读取缓存来播放。之所以具有挑战性,是因为以下原因:
1. 服务器一生成AVI文件,客户端就开始播放,比如一个AVI文件应该有10000帧,当服务器声称10帧的时候,客户端就开始PULL这个AVI文件已经生成的部分,然后放到缓存里让播放器播放。所以可以说服务器生成过程和客户端播放过程基本同时进行,通过缓存机制来同步。
2. 服务器在生成完整的AVI文件之前,是不知道到底有多少帧,每一帧的大小不一样,所以在填写AVI文件头(header信息)的时候,有些数据不能确定。(我试过,其中有些数据可以填写假定值,有些填写了假定值AVI就不能被播放,这是其他3个问题的起因)
3. 有些文档说AVI文件可以不要index,但是我试过有 'rec '和没有 'rec '的情况,都不能没有index,大家能告诉我AVI在什么情况下可以不需要index吗?
4. 使用DirectShow来实现,具体是写一个Source Filter和DirectShow已经有的AVI Splitter连接,要实现IAsyncReader接口。我已经试过,只要有一个Source Filter把AVI块发送给AVI Splitter,AVI Splitter自动回分离音频和视频,并且会找到对应的Transform Filter,最后播放。
谢谢大家,请大家告诉我相关的一些知识和方案,如果100分不够,我可以再给。
------解决方案--------------------------------------------------------
用flv吧
------解决方案--------------------------------------------------------
的确有难度,不过为什么要先生成AVI再播放呢?自己开发网络流媒体一般不都是在循环以下步骤吗?祯采集——编码——发送——接收——解码——显示祯
------解决方案--------------------------------------------------------
如果是实时播放的话,不必先形成文件。
*********************************************
▄︻┻┳═一 ' ' ' ' ' ' '
昵称: softsoftsoft2008
Q Q: 79941308
MSN : luoshizhen2003@hotmail.com
*********************************************
------解决方案--------------------------------------------------------
可以再服务端缓存数据,一个线程发给客户端,一个线程写avi文件。