gpt4 book ai didi

video - 截断 H.264 数据的安全位置?

转载 作者:行者123 更新时间:2023-11-28 21:42:15 25 4
gpt4 key购买 nike

我正在编写一个 transmuxer,将 MPEG-TS 文件从 HLS 流转换为 MP4 文件,然后可以在网络浏览器中播放。

我原本希望能够将 TS 文件简单地一对一映射到 MP4 文件,但事实证明,一些 HLS 流被分开,因此各个 TS 文件并不总是以 IDR 开头帧;这会在您越过片段边界时导致图像卡住和卡顿。

我想我可以通过连接来自多个 TS 文件的数据、忽略原始文件边界、自己识别视频流中的 IDR 帧以及在 IDR 帧上开始每个新的 MP4 片段来解决这个问题。但是,如果我这样做,我担心文件的结尾 可能会损坏; IDR 帧保证后面的帧不能引用任何前面的数据,但没有任何迹象表明前面的 B 帧不能向前看过去的 IDR 帧。

那么,我怎么知道在哪里进行剪切是安全的,以便剪切前的 B 帧不会试图越过它?

最佳答案

如果您在 IDR 帧处结束剪辑,我认为您没有问题。但我不是 100% 确定。

来自 H.264 规范,例如 RFC3984 :

IDR picture: A coded picture containing only slices with I or SIslice types that causes a "reset" in the decoding process. Afterthe decoding of an IDR picture, all following coded pictures indecoding order can be decoded without inter prediction from anypicture decoded prior to the IDR picture.

请注意,在解码顺序中,帧不能引用 IDR 之前的其他帧。

为了让 B 帧引用 IDR 帧之后的任何帧,引用的帧必须先出现在文件中,因为它必须首先解码。所以B帧一定在IDR帧之后。这意味着这个 B 帧不能引用 IDR 帧之前的任何帧。在我看来,这没有任何意义。

例如:假定以下帧按显示顺序排列:

(other frames) B IDR P

如果 P 引用 IDR,而 B 将引用 P,这必须是解码顺序:

(other frames) IDR P B

在此示例中,B 不能引用任何其他帧,它只能引用 IDR 和 P。

请注意,即使发生这种情况,如果您发现 IDR 之后的帧显示顺序在 IDR 之前,您也可以检测到这一点。

关于video - 截断 H.264 数据的安全位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30138768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com