如何从MPEG DASH段创建HLS清单?

use*_*682 5 ffmpeg http-live-streaming mpeg-dash mp4box bitmovin-player

自从苹果公司宣布支持分段MP4以来,是否可以为同一段片段(分别用于音频和视频)创建DASH清单(.mpd)和HLS清单(.m3u8)。怎么做?

mae*_*thu 5

我不知道 ffmpeg 是否可行,但shaka-packager能够做到这一点。以下命令将输出 MP4 片段以及 HLS 和 DASH 清单,为两者重用 MP4 片段(但不确定您是否可以使用现有的MP4 片段,您可能必须首先将它们复用回每个视频流的单个 mp4):

# HLS + DASH
packager \
    'in=h264_baseline_360p_720.mp4,stream=audio,init_segment=audio_init.mp4,segment_template=audio_$Number$.m4s,playlist_name=audio.m3u8,hls_group_id=audio,hls_name=ENGLISH' \
    'in=h264_baseline_360p_720.mp4,stream=video,init_segment=h264_360p_init.mp4,segment_template=h264_360p_$Number$.m4s,playlist_name=h264_360p.m3u8' \
    'in=h264_main_480p_1400.mp4,stream=video,init_segment=h264_480p_init.mp4,segment_template=h264_480p_$Number$.m4s,playlist_name=h264_480p.m3u8' \
    'in=h264_high_720p_2400.mp4,stream=video,init_segment=h264_720p_init.mp4,segment_template=h264_720p_$Number$.m4s,playlist_name=h264_720p.m3u8' \
    --hls_master_playlist_output h264_master.m3u8 \
    --mpd_output h264.mpd \
    --base_urls https://example.org/ \
    --hls_base_url https://example.org/ \
    --generate_static_mpd
Run Code Online (Sandbox Code Playgroud)

请注意,在撰写本文时,您需要使用 master 分支代码(或google/shaka-packager:latest docker image),因为最新版本1.6.2将退出并显示无法同时输出 MPD 和 HLS .

虽然到目前为止我从未使用过它,但Bento4是另一个能够在一次运行中打包 DASH 和 HLS 的工具:

mp4-dash.py  | grep hls
  --hls                 Output HLS playlists in addition to MPEG DASH
  --hls-key-url=<url>   HLS key URL (default: key.bin)
  --hls-master-playlist-name=<filename>
  --hls-media-playlist-name=<filename>
  --hls-iframes-playlist-name=<filename>
Run Code Online (Sandbox Code Playgroud)