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

计算m4s段文件后缀在HTML5视频流时,用户寻求另一个时间

章禄
2023-03-14

我使用Mp4Box为长MP4视频创建了固定长度的片段。Mp4Box创建了一个元信息文件mv_init.mp4mv_1. m4smv_2. m4s等片段,...我使用HTML5 Media Source扩展流式传输视频,流式传输正常工作。

问题是我无法利用HTML5播放器的寻时功能。当用户使用seekbar搜索到另一个时间点时,我需要为该currentTime获取正确的段文件(mv_{number}.m4s)。

例如:

  • 视频持续时间:2小时

25分钟=25×60秒=1500秒。由于每个段为10秒,我需要段号1500 / 10 = 150。需要的段文件是mv_150. m4s

计算似乎是正确的,但HTML5播放器在mv_150之后会下载更多文件。m4s,然后继续播放流媒体。

如何正确计算段文件号,以便在查找后,流媒体平稳运行,而无需下载任何额外文件?

要创建MP4视频的片段,我使用了以下命令:

MP4Box -dash 10000 -out video.mpd -dash-profile live -segment-name mv_ -rap video.mp4

共有1个答案

通典
2023-03-14

我对此事进行了研究并找到了真正的原因。加载片段的计算是正确的。问题在于视频文件中的关键帧间隔。关键帧是视频中的一帧,视频随后可以从中加载并从该点运行。所以在我的情况下,我需要在每个片段的开头插入关键帧。因此,当我们在不同的时间位置搜索视频时,加载的下一个片段在其开头包含一个关键帧。

视频文件中的关键帧可以使用FFMPEG设置。例如,如果我们有一段5秒的视频,那么我们必须使用ffmpeg以5秒的间隔创建关键帧。设置关键帧时的另一个重要点是查看视频的帧速率。视频必须有固定的帧速率,这样我们才能精确计算关键帧的位置。

例子:

Video File: gladiator.mp4

Segment Size: 5 seconds

不,我们使用FFMPEG设置帧速率和关键帧间隔

我是角斗士。mp4-x264参数keyint=120:min keyint=120:no scenecut=1-r 24角斗士输出。mp4

keyint=120 i.e; 24 fps * 5 seconds = 120

现在我们使用Mp4Box创建段文件

MP4Box-dash 5000-frag 5000-out gladiator。mpd-短跑配置文件点播-段名mv_uu角斗士输出。mp4

因此,它将创建类似mv_1、mv_2。。等等,在每个段文件的开头都有关键帧。

可视破折号流示例

 类似资料:
  • 问题内容: 我如何定义一个具有两个计算字段的视图,例如… …并根据前两个计算字段创建第三个计算字段,如… …? 当我按名称引用前两个计算字段时,我收到一条消息,指出字段未知。 谢谢! 问题答案: 由于视图中不允许子查询,因此您需要通过创建多个视图来模拟它们。 例如,如果直接执行此查询,将解决您的问题: 根据MySQL文档,视图在FROM子句中具有不能包含子查询的限制。要变通解决此限制并将该查询转换

  • 2 3+ 我错过了什么,导致了下面的错误? 线程“main”Java.lang.NumberFormatException:空字符串 位于sun.misc.FloatingDecimal.ReadJavaFormatString(FloatingDecimal.Java:1842)位于sun.misc.FloatingDecimal.ParseDouble(FloatingDecimal.Java

  • 我真的很难理解使用Node.js将ffmpeg的实时输出流到HTML5客户端的最佳方法,因为有很多变量在起作用,而我在这方面没有太多经验,我花了很多时间尝试不同的组合。 我的用例是: 1)IP视频摄像机RTSP H.264流由FFMPEG拾取,并使用节点中的以下FFMPEG设置重新多路复用到mp4容器中,输出到stdout。这只在初始客户端连接上运行,以便部分内容请求不会再次尝试生成FFMPEG。

  • 问题内容: 我正在构建具有自定义界面的HTML5视频播放器,但是在显示视频时长信息时遇到一些问题。 我的HTML很简单: 我用来获取和插入持续时间的javascript是 问题是什么也没有发生。我知道视频文件包含持续时间数据,因为如果我仅使用默认控件,则显示正常。 但是真正奇怪的是,如果我像这样在我的代码中放置alert(duration) 那么它就可以正常工作(减去弹出的烦人警报)。任何想法在这

  • 问题内容: 我正在做一个使用HTML和Javascript的项目,它将与本地文件一起在本地运行。我需要通过输入选择一个文件,获取文件信息,然后决定是否将其添加到列表中并进行复制。如果我决定使用它,则必须将其放在队列中以备后用。否则,我将丢弃并选择另一个文件。 我面临的问题是我无法找到一种仅通过在输入中选择视频持续时间来获得视频持续时间的方法。 我进行了很多搜索,但没有找到任何方法来获取持续时间。在

  • 我有一个blob数组(实际上是二进制数据--我可以表达它是最有效的。我现在使用Blobs,但可能或其他更好的方法)。每个Blob包含1秒的音频/视频数据。每秒都会生成一个新的Blob并将其追加到我的数组中。因此代码大致如下所示: 我的目标是将此音频/视频数据流式传输到HTML5元素。我知道Blob URL可以像下面这样生成和播放: