我有一个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帧存储在不同文件中的正确方法是什么?
说到工具,我使用带有live555库的c ++,并且可以使用h264bitstream库获取帧类型,但我想这没关系。 我不想使用任何命令行工具(如ffmpeg),但可以使用一些额外的库在c ++中实现。
答案 0 :(得分:0)
为了可播放(没有其他信息),每个文件应包含:
接下来解码器可以解码其他切片类型(P,B)。
一种简单的方法是存储传入的SPS& PPS帧并在每个IDR帧之前写入(使用00 00 00 01起始码)(也使用00 00 00 01起始码)。