当前位置: 首页 > 知识库问答 >
问题:

破折号段偏移量

蓝夕
2023-03-14

我试图将像“plex”或“emby”这样的实时代码转换与我的应用程序集成在一起。

我可以服务dash内容到shaka-player或dash.js,但只有在“现场模式”。但我想通过玩家来实现搜索。

我看了一下plex,为了启用这一点,他们创建了自己的mpd文件和持续时间,这样玩家就有了一个完整的搜索栏。

然而,当寻找时,玩家会要求一个段号,如:449。我需要停止ffmpeg并使用偏移量(-ss< >) 重新启动,但是ffmpeg将使用初始段从段0重新启动代码转换会话。

我想要的是告诉ffmpeg从一个seekpoint开始,但只从段号和现在开始输出。

当使用hls和MPEGT时,我可以告诉ffmpeg在某个段输出:使用-segment_start_number选项,但这不适用于破折号。和plex使用他们自己的基于ffmpeg的代码转换器,并使用-skip_to_segment选项

我试图通过在我的Web服务器上保持一个手动偏移量来“黑”,即使在Dash.js和shaka-player无法恢复流之后,我提供了“假设的”正确的片段..另一个habd上的VLC能够(可能更能容忍)区段中的错误。

是在破折号中搜索后假定的正确段(包含初始段)或仅包含该段。

ffmpeg是否能够开始将dash分段为假定的分段(用于搜索和恢复)

同样的技术在hls中使用强制关键帧和自定义m3u8(所有“预测”段),但是计算正确的段长度和正确的带宽要困难得多,而且破折号对变化的容忍度更高。

我真的希望能够通过我的现场转码视频寻求。

这里是一个自定义mpd文件,用于启用“查找”,以供参考:

<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="static"
    suggestedPresentationDelay="PT1S"
    mediaPresentationDuration="PT49M2.920S"
    maxSegmentDuration="PT2S"
    minBufferTime="PT10S">
    <Period start="PT0S" id="0" duration="PT49M2.920S">
        <AdaptationSet segmentAlignment="true">
            <SegmentTemplate timescale="1" duration="1" initialization="$RepresentationID$/initial.mp4" media="$RepresentationID$/$Number$.m4s" startNumber="1">
            </SegmentTemplate>
            <Representation id="0" mimeType="video/mp4" codecs="avc1.640029" bandwidth="3766000" width="1920" height="1080">
            </Representation>
        </AdaptationSet>
        <AdaptationSet segmentAlignment="true">
            <SegmentTemplate timescale="1" duration="1" initialization="$RepresentationID$/initial.mp4" media="$RepresentationID$/$Number$.m4s" startNumber="1">
            </SegmentTemplate>
            <Representation id="1" mimeType="audio/mp4" codecs="mp4a.40.2" bandwidth="188000" audioSamplingRate="48000">
                <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="6"/>
            </Representation>
        </AdaptationSet>
    </Period>
</MPD>

下面是完成该任务的ffmpeg命令:

ffmpeg -ss 0 -i movie.mkv -y -acodec aac -vcodec libx264 -f dash -min_seg_duration 1000000 -individual_header_trailer 0 -pix_fmt yuv420p -vf scale=trunc(min(max(iw\,ih*dar)\,1920)/2)*2:trunc(ow/dar/2)*2 -bsf:v h264_mp4toannexb -profile:v high -level 4.1 -map_chapters -1 -map_metadata -1 -preset veryfast -movflags frag_keyframe+empty_moov -use_template 1 -use_timeline 0 -remove_at_exit 1 -crf 23 -bufsize 7532k -maxrate 3766k -start_at_zero -threads 0 -force_key_frames expr:if(isnan(prev_forced_t),eq(t,t),gte(t,prev_forced_t+1)) -init_seg_name $RepresentationID$/0_initial.mp4 -media_seg_name $RepresentationID$/0_$Number$.m4s /transcoding_temp/Z1GVWEc/index.mpd
-media_seg_name $RepresentationID$/1233_$Number$.m4s

这些片段将是1233_1,1233_2,1233_*,这样我就可以在搜索后提供正确的片段。但是播放器并没有恢复,仍然在下载后续的片段。我想,由于生成了一个新的初始段,我不知何故错过了搜索后连续播放的头部,但我可能错了。

谢谢你的帮助

共有1个答案

翁宜年
2023-03-14

您显示的清单是静态的,这意味着它不是实时服务流。如果您想让客户机能够搜索仍在运行的实时流,那么您需要定义一个mpd@TimeShiftBufferDepth属性。

使用播放器:http://reference.dashif.org/dash.js/v2.6.4/samples/dash-if-reference-player/index.html?url=https://vm2.dashif.org/livesim/testpic_2s/manifest.mpd

也许可以使用这个工作示例作为参考,找出您的实现在哪里不同?

 类似资料:
  • 问题内容: 我开始学习一些JavaScript,并且了解在命名标识符时不允许使用破折号。但是,在CSS中,ID和类通常使用破折号。 在CSS中使用破折号是否会干扰javascript交互?例如,如果我要使用。我已经尝试了一些使用getElementByID并将破折号作为div ID的名称的示例,并且它可以工作,但是我不确定在所有其他情况下是否都是这种情况。 问题答案: 在ID(或类名,如果您选择的

  • 我的dash应用程序具有基于可用dash留档中找到的食谱的导航。它的工作原理,但它不好看。谁知道介绍菜单的更好方法?我不想开发一个特殊的流星组件,但我很乐意使用目前可用的框架之一(引导,语义学,...)。

  • 问题内容: 我希望这可以使某些使用破折号的样式的人免于头痛,尤其是因为引导程序变得如此流行。 我通过以下方式使用角度1.0.5 在ngClass文档中,该示例很简单,但还提到该表达式可以是类名到布尔值的映射。我试图在我的图标上使用“ icon-white”样式,如引导文档中所示,具体取决于布尔变量。 上面的行不起作用。当true为true 时,该类不附加。但是,如果将键更改为,则会成功将其添加到类

  • 可以设置文本样式,以便在出现换行符之前添加破折号。 示例: Lorem ipsum dolor坐在那里,奉献给我们,我们的工作和伟大的礼物。我们的服务,我们的服务-------------------------------------------------------- 我爱你,我爱你,我爱你,我爱你,我爱你,我爱你,我爱你,圣骑士-------------------------------

  • 问题内容: 我正在尝试使用 “ python get_timestamp.py -f gsham_input.xvg -1 -0.1348 -2 -0.1109” 运行以下python 。但是,似乎python错误地将小数点前的减号加了破折号,并显示了以下错误:“ file” get_timestamp.py“,第21行,在value1 = float(arg)ValueError中:float(

  • 问题内容: 我要备份数据库时出现错误 有什么办法可以用表名(temp_01-01-000001)解决这个问题。 问题答案: 您可以编辑文件/system/database/drivers/mysql/mysql_utility.php的第132行 从: 至: