【问题标题】:How do I create playlists/different bandwidth wit ffmpeg?如何使用 ffmpeg 创建播放列表/不同带宽?
【发布时间】:2016-09-18 18:47:39
【问题描述】:

我正在尝试从 .mp4 文件创建 hls 流。到目前为止,我可以创建清单 + .ts 文件,但我没有 playlist.m3u8 来决定我应该根据用户的带宽为用户提供哪个清单。我该怎么做?

这是我当前创建 HLS 流的命令(无播放列表):

ffmpeg -i test.mp4 -codec copy -vbsf h264_mp4toannexb -map 0 -f segment -segment_list out.m3u8 -segment_time 10 out%03d.ts

这会创建 out.m3u8:

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10, 
out.ts
#EXTINF:10, 
out.ts

我要创建的内容:

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=860000
low.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=512000
medium.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=160000
high.m3u8

【问题讨论】:

  • 嗨@Sandeep Shah,你解决了这个问题吗?我遇到了同样的情况,需要帮助。如果您有答案或正确的方向,请分享。欣赏。

标签: servlets ffmpeg streaming http-live-streaming


【解决方案1】:

要做到adaptive streaming with HLS,首先您需要以您想要支持的比特率对视频进行编码。查看 Apple 的 encoding recommendations 中的一些示例。

完成此操作后,您需要对每个视频进行分段并为其生成播放列表。最后一步是创建一个master playlist,在其中添加变体播放列表的 URL 和有关每个流的信息,例如带宽、分辨率等 - 这是您将用作播放器视频源的播放列表.

例如,假设您的源视频是以 1080p 拍摄的,并且您想要生成视频比特率为 1200k 的 360p 变体。你可以用下面的ffmpeg 命令来做类似的事情:

ffmpeg -i 1080p.mov -c:v libx264 -vprofile baseline -vlevel 3.1 -s 640x360 -b:v 1200k -strict -2 -c:a aac -ar 44100 -ac 2 -b:a 96k 360p.mov

请注意,您生成变体的(源)视频必须是高质量的 - 您不能从 720p 视频编码 1080p 视频(没有升级)。

接下来,运行与您问题中的命令类似的命令,为该视频生成播放列表和片段:

ffmpeg -i 360p.mov -codec copy -vbsf h264_mp4toannexb -map 0 -f segment -segment_time 10 -segment_format mpegts -segment_list 360p/playlist.m3u8 -segment_list_type m3u8 360p/fileSequence%d.ts

现在创建一个主播放列表并添加您刚刚创建的播放列表的(相对)URL。所以是这样的:

#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=1228800,CODECS="mp4a.40.2,avc1.4d401e",RESOLUTION=640x360
360p/playlist.m3u8

(带宽属性也要考虑音频的比特率,这里我没做过。)

对其他变体重复该过程。

播放器将使用播放列表中有关可用流的信息,以及当时的可用带宽,来确定最适合播放的流。

【讨论】:

猜你喜欢
  • 2022-01-24
  • 2017-11-07
  • 2012-05-06
  • 2012-08-14
  • 2020-09-30
  • 2015-01-06
  • 2015-10-01
  • 1970-01-01
  • 2016-09-07
相关资源
最近更新 更多