FFplay 仅在同一目录中播放 MPEG-DASH
FFplay only plays MPEG-DASH when in the same directory
我在 windows 机器上使用来自 ffmpeg 的 libav 的 dashenc.c 创建了一系列视频片段。 mpd 文件是模板化的,因此它相当简单并且通过了验证。视频播放,但前提是我将 ffplay 放在与所有文件相同的文件夹中并使用:
ffplay -i manifest.mpd
如果我尝试从其他目录播放,甚至使用相同的目录:
ffplay -i c:\tmp\manifest.mpd
或
ffplay -i c:/tmp/manifest.mpd
尝试失败,产生此错误:
[dash @ 0000016ce0d69900] Failed to open an initialization section in playlist 0
[dash @ 0000016ce0d69900] Error when loading first fragment, playlist 0
C:/tmp/manifest.mpd: Invalid argument
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="2020-03-23T14:54:16Z"
publishTime="2020-03-23T14:54:25Z"
timeShiftBufferDepth="PT4811H53M52.3S"
minBufferTime="PT9.6S">
<ProgramInformation>
</ProgramInformation>
<Period id="0" start="PT0.0S">
<AdaptationSet id="0" contentType="video" segmentAlignment="true" bitstreamSwitching="true">
<Representation id="0" mimeType="video/mp4" codecs="avc1.42001e" bandwidth="5953124" width="720" height="480">
<SegmentTemplate timescale="1000000" duration="5000000" availabilityTimeOffset="4.967" initialization="init-stream$RepresentationID$.m4s" media="media-stream$RepresentationID$-$Number%06d$.m4s" startNumber="1">
</SegmentTemplate>
</Representation>
</AdaptationSet>
</Period>
</MPD>
添加 BaseUrl 元素没有帮助;我的猜测是我格式错误。有什么想法可以解决这个问题吗?
问题似乎在于 ffplay 需要 URL 作为其输入参数。在内部,不考虑 .mpd 文件的 Windows 绝对文件路径和段的相对路径的组合,虽然您可以在 ffmpeg 之外手动调整 .mpd 文件以使其可以接受 dashdec.c,你不能让 dashenc.c 以 dashdec.c 可以使用它的方式创建它(除非在生成单个 .mp4 文件的情况下,这将允许你创建单个 BaseUrl 标记).为了正确查看 .mpd,它必须在 URL 上提供,例如通过网络服务器。
我在 windows 机器上使用来自 ffmpeg 的 libav 的 dashenc.c 创建了一系列视频片段。 mpd 文件是模板化的,因此它相当简单并且通过了验证。视频播放,但前提是我将 ffplay 放在与所有文件相同的文件夹中并使用:
ffplay -i manifest.mpd
如果我尝试从其他目录播放,甚至使用相同的目录:
ffplay -i c:\tmp\manifest.mpd
或
ffplay -i c:/tmp/manifest.mpd
尝试失败,产生此错误:
[dash @ 0000016ce0d69900] Failed to open an initialization section in playlist 0
[dash @ 0000016ce0d69900] Error when loading first fragment, playlist 0
C:/tmp/manifest.mpd: Invalid argument
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="2020-03-23T14:54:16Z"
publishTime="2020-03-23T14:54:25Z"
timeShiftBufferDepth="PT4811H53M52.3S"
minBufferTime="PT9.6S">
<ProgramInformation>
</ProgramInformation>
<Period id="0" start="PT0.0S">
<AdaptationSet id="0" contentType="video" segmentAlignment="true" bitstreamSwitching="true">
<Representation id="0" mimeType="video/mp4" codecs="avc1.42001e" bandwidth="5953124" width="720" height="480">
<SegmentTemplate timescale="1000000" duration="5000000" availabilityTimeOffset="4.967" initialization="init-stream$RepresentationID$.m4s" media="media-stream$RepresentationID$-$Number%06d$.m4s" startNumber="1">
</SegmentTemplate>
</Representation>
</AdaptationSet>
</Period>
</MPD>
添加 BaseUrl 元素没有帮助;我的猜测是我格式错误。有什么想法可以解决这个问题吗?
问题似乎在于 ffplay 需要 URL 作为其输入参数。在内部,不考虑 .mpd 文件的 Windows 绝对文件路径和段的相对路径的组合,虽然您可以在 ffmpeg 之外手动调整 .mpd 文件以使其可以接受 dashdec.c,你不能让 dashenc.c 以 dashdec.c 可以使用它的方式创建它(除非在生成单个 .mp4 文件的情况下,这将允许你创建单个 BaseUrl 标记).为了正确查看 .mpd,它必须在 URL 上提供,例如通过网络服务器。