将m3u8(HLS)转换为mpd(MPEG-DASH)

时间:2018-04-12 08:44:49

标签: ffmpeg hls http-live-streaming mpeg-dash mp4box

我有HLS的直播流[https://82-80-192-30.vidnt.com/ipbc_IPBCchannel11LVMRepeat/definst/IPBCchannel11LVM_3.stream/playlist.m3u8],我希望将其转换为MPEG-DASH。

最佳做法是什么?

该流已经是h264 aac,因此我知道我不需要重新编码,我只需要transmux。

我应该使用什么? ffmpeg的? mp4box?

注意:

  1. 我使用nginx-rtmp-module(https://github.com/ut0mt8/nginx-rtmp-module/)来根据本教程从RTMP流创建DASH:https://isrv.pw/html5-live-streaming-with-mpeg-dash 但是nginx-rtmp-module只能输入rtmp流作为输入,而且对我来说不适用于HLS流。

  2. 我使用ffmpeg从m3u8创建破折号如下:

    ffmpeg -i https://82-80-192-30.vidnt.com/ipbc_IPBCchannel11LVMRepeat/_definst_/IPBCchannel11LVM_3.stream/playlist.m3u8 -strict -2 -min_seg_duration 2000 -window_size 5 -extra_window_size 5 -use_template 1 -use_timeline 1 -f dash out.mpd

  3. 但这非常有限。我无法控制细分持续时间。 ffmpeg的min_seg_duration参数对我来说效果不好,而且它可以设置最小持续时间,而我想限制每个段的最大持续时间(该段出现约10秒,而我需要它我现场直播的时间是2-4秒。

1 个答案:

答案 0 :(得分:1)

首先值得一提的是,如果你能避免这样做,你将为自己节省大量的工作!

如今大多数设备和客户端都可以同时播放HLS和DASH流,因此通常的方法是添加应用或客户端所需的任何额外功能。

如果你必须转换服务器端,那么值得注意的是,虽然HLS流过去通常使用TS段,但最近对支离破碎的MP4的支持已经在HLS生态系统中可用。

如果您有TS视频流,那么您将需要沿着上面用ffmpeg概述的行进行转换。

如果你有碎片MP4那么你应该已经拥有正确的格式,并且可能发现你只需要创建清单文件,这样DASH就可以访问碎片化的mp4流。

以上所有假设您的内容未加密或您不必支持加密 - 如果是,那么您可能无法转换媒体,或者您可能还需要对某些内容进行不同的加密流比其他流,因为目前大多数部署的窗口和Chrome设备和浏览器使用与Apple设备略有不同的加密方法(不同的AES模式)。