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

DASH package(mpd)在引发onratechange事件后冻结

东门文斌
2023-03-14

我正在尝试从mp4文件创建自适应流。我在流媒体方面有相当丰富的经验,并通过Silverlight成功实现了流畅的流媒体。我们想要一个在HTML5中工作的解决方案。我在追求短跑。以下是我采取的步骤。。。

  1. 使用ffmpeg将mp4重新采样到不同的大小

我已经做了很多工作来学习这些实用程序,并创建一个过程,以获得我认为可行的输出。创建可靠的破折号工件。但我似乎做错了什么。下面是我运行的命令行示例。

第一步我创建了三个不同的文件。。。三种不同的价格和尺寸。。。(这些可能不是确切的命令行,它们来自旧笔记……但参数值是我确定使用的)

ffmpeg -y -i C:\_SIMULATED_SHARE_C\ff\big_buck_bunny.mp4 -c:v libx264 -x264opts keyint=24:min-keyint=24:no-scenecut -b:v 1500k -maxrate 1500k -bufsize 1000k -vf "scale=-1:720" C:\_SIMULATED_SHARE_C\ff\output\outputfile720.mp4

ffmpeg -y -i C:\_SIMULATED_SHARE_C\ff\big_buck_bunny.mp4 -c:v libx264 -x264opts keyint=24:min-keyint=24:no-scenecut -b:v 800k -maxrate 800k -bufsize 500k -vf "scale=-1:540" C:\_SIMULATED_SHARE_C\ff\output\outputfile540.mp4

ffmpeg -y -i C:\_SIMULATED_SHARE_C\ff\big_buck_bunny.mp4 -c:v libx264 -x264opts keyint=24:min-keyint=24:no-scenecut -b:v 400k -maxrate 400k -bufsize 400k -vf "scale=-1:360" C:\_SIMULATED_SHARE_C\ff\output\outputfile360.mp4

这就给了你三个需要分割的文件。所以我使用Bento4中的mp4fragment实用程序对它们进行分段。这个命令行很简单,所以我不提供一个例子。

我使用Bento4s mp4dash来创建短跑。像这样的。。。

"E:\\_INSTALL\\Bento4\\Bento4-SDK-1-4-3-607.x86-microsoft-win32-vs2010\\Bento4-SDK-1-4-3-607.x86-microsoft-win32-vs2010\\bin\\mp4dash.exe --mpd-name=\"\\\\d9fqt52\\_SIMULATED_SHARE_C\\ff\\output\\dash\\something.mpd\" -f -o \"\\\\d9fqt52\\_SIMULATED_SHARE_C\\ff\\output\\dash\" \"\\\\d9fqt52\\_SIMULATED_SHARE_C\\ff\\output\\bunny360f.mp4\" \"\\\\d9fqt52\\_SIMULATED_SHARE_C\\ff\\output\\bunny540f.mp4\" \"\\\\d9fqt52\\_SIMULATED_SHARE_C\\ff\\output\\bunny720f.mp4\" "

这个运行正常。并创建mpd文件,一个包含段文件的音频文件夹,一个包含3个文件夹的视频文件夹,每个文件夹包含段文件。

我能够配置IIS来播放mpd ok。以及分段文件。视频播放得很好。。。然后就停止了。它冻结在50到60秒之间。就在它冻结之前,我可以确认HTML5视频标签的onratechange事件已引发。这是一个随着比赛速度的改变而提高的事件。我没有做任何改变,只是碰巧发生了。

有问题的实际视频大约1小时长。我也在使用dash.js库作为播放器。

如果您能确定我应该更改的任何组件或细节,请告诉我!

2016年3月7日更新

根据要求,这里是MPD内容。。。

<?xml version="1.0" ?>
<MPD mediaPresentationDuration="PT51M51.909S" minBufferTime="PT0.80S" profiles="urn:mpeg:dash:profile:isoff-live:2011" type="static" xmlns="urn:mpeg:dash:schema:mpd:2011">
  <!-- Created with Bento4 mp4-dash.py, VERSION=1.6.0-607 -->
  <Period>
    <!-- Audio -->
    <AdaptationSet lang="en" mimeType="audio/mp4" segmentAlignment="true" startWithSAP="1">
      <SegmentTemplate duration="801" initialization="$RepresentationID$/init.mp4" media="$RepresentationID$/seg-$Number$.m4f" startNumber="1" timescale="1000"/>
      <Representation audioSamplingRate="48000" bandwidth="132491" codecs="mp4a.40.2" id="audio/en">
        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
      </Representation>
    </AdaptationSet>
    <!-- Video -->
    <AdaptationSet maxHeight="720" maxWidth="1280" mimeType="video/mp4" minHeight="540" minWidth="640" segmentAlignment="true" startWithSAP="1">
      <SegmentTemplate duration="801" initialization="$RepresentationID$/init.mp4" media="$RepresentationID$/seg-$Number$.m4f" startNumber="1" timescale="1000"/>
      <Representation bandwidth="785536" codecs="avc1.64001F" frameRate="30000/1001" height="540" id="video/1" scanType="progressive" width="960"/>
      <Representation bandwidth="403537" codecs="avc1.64001E" frameRate="30000/1001" height="360" id="video/2" scanType="progressive" width="640"/>
      <Representation bandwidth="1496514" codecs="avc1.64001F" frameRate="30000/1001" height="720" id="video/3" scanType="progressive" width="1280"/>
    </AdaptationSet>
  </Period>
</MPD>

2016年3月7日更新

这是两个不同视频的控制台输出,它们在50到60之间因某种未知原因停止

///ABS VIDEO 

58393][rulesController] [RULES]: playbackTimeRule [Fragment:download,82,MediaSegment,0video] Default 
dash.all.js:11 [58395][rulesController] [RULES]: sameTimeRequestRule [Fragment:download,82,MediaSegment,0,video] Default 
dash.all.js:11 [58401][indexHandler][audio] Getting the request for time: 82.082 
dash.all.js:11 [58403][indexHandler][audio] Index for time 82.082 is 81 
dash.all.js:11 [58405][indexHandler][audio] SegmentTemplate: 81.08099999999999 / 1361.235 
dash.all.js:11 [58406][indexHandler][audio] SegmentTemplate: 82.082 / 1361.235 
dash.all.js:11 [58407][rulesController] [RULES]: playbackTimeRule [Fragment:download,82,MediaSegment,0audio] Default 
dash.all.js:11 [58417][fragmentLoader] loaded video:MediaSegment:82.082 (200, 18ms, 2ms) 
dash.all.js:11 [58419][rulesController] [RULES]: sameTimeRequestRule [Fragment:download,82,MediaSegment,0,audio] Default 
dash.all.js:11 [58435][fragmentLoader] loaded audio:MediaSegment:82.082 (200, 14ms, 0ms) 
dash.all.js:11 [59390][indexHandler][video] Getting the request for time: 83.083 
dash.all.js:11 [59392][indexHandler][video] Index for time 83.083 is 82 
dash.all.js:11 [59393][indexHandler][video] SegmentTemplate: 82.082 / 1361.235 
dash.all.js:11 [59394][indexHandler][video] SegmentTemplate: 83.08299999999998 / 1361.235 
dash.all.js:11 [59395][rulesController] [RULES]: playbackTimeRule [Fragment:download,83,MediaSegment,0video] Default 
dash.all.js:11 [59396][rulesController] [RULES]: sameTimeRequestRule [Fragment:download,83,MediaSegment,0,video] Default 
dash.all.js:11 [59401][indexHandler][audio] Getting the request for time: 83.083 
dash.all.js:11 [59403][indexHandler][audio] Index for time 83.083 is 82 
dash.all.js:11 [59404][indexHandler][audio] SegmentTemplate: 82.082 / 1361.235 
dash.all.js:11 [59406][indexHandler][audio] SegmentTemplate: 83.08299999999998 / 1361.235 
dash.all.js:11 [59408][rulesController] [RULES]: playbackTimeRule [Fragment:download,83,MediaSegment,0audio] Default 
dash.all.js:11 [59416][fragmentLoader] loaded video:MediaSegment:83.08299999999998 (200, 17ms, 1ms) 
dash.all.js:11 [59418][rulesController] [RULES]: sameTimeRequestRule [Fragment:download,83,MediaSegment,0,audio] Default 
dash.all.js:11 [59437][fragmentLoader] loaded audio:MediaSegment:83.08299999999998 (200, 14ms, 1ms) 
dash.all.js:11 [59902][scheduleController][video] Stalling Buffer 
dash.all.js:11 [59903][bufferController][video] Waiting for more buffer before starting playback. 
dash.all.js:11 [59906][scheduleController][audio] Stalling Buffer 
dash.all.js:11 [59907][bufferController][audio] Waiting for more buffer before starting playback. 
dash.all.js:11 [63684][playbackController] <video> ratechange:  0 




///HOG VIDEO

[58250][rulesController] [RULES]: playbackTimeRule [Fragment:download,105,MediaSegment,0audio] Default 
dash.all.js:11 [58266][fragmentLoader] loaded video:MediaSegment:84.105 (200, 28ms, 1ms) 
dash.all.js:11 [58269][rulesController] [RULES]: sameTimeRequestRule [Fragment:download,105,MediaSegment,0,audio] Default 
dash.all.js:11 [58287][fragmentLoader] loaded audio:MediaSegment:84.105 (200, 14ms, 1ms) 
dash.all.js:11 [58982][indexHandler][video] Getting the request for time: 84.906 
dash.all.js:11 [58983][indexHandler][video] Index for time 84.906 is 105 
dash.all.js:11 [58984][indexHandler][video] SegmentTemplate: 84.105 / 3111.909 
dash.all.js:11 [58984][indexHandler][video] SegmentTemplate: 84.906 / 3111.909 
dash.all.js:11 [58985][rulesController] [RULES]: playbackTimeRule [Fragment:download,106,MediaSegment,0video] Default 
dash.all.js:11 [58986][rulesController] [RULES]: sameTimeRequestRule [Fragment:download,106,MediaSegment,0,video] Default 
dash.all.js:11 [58989][indexHandler][audio] Getting the request for time: 84.906 
dash.all.js:11 [58990][indexHandler][audio] Index for time 84.906 is 105 
dash.all.js:11 [58991][indexHandler][audio] SegmentTemplate: 84.105 / 3111.909 
dash.all.js:11 [58992][indexHandler][audio] SegmentTemplate: 84.906 / 3111.909 
dash.all.js:11 [58993][rulesController] [RULES]: playbackTimeRule [Fragment:download,106,MediaSegment,0audio] Default 
dash.all.js:11 [59002][fragmentLoader] loaded video:MediaSegment:84.906 (200, 14ms, 1ms) 
dash.all.js:11 [59003][rulesController] [RULES]: sameTimeRequestRule [Fragment:download,106,MediaSegment,0,audio] Default 
dash.all.js:11 [59014][fragmentLoader] loaded audio:MediaSegment:84.906 (200, 8ms, 1ms) 
dash.all.js:11 [59735][scheduleController][video] Stalling Buffer 
dash.all.js:11 [59736][bufferController][video] Waiting for more buffer before starting playback. 
dash.all.js:11 [59738][scheduleController][audio] Stalling Buffer 
dash.all.js:11 [59739][bufferController][audio] Waiting for more buffer before starting playback. 
dash.all.js:11 [61695][playbackController] <video> ratechange:  0 

共有1个答案

安承教
2023-03-14

您能否提供更多信息,例如bento生成的清单,以及dash生成的调试控制台日志。播放何时停止?还有,dash的哪个版本。你在使用js吗?最新发布的版本是2.0,你可以从/dev分支的https://github.com/Dash-Industry-Forum/dash.js.git

干杯

 类似资料:
  • 项目使用 Hibernate 3.5、Spring Webflow 2 和 Hibernate Envers 进行审计。Envers 配置为Hibernate.cfg.xml。我在实体“文章组”和“文章”之间有一对多的关系映射。表“文章”具有外键“article_group_id”引用表“article_groups”中的 id。在前端,当我删除文章时,Hibernate Envers 会为删除后

  • 我有一个Java类,它使用datastax cassandra驱动程序将pojo写入cassandra表。一切都很好,直到不得不向cassandra表写入一个类对象。它抛出以下错误: 由:com.datastax.driver.core.exceptions.codecNotFoundException引起:未找到请求操作的编解码器:[Frosted <->code.generic.common.

  • 我正在使用一个相对较大的代码存储库,需要全部加载到Intellij中。最近Intellij挂起了很长时间( 冻结期间的Stacktrace:

  • 在用户任务上应用边界计时器事件,在服务任务上添加java类属性,但当计时器到期触发异常列表时,会抛出,即无法找到分配给服务任务的类。类存在于类路径上。activiti配置中还启用了asyncExecutorActivate属性 这里有一个代码 例外 Bean初始化

  • 我有一个应用程序,我正在做html5拖放分类,所以用户可以选择分类并移动到他想要的地方。 一切都很好,但有时类别列表很大,如果用户需要将其向下移动,他们希望使用鼠标滚轮滚动,但问题是拖动启动后不会触发此事件。 注:是的,如果光标移到底部,浏览器将滚动,但在我的应用程序中,用户体验很重要,因为有时他们会对50个类别进行排序,这需要很多时间 下面是示例代码,若您开始拖动div并在鼠标上滚动滚轮,那个么

  • 我一直在尝试构建一个项目,其中Flask应用程序可以自动将选定数量的视频连接到“核心视频”。 用户可以上传视频,并将其发送到amazon s3进行存储。所有视频都由Moviepy预处理为mp4文件,以24 fps无音频运行,分辨率为720p。经过此预处理后,视频上传到amazon s3。 在s3中的所有新上载中,创建了一个队列,管理员可以批准或删除该队列。所有经批准的视频最终都会出现在一个列表中,