android 播放直播流,安卓大部分浏览器播放HLS协议直播流会从头开始

博主遇到一个问题,使用ffmpeg生成的HLS直播流在iOS上播放正常,但大部分安卓浏览器(UC浏览器除外)播放时总是从头开始。无论何时打开直播,都会回到直播开始时的内容。问题出现在不同安卓版本和浏览器上,如默认浏览器和腾讯浏览器。ffmpeg命令行用于将rtmp流切割成ts片段并生成m3u8列表。目前只知道小米2s和华为荣耀6的4.0及4.4系统受影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

遇到的问题

HLS直播流在iOS系统中表现正常,

但在安卓使用大部分浏览器(UC浏览器除外)播放ffmpeg生成的HLS直播流都会发生从头播放的问题,

即不管何时播放直播流,都会从直播开头的内容开始播放(生成的第一个直播TS切片,eg:电影开始直播1小时后打开直播,从0分钟看起)。

参考数据

安卓系统:4.0(小米2s),4.4(华为荣耀6),其他版本未测试

浏览器:默认浏览器、腾讯浏览器

直播方式:ffmpeg获取rtmp流,并用自带segment实时切割为ts片段,命令如下(省略了视频流参数)

ffmpeg -re -i rtmp://ipaddress/live/streamname

-codec:a libfaac -b:a 96k -af volume=1 -ac 2 -ar 44100

-f segment

-segment_time 5

-segment_list_flags live

-segment_list /path/to/m3u8

-segment_format mpegts /path/to/ts

生成的m3u8文件如下(实时新增ts列表)

#EXTM3U

#EXT-X-VERSION:3

#EXT-X-MEDIA-SEQUENCE:0

#EXT-X-ALLOW-CACHE:NO

#EXT-X-TARGETDURATION:6

#EXTINF:5.000278,

file0000.ts

#EXTINF:5.013356,

file0001.ts

HLS播放器:Ckplayer+m3u8插件

疑问

不知道其他人有没有碰到这个问题。

一: 使用javacv来实现,最终也是用过ffmpeg来进行编码和推流,javacv实现到可以直接接收摄像头的帧数据 需要自己实现的代码只是打开摄像头,写一个SurfaceView进行预览,然后实现PreviewCallback将摄像头每一帧的数据交给javacv即可 javacv地址:https://github.com/bytedeco/javacv demo地址:https://github.com/beautifulSoup/RtmpRecoder/tree/master 二: 使用Android自带的编码工具,可实现硬编码,这里有一个国内大神开源的封装很完善的的库yasea,第一种方法需要实现的Camera采集部分也一起封装好了,进行一些简单配置就可以实现编码推流,并且yasea目前已经直接支持摄像头的热切换,和各种滤镜效果 yasea地址(内置demo):https://github.com/begeekmyfriend/yasea 服务器 流媒体服务器我用的是srs,项目地址:https://github.com/ossrs/srs 关于srs的编译、配置、部署、在官方wiki中已经写的很详细了,并且srs同样是国内开发人员开源的项目,有全中文的文档,看起来很方便 这里有最基本的简单编译部署过程 Android直播实现(二)srs流媒体服务器部署 播放android端的播放使用vitamio,还是国内的开源播放器,是不是感觉国内的前辈们越来越屌了^~^! vitamio支持几乎所有常见的的视频格式和流媒体协议 vitamio地址(内置demo):https://github.com/yixia/VitamioBundle 这里使用的是yaesa库,先介绍一下直播实现的流程:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值