各位知道这是为什么吗(关于MPEG-1网络媒体播放)?
我在做一个网络媒体播放器(用Memfile例子)时,遇到这样的问题:
从网络中接收并播放多目UDP数据时,我是这样处理的:
1.从固定的MPG文件中读出32768字节,连续存入缓冲区两次(共65536字节)
(我试了其他一些加头的方法,都不行)
2.从网络中收到的数据中进行解析,获取0x000001ba开始标志,并记下该位置
3.该位置以后的数据全部存入缓冲区
另一方面,DirectShow中的Read函数不断的从缓冲区中读数据.
在某一编码器编码条件下能连续播放正常好几小时.
但在另一类型编码器编码情况下就不能运行正常了.我是这样的
1.从固定MPG文件中读出32768字节,存入缓冲区,再读32768字节,再存入缓冲区
(我试了其他一些加头的方法,根本不能Render成功)
2.从网络中收到的数据中进行解析,获取0x000001ba开始标志,并记下该位置
3.该位置以后的数据全部存入缓冲区
另一方面,DirectShow中的Read函数不断的从缓冲区中读数据.
但是有停顿现象.又试在Render之前,保存缓冲区中有较多的数据比如512K,还是不行
请问这是怎么回事?
各不同流是否可以用同样的头?
头到底有多长?
我该怎么产生头?
是否与编码器有关?
不同流对应头信息,是否可以根据收到的数据推断出来?
问题点数:100、回复次数:12Top
1 楼opensystem(开放式系统)回复于 2002-03-27 15:50:19 得分 0
upTop
2 楼ares_ding(灰尘)回复于 2002-03-27 16:09:13 得分 20
好像可以阿,我试过MPEG1,840k-1.5M
MPEG2 2M-6M,什么修改都不用直接用就行了。
不过那个头是我自己做的一个文件,一次加在前面就行了。
Top
3 楼justjet(小杰)回复于 2002-03-27 16:47:42 得分 0
to ares_ding
我刚才一直在试,我想可能是因为编码器的问题.
我想问一下你的头对应的文件是怎么得到的,随便一个MPG文件吗?另外,我一直搞不清我为什么一定要加两次32768K才可以.你是怎么加头信息的呀?谢谢!Top
4 楼capboy(帽子)回复于 2002-03-27 17:00:42 得分 20
"那个头是我自己做的一个文件"?好东西,可以适应mpeg1和mpeg2的?
我要一份:)
afterain@263.netTop
5 楼justjet(小杰)回复于 2002-03-27 17:08:26 得分 0
capboy 你好!
早就听说你的大名,你对我遇到的问题有何见解?Top
6 楼ares_ding(灰尘)回复于 2002-03-27 17:19:03 得分 20
capboy,我那个头用你的代码生成的阿,呵呵。
我再调你的代码的时候,在stream的read函数里面
我把获得的数据存了一下文件,而已。
我估计能支持两种格式和elecard 的decoder有关,和头无关,
不过你要我给你发了一个试试吧。Top
7 楼justjet(小杰)回复于 2002-03-27 17:28:14 得分 0
怎么生成的呀,能给我也发一个吗?
我还不明白,怎么在Read函数里生成该文件,能介绍一下吗?
我的email是justjet@163.com
Top
8 楼justjet(小杰)回复于 2002-03-27 17:34:18 得分 0
在从文件中间开始播放的时候,不同的文件好象不同。有的只需加一次32768字节即可,有的要加2次。这些是由什么因素决定的?
Top
9 楼justjet(小杰)回复于 2002-03-28 11:53:05 得分 0
ares_ding:
你发给我的头文件,我不知如何使用。
经过试验,发现READ函数在render之前,需要调用两次,这两次给的数据的前四字节均要为0x000001ba。
Render之后,READ接着再读数据,这时数据可以是从MPG文件头开始的,也可是从网络中收到的,但第一次读的数据也必须是以0x000001ba开头的。
也许这就是要加两次的原因。
另外,memfile例子中,好象可以播放VCD文件(.dat)等其他多媒体格式文件,但按照MPG文件相同的方法处理就是不行,各位有何高见?
Top
10 楼capboy(帽子)回复于 2002-03-28 20:51:10 得分 20
开始render的时候,确实是需要一些数据来初试化,各种格式的好像需要的数据量也,是不一样的,avi的好像是最复杂的(别人的测试结果),而我只是测试过mpeg1的,mpeg2的没有使用这种方法.
需要具体的测试,不过,你可以先给较多的数据(比如1M),在render结束后,在给最新的不就行了?这样只是初试化的时间长,但是播放的效果还是一样的.Top
11 楼capboy(帽子)回复于 2002-03-28 20:55:42 得分 20
开始的数据判断是必须的,dshow需要通过这样来判断正确的格式.Top
12 楼faxiao(faxiao)回复于 2002-03-28 21:33:30 得分 0
capboy:给我发一个你那个东东好不好,谢谢了nili88@sina.comTop




