CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  专题开发/技术/项目 >  游戏开发

各位知道这是为什么吗(关于MPEG-1网络媒体播放)?

楼主justjet(小杰)2002-03-27 12:50:29 在 专题开发/技术/项目 / 游戏开发 提问

我在做一个网络媒体播放器(用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

相关问题

  • 多媒体播放
  • 媒体播放器控件???
  • 媒体播放的问题
  • 多媒体播放问题?
  • 关与2003媒体播放
  • 菜鸟提问:请问大家有谁知道,开发多媒体播放控件,怎么才能把视频流在控件上播放出来啊?
  • 关于媒体播放器的问题?
  • windows 媒体播放器的问题!
  • 多媒体播放的问题
  • 如何写媒体播放程序?

关键词

  • 数据
  • 文件
  • 函数
  • mpeg
  • 网络
  • 存入缓冲区
  • 编码器
  • 头
  • mpg
  • 缓冲区

得分解答快速导航

  • 帖主:justjet
  • ares_ding
  • capboy
  • ares_ding
  • capboy
  • capboy

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo