我正在使用RTMP。我需要编写一个捕获RTMP数据包,解析它并将RTMP视频保存在flv容器中的程序。为此,我需要在流中开始发送的SPS和PPS。但是此数据可能以不同的流发送。例如:
如果我有3个视频流而只有1个包含SPS和PPS的流,我怎么知道哪个流属于SPS和PPS?
“如果我有3个视频流,而只有1个包含SPS和PPS的流,我怎么知道哪个流属于SPS和PPS?”
SPS和PPS仅用于设置MPEG解码器。设置为处理一个流后,您可以更改为解码文件中的其他流,而无需任何新的SPS和PPS。
除非3个流完全不同(即:每个流具有不同的图片大小和拥有不同的帧速率等)。在这种情况下,您将需要新的SPS和PPS。
正如我在我的案例中注意到的那样,我们在RTMP中获得的第一个视频帧具有这两个值。当将其存储为单个FLV文件时,可以将其作为第一帧。但是,如果您想分割成几秒钟的文件,只需要使用破折号进行直播,在这种情况下,您需要将第一帧粘贴到我们创建的每个分割文件中。这可以在ffmpeg的帮助下自动完成。如果要在该RTMP客户端中包含代码,则可以遵循此步骤。否则,除了第一个文件外,您可能无法播放分割文件。
正如我在第一帧转换为十六进制字符串之前所说的那样:
17 - It represents 1 - Keyframe
7 - H.264
00 00 00 00 01 64 00 28 ff e1 00 - ?
1a - Size of the SPS
67 64 00 28 ac d9 40 78 02 27 e5 84 00 00 03 00 04 00 00 03 00 f2 3c 60 c6 58 - SPS
01 - According to AMF0 01 represent number
00 04 - Size of PPS
68 ef bc bc - PPS
[如果有人对用“?”表示的十六进制有所了解。可以解释一下。提前致谢。要详细了解什么是SPS:Refere Here