我应该如何在 ffmpeg 中使用破折号(不是 webm_dash_manifest!)格式?

2024-03-14

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(使用前将#替换为@)

我应该如何在 ffmpeg 中使用破折号(不是 webm_dash_manifest!)格式? 的相关文章

随机推荐

  • HtmlService 表不支持电子表格中的换行符和超链接

    我正在编写 Google Apps 脚本 以使用 HtmlService 将电子表格中的数据显示到 HTML 表中 但我面临以下两个挑战 如果电子表格单元格值中有换行符 表格会将其显示为单行 如果电子表格单元格具有超链接 例如链接到 Goo
  • XmlElement(name="custom_name") 在与其余服务集成的 Spring Boot 中不起作用

    我对休息服务世界几乎是新手 在这里我试图更改输出 xml 中显示的字段名称 不确定 我是否遵循正确的方法 任何帮助都是一件好事 活动 java import javax xml bind annotation XmlAccessType i
  • 为什么 Windows 为其系统地址空间保留 1Gb(或 2Gb)?

    众所周知 Windows 应用程序在 32 位系统上通常有 2Gb 的私有地址空间 使用 3Gb 开关可以将该空间扩展到 3Gb 操作系统自行保留剩余的 4Gb 我的问题是为什么 在内核模式下运行的代码 即设备驱动程序代码 有自己的地址空间
  • DCPCrypt/Delphi 未正确编码 Rijndael

    我有 DCPCrypt 包 最新版本 并尝试在 Delphi2007 中使用来自 NIST 分发的 AES 已知答案测试 KAT 向量的测试值进行 AES Rijndael CBC 编码 128 位块 256 位密钥 一个样本测试向量 KE
  • 具有符合协议的惰性、私有属性的 Swift Struct

    首先 我有一个仅定义一些只读属性的协议 例如 protocol Example var var1 String get var varArray String get 然后我想创建一个符合该协议的结构 我遇到的问题是我有两个相互冲突的要求
  • Firestore 查询具有多个值的循环

    我正在尝试使用字符串中保存的数据检索多个 Firestore 文档 这个想法是 对于数组中的每个值 我将使用 Firestore 查询来检索与该查询匹配的文档并将其推送到另一个数组 我在实现此目标时遇到了一些问题 到目前为止我已经尝试过 e
  • “Microsoft VBScript 运行时错误‘800a000d’‘800a000d’

    我有下一个代码 其工作原理如下 从url接收一些参数 将此数据插入名为 clients 的表中 然后我选择客户表中最后引入的数据 最后 它尝试将此数据插入到另一个名为 users 的表中 但我收到这个错误 Microsoft VBScrip
  • 在 jQuery.load() 上对容器的高度进行动画处理

    我正在使用 container div load url 通过 ajax 填充 div 我想将高度设置为返回内容的高度 但真的不知道如何实现这一点 我尝试过使用这样的东西 main fadeOut function main load ur
  • 由于文件 libmpi.so.1 丢失而出错

    我使用 Omnet 和 Veins 进行模拟 直到我昨晚从 Ubuntu 15 升级到 16 04 LTS 之前它都工作正常 现在 我在尝试运行模拟时收到以下错误 error while loading shared libraries l
  • 语音识别监听器在 Galaxy SII 中不起作用

    我正在开发一个Android应用程序 它总是监听用户的声音 当我在 Sony X10i 上运行时它可以工作 但在 Samsung Galaxy SII 上则不起作用 这是我的代码 SpeechRecognizer speechRecogni
  • Android比较imageView和image

    我想将当前 imageView 与 R drawable 中的图像进行比较 我想我已经尝试了一切 但我无法解决这个问题 我尝试了堆栈溢出的所有方法 XML
  • npm 安装失败,出现 make not found 错误

    当我尝试在 Nodejs 服务器上安装时间时 出现以下错误 email protected cdn cgi l email protection install var www track node modules time node gy
  • 如何使用 OpenGL ES 2.0 着色器完成这些图像处理任务?

    如何使用 OpenGL ES 2 0 着色器执行以下图像处理任务 色彩空间变换 RGB YUV HSL Lab 图像的旋转 转换为草图 转换为油画 我刚刚向我的开源添加了过滤器GPU图像框架 https github com BradLar
  • 为什么HashMap比HashSet快?

    我一直在阅读 研究原因HashMap比HashSet 我不太明白以下说法 HashMap比HashSet因为这些值与唯一的键相关联 In HashSet 成员对象用于计算两个对象的哈希码值可以相同 因此equals 方法用于检查相等性 如果
  • Windows 驱动程序时间戳函数

    我正在修改现有的 Windows 内核设备驱动程序 并且需要在其中捕获时间戳 我打算使用 time h 库并调用 Clock 函数来实现这一点 但是在 Windows Visual Studio 下 链接失败 所以我把它作为我需要在驱动程序
  • 应用于浮动操作按钮的 Alpha 会创建奇怪的圆圈?

    在我的应用程序中 我使用材料设计浮动操作按钮 每当我将按钮的 backgroundTintColor 属性更改为 alpha 低于 255 的值时 它就会在按钮内创建这个奇怪的圆圈 我已经用我的 xml 代码提供了下面按钮的图片 任何帮助将
  • 存储人类可读的 UUID 的最小方式是什么?

    存储人类可读且与数据库广泛兼容的 UUID 的最小方式是什么 我正在考虑使用十六进制值的某种字符数组 作为常见的方法 我认为将二进制数据 16 字节 编码为 Base64 可能是您想要的
  • 如何选择帖子的最后编辑版本?

    我有一个像SO这样的问答网站 我还有一个表格 其中包含问题和答案及其编辑版本 这是我的表结构 QandA id title body related type edited id 1 title1 question content NULL
  • 为什么在此示例中使用 tmp_name

    我对 php 很陌生 我正在查看一个关于文件上传的示例 在里面getimagesize 功能 FILES file temp name 当我回显 FILES file temp name 时 它显示以下输出 C xampp tmp phpD
  • 我应该如何在 ffmpeg 中使用破折号(不是 webm_dash_manifest!)格式?

    FFmpeg 有一种名为 dash 的格式 gt ffmpeg formats E dash DASH Muxer 这大概对应于 libavformat dashenc c 中的代码 我可以在网络上找到许多有关如何使用 WebM DASH