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

用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
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值