FFmpeg 有一种名为“dash”的格式:
> ffmpeg -formats
...
E dash DASH Muxer
...
这大概对应于 libavformat/dashenc.c 中的代码。
我可以在网络上找到许多有关如何使用 WebM DASH Manifest 格式的文章,但对其他 DASH 格式却一无所知。
有人可以向我指出从命令行或 API 使用“DASH Muxer”的文档或示例吗?
ffmpeg 中的 dash muxer 相当新,尚未出现在文档中。通过查看源代码,我设法让它适用于我的用例。它创建 .mpd dash 文件以及分段(除非您不分段,并计划使用 DASH 的 Range: headers 功能进行搜索和部分访问)。
复用器选项有:
- window_size:清单中保留的段数
- extra_window_size:从磁盘删除之前保留在清单之外的段数
- min_seg_duration:最小段持续时间(以微秒为单位)
- remove_at_exit:完成后删除所有段
- use_template:在破折号清单中使用 SegmentTemplate 而不是 SegmentList
- use_timeline:在SegmentTemplate中使用SegmentTimeline
- single_file:将所有段存储在一个文件中,使用字节范围进行访问
- single_file_name:用于 baseURL 的 DASH 模板名称。意味着将所有段存储在一个文件中,使用字节范围进行访问
- init_seg_name:用于初始化段的 DASH 模板名称,默认为 init-stream$RepresentationID$.m4s
- media_seg_name:用于媒体片段的 DASH 模板名称,默认为 chunk-stream$RepresentationID$-$Number%05d$.m4s
我的用例是直播,正好 4 秒的片段,没有片段时间线,使用片段模板,我使用:
ffmpeg -i /dev/dvb/adapter0/dvr0 -vf yadif=0 -r 25 -vcodec libx264 -keyint_min 0 -g 100 -b:v 1000k -ac 2 -strict 2 -acodec aac -ab 64k -map 0:v -map 0:a -f dash -min_seg_duration 4000 -use_template 1 -use_timeline 0 -init_seg_name init-\$RepresentationID\$.mp4 -media_seg_name test-\$RepresentationID\$-\$Number\$.mp4 test.mpd
生成的破折号清单如下所示:
<?xml version="1.0" encoding="utf-8"?>
<MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="urn:mpeg:dash:schema:mpd:2011"
xmlns:xlink="http://www.w3.org/1999/xlink"
xsi:schemaLocation="urn:mpeg:DASH:schema:MPD:2011 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsd"
profiles="urn:mpeg:dash:profile:isoff-live:2011"
type="dynamic"
minimumUpdatePeriod="PT500S"
suggestedPresentationDelay="PT4S"
availabilityStartTime="2016-12-09T10:11:16"
publishTime="2016-12-09T10:13:53"
minBufferTime="PT4.0S">
<ProgramInformation>
</ProgramInformation>
<Period start="PT0.0S">
<AdaptationSet contentType="video" segmentAlignment="true" bitstreamSwitching="true" frameRate="25/1">
<Representation id="0" mimeType="video/mp4" codecs="avc1.64001e" bandwidth="1000000" width="720" height="576" frameRate="25/1">
<SegmentTemplate timescale="1000000" duration="4000000" initialization="init-$RepresentationID$.mp4" media="test-$RepresentationID$-$Number%05d$.mp4" startNumber="1">
</SegmentTemplate>
</Representation>
</AdaptationSet>
<AdaptationSet contentType="audio" segmentAlignment="true" bitstreamSwitching="true">
<Representation id="1" mimeType="audio/mp4" codecs="mp4a.40.2" bandwidth="64000" audioSamplingRate="48000">
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2" />
<SegmentTemplate timescale="1000000" duration="4000000" initialization="init-$RepresentationID$.mp4" media="test-$RepresentationID$-$Number$.mp4" startNumber="1">
</SegmentTemplate>
</Representation>
</AdaptationSet>
</Period>
</MPD>
清单和关联的流在 Android 上的 ExoPlayer 中播放。
目前它似乎只生成 DASH 实时清单和视频或纯音频文件。不过,从直播更改为 VOD 很简单(请查看 DASH 规范)。
我已经在 Android 上的 ExoPlayer 中测试了该流,并且播放得很好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)