为什么没有DTS pts写入我的mp4容器

时间:2019-05-13 12:07:40

标签: ffmpeg libav libavformat

根据我在这里Muxing AVPackets into mp4 file - revisited(已回答的问题)的问题,我不得不问,为什么在生成的mp4容器中没有为pts / dts写入任何值的原因可能是什么?

我用MediaInfo工具检查了容器文件。 我观察到只有第一个Frame包含容器中pt的值。之后,pts甚至不再显示在mp4文件中,而dts则显示为全零。

这是MediaInfo前3帧的输出:

driver.findElement(By.id("react-select-3--value")).click();
driver.findElement(By.xpath("/html/body/section/div/div[2]/section/div/from/div/div[3]/div[1]/div/div/div[2]/div/div/div/div/div/span[1]/div[2]/input")).sendKeys("New",Keys.ENTER);

即使我设置了pts和dts,它仍然会像这样继续。设置可能已经不正确(我进行了一些计算,例如(1 /帧速率)* FrameNumber),但是当我在avPacket结构中设置相应字段并通过<写入时,我希望至少有一些pts和dts中的数字。 em> av_interleaved_write_frame(outFmtCtx,&avPacket); 到文件。

这有什么问题吗?

编辑:

(请参阅下面的注释,下载到我的testdata和源文件中) 让我感到困扰的一件事是,如果我比较文件中的MediaInfo输出和生成的muxing.c的输出,则是在标题中,生成的muxing.c已经提到文件的持续时间为9960 ms,而我的只有40毫秒。

muxing.c甚至在绘制一帧之前也会调用 avformat_write_header 。是的,我想在调用 av_interleaved_write_frame av_write_trailer 时将更新标头,但我完全不了解其背后的机制。 也许有人可以给我一些背景知识。

此外,我认为可能有必要从我的原始数据中提取一些SPS和PPS(在I切片之前),并将其作为额外的数据提供给 avformat_write_header 调用。但是我根本无法弄清楚自己是否必须这样做,如果这样做,该怎么做。

0 个答案:

没有答案