LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1654|回复: 1

rmvb有的能放,有的不能放

[复制链接]
发表于 2004-1-4 23:24:10 | 显示全部楼层 |阅读模式
我用xine放rmvb,但奇怪的是有的能放,有的却不能放。用realplay则都能放,有人知道为什么?怎么解决?
 楼主| 发表于 2004-1-5 16:48:31 | 显示全部楼层
问题已经解决,如果大家有相同问题可以参考我的解决方法:

用 mplayer,从cvs上checkout的最新版本,安装realplay9先,然后用root编译mplayer,
$configure --with-reallibdir=/root/Real/Codecs;make;make install

完成后应该可以播放正常的rmvb了。

对于不正常的rmvb有两种处理方法:
1) 改rmvb文件,把不正常的改正常.
一般出问题主要是因为rmvb文件头部分的格式不正确,导致mplayer无法识别,所以可以尝试简单的替换掉前面的一部分。

2)hack souce code:
如果你有很多问题rmvb,一个文件一个文件的去改十分烦琐,因此最好的办法是修改source code,以我的为例。
我下载的rmvb是因为头部有四个字节的偏移,所以导致mplayer读取参数出错,于是我就简单的把出错部分做个判断,把位置调正确。修改过程如下:

文件: main/libmpdemux/demux_real.c
修改:
找到函数

  1. void demux_open_real(demuxer_t* demuxer)
复制代码

在代码

  1. num_of_headers = stream_read_dword(demuxer->stream);
复制代码

后面加上

  1.     /*
  2.      * It's just a hack,maybe not right,but can work for some
  3.      * cases.you should change something for your rmvb files.
  4.      */
  5.     #define stream_backchar(s,i) if(s->buf_pos<s->buf_len) s->buf_pos -= i;
  6.     if(num_of_headers > 255)
  7.     {
  8.         stream_backchar(demuxer->stream,6);
  9.         num_of_headers = stream_read_dword(demuxer->stream);
  10.     }
复制代码
   

在main目录下,
$rm -f mplayer;rm -f libmpdemux/libmpdemux.a;make
$./mplayer 你的rmvb文件
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表