Android无法通过浏览器观看HLS直播的问题

来源:互联网 发布:淘宝清除缓存在哪里 编辑:程序博客网 时间:2024/05/04 15:52

公司的产品,有直播功能,需要通过网页观看直播,无插件方案就是移动端使用HLS

方法为FFMPEG推流到带Nginx-RTMP-Module的Nginx上,转出RTMP流和HLS流

所用命令为:

ffmpeg.exe -ss 0 -rtsp_transport tcp -i rtsp://192.168.1.1/stream/0 -vcodec copy -acodec copy -f flv rtmp://127.0.0.1:1935/hls/hlstest
结果发现,HLS流在iOS上观看正常,在Android的微信、QQ浏览器、UC浏览器上观看正常。

其他浏览器上无法观看,点击播放后,只能显示一帧画面,播放按钮灰色。点击全屏按钮则提示“抱歉,此视频无法播放”。

而视频点播我们也使用的Nginx,却能正常观看,遂认为是我们的rtsp流有问题(之前还研究过是否配置问题,MIME问题,等等)

而后测试使用ffmpeg分别推视频文件和rtsp流到nginx,然后在nginx的temp/hls文件夹获取切片文件(.ts)
分析之后发现了区别:


左边是推视频文件的切片文件的信息,右边是流的

可以看到,音频都是AAC,但是视频的是LC-AAC,流的是Main-AAC

Apple关于HLS的资料

查阅资料后发现HLS支持的音频编码为:

HE-AAC or AAC-LC, stereo

MP3 (MPEG-1 Audio Layer 3), stereo


所以应该是AAC编码导致的问题,至于iOS能看,应该是因为iOS上播放都是使用了自带播放器,而Android上的微信、QQ浏览器、UC浏览器能看则应该是因为内嵌了一个播放器用于播放视频及流媒体,播放器能掩盖很多小问题


推流命令换成这个,问题解决:

ffmpeg.exe -ss 0 -rtsp_transport tcp -i rtsp://192.168.1.1/stream/0 -vcodec copy -acodec aac -f flv rtmp://127.0.0.1:1935/hls/hlstest


但是由于重编码可能耗费一点服务器性能,所以我们还是决定处理我们的rtsp流


网上查了很多资料,包括国外的,也没见提到这点,没认真看文档,或者说没留意到这个问题,可能就走了很多弯路,所以写上来,提醒遇到同样问题的人


1 0
原创粉丝点击