FFMpeg 生成的 m3u8 分段视频在播放开始前有较长的延迟

FFMpeg 生成的 m3u8 分段视频在播放开始前有较长的延迟

我正在使用 ffmpeg 生成文件的分段列表,以便将它们流式传输到 iOS 应用程序。文件列表生成得很好,但在播放它们时,需要先下载整个视频才能开始播放。这种行为似乎在 iOS、Safari 和 VLC 上都是如此。

有人知道为什么会发生这种情况,我该如何提高播放性能?我可以完全控制文件在 iOS 中的录制方式以及处理方式。这是一个示例流:

http://www.bytesizecreations.com/storie-test/hls.m3u8

下面是我从文件生成片段的 ffmpeg 命令:

ffmpeg -i joined.ts -flags -global_header -vcodec copy -acodec copy -map 0 -f segment -segment_time 2 -segment_list hls.m3u8 -segment_list_size 999999 -segment_format mpegts out%03d.ts

以下是 ffprobe 对文件的输出:

  libavutil      54.  7.100 / 54.  7.100
  libavcodec     56.  1.100 / 56.  1.100
  libavformat    56.  4.101 / 56.  4.101
  libavdevice    56.  0.100 / 56.  0.100
  libavfilter     5.  1.100 /  5.  1.100
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  0.100 /  3.  0.100
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  0.100 / 53.  0.100
Input #0, mpegts, from 'joined.ts':
  Duration: 00:00:07.96, start: 1.441667, bitrate: 3899 kb/s
  Program 1 
    Metadata:
      service_name    : Service01
      service_provider: FFmpeg
    Stream #0:0[0x100]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p, 1280x720, 24 fps, 24 tbr, 90k tbn, 180k tbc
    Stream #0:1[0x101](und): Audio: aac ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 222 kb/s

答案1

为了实现高性能视频流,需要有一组多个变体视频流。换句话说,视频以各种比特率和分辨率编码,这些视频均引用自播放列表文件 (.m3u8)

支持自适应比特率流的视频播放器将选择与您的网络连接匹配的流,并能够随着网络条件的变化无缝切换流。我尝试流式传输的视频需要很长时间才能开始播放,原因是我只有一个 720p 分辨率的流,因此播放器需要很长时间才能缓冲才能开始播放。

我用的是Http 实时流 (HLS)Apple 创建的标准,用于生成具有 5 个流的自适应比特率流(我使用 ffmpeg 生成),我的视频几乎立即开始播放。

无耻的推销:为了让开发人员和其他人员更轻松地完成此操作,我将我们组装的用于生成 HLS 流的基础设施与 iOS SDK 打包在一起,您可以在此处查看:https://github.com/Storie/StorieCloudSDK

相关内容