vlc-android为何播放不了red5的直播流

来源:互联网 发布:京东方怎么样 知乎 编辑:程序博客网 时间:2024/05/01 04:50

用red5作为rtmp服务器,当发布一个直播流到red5,然后用vlc for android的版本看,发现播放不了,于是用wireshark来抓包分析,发现播放指定的流时服务器返回NetStream.Play.StreamNotFound错误,于是在red5的源码中定位,最后在PlayEngine.java中找到问题所在,把void play(IPlayItem item, boolean withReset)这个方法里的一行代码:int type = (int) (item.getStart() / 1000);里的1000去掉,重新编red5就可以啦,因为vlc播放时带的参数是-2,希望先播直播流,如果直播流没有就尝试播放点播流。red5里除以1000就变成0只能当成点播流来播,当然不行了。

当然这是为了适配vlc-android去修改red5的代码,但去掉1000后发现通过网页播放直播又不行了,于是最后把代码改成下面的样子:

  long start_time = item.getStart();//IPlayItem.getStart : Start time in milliseconds.
  int type = (int) (start_time / 1000);
  
  //special hack for vlc player
  if (start_time = -2)
   type = -2;

才算结束。

顺便说一句,vlc也播不了fms上发布的直播流。这应该是vlc播放器的原因,已经能够收到服务器发过来的音视频数据了,可知fms是支持播放类型为-2或-2000的。而当我ffplay播放的时候,发现是可以播放fms上发布的直播流的。ffmpeg自带rtmp协议发布与播放。目前最新的版本发送播放命令是传的是-2000而不是以前的-2了。

0 0
原创粉丝点击