【问题标题】:HLS streaming always starts from the beginning in Android BrowserHLS 流式传输始终在 Android 浏览器中从头开始
【发布时间】:2015-11-06 23:02:03
【问题描述】:

问题

HLS 流在 iOS 浏览器中运行良好(实时中流),

但在大多数Android浏览器中,流总是从头开始(流开始时的第一个Ts文件)。

参考

  • Android系统:4.0,4.4等..

  • FFmpeg 命令的详细信息:拉取 RTMP 流,然后使用段将其传输到 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 文件的详细信息

    #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.ts4

  • HLS Player:Ckplayer + m3u8 插件

帮助

还有其他人遇到这个问题吗?

【问题讨论】:

  • 这真的是一道编程题吗?
  • ffmpeg直接支持hls,不需要使用segment。您能否详细说明“总是从头开始”是什么意思?
  • 嗨,Aergistal。例如,如果我已经播放了一部电影 30 分钟,那么 android 用户将始终从这部电影的开头(0'00)开始。实际上他们应该从 (30'00) 开始。

标签: android ffmpeg http-live-streaming m3u8


【解决方案1】:

正如 Aergistal 在评论中所说。 最新的ffmpeg直接支持hls。 所以只需使用-f hls 而不是-f segment。 然后问题就解决了。

  1. 如果我们使用-f segment

    • #EXT-X-MEDIA-SEQUENCE 的值将始终为0
    • 添加最新记录时不会删除以前的 TS 记录。
    • 可能有些参数我不知道。

    这样 Android 设备将始终从第一个 TS 文件开始。

  2. 如果我们使用-f hls

    • 我们可以使用-hls_list_size来定义m3u8文件中TS文件的个数。
    • #EXT-X-MEDIA-SEQUENCE 的值会自动更新。

    然后效果很好。

【讨论】:

  • 我正在使用 hls_list_size,但在 android 设备上仍然遇到同样的问题。 ffmpeg -re -i rtmp://server:port/address/name -rw_timeout 500 -http_persistent 1 -method PUT -http_user_agent myuseragent -f hls -hls_list_size 5 -hls_flags discont_start+delete_segments+omit_endlist -async 1 -vf "scale=640 :trunc(ow/a/2)*2" -movflags +faststart -c:a libfdk_aac -ar 48000 -c:v h264 -profile:v main -crf 24 -sc_threshold 0 -g 48 -keyint_min 48 -hls_time 4 - hls_playlist_type event -preset veryfast -b:v 350k -maxrate 800k -bufsize 1100k -b:a 96k -vcodec libx264 -hls_segment_filename %03d.ts master.m3u8
猜你喜欢
  • 2021-01-17
  • 1970-01-01
  • 2017-02-09
  • 2016-11-17
  • 1970-01-01
  • 2018-03-12
  • 2016-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多