gpt4 book ai didi

c++ - 将一系列 h264 帧写入多个文件

转载 作者:太空宇宙 更新时间:2023-11-04 13:03:17 24 4
gpt4 key购买 nike

我有一个 h264 帧流(来自 RTSP 流,但我认为它是无关紧要的),我知道序列参数集字节,我想将这些帧以几个 .h264 文件的形式写入磁盘(每个大约 N 帧)。

如果我写

sequence parameter set - 0x00 0x00 0x00 0x01 - frame1 - 0x00 0x00 0x00 0x01 - frame2 - 0x00 0x00 0x00 0x01 - frame3 - 

依此类推到磁盘(没有破折号,只是一堆字节),我会得到一个正确的文件(至少,它可以通过 vlc 播放)

但是如果我要写文件:

sequence parameter set - 0x00 0x00 0x00 0x01 - frame1 - ...
sequence parameter set - 0x00 0x00 0x00 0x01 - frameN - ...
sequence parameter set - 0x00 0x00 0x00 0x01 - frame2N - ...
sequence parameter set - 0x00 0x00 0x00 0x01 - frame3N - ...

什么时候它们中的一些是正确的(在 vlc 可以播放的意义上),而其中一些不是(而且不仅第一个文件是正确的!)显然,并不是每一帧都可以位于 h264 文件的开头,但是哪一个可以呢?或者在不同文件中存储 h264 帧的正确方法是什么?

说到工具,我将 C++ 与 live555 结合使用库,并且可以使用 h264bitstream 获取帧类型图书馆,但我想这并不重要。我不想使用任何命令行工具(如 ffmpeg),而是可以使用一些附加库在 C++ 中实现的解决方案。

最佳答案

为了可以播放(没有其他信息),每个文件应该包含:

  • SPS(序列参数集)
  • PPS(图片参数集)
  • I 帧(可以是 IDR 或 SLICE_I)

接下来解码器可以解码其他切片类型(P,B)。

一个简单的方法是存储传入的 SPS 和 PPS 帧,并在每个 IDR 帧(也使用 00 00 00 01 开始代码)之前写入它们(使用 00 00 00 01 开始代码)。

关于c++ - 将一系列 h264 帧写入多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43378438/

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