我和RTMP一起工作。我需要编写一个程序来捕获RTMP数据包,解析它并将RTMP视频保存在flv容器中。为此,我需要SPS和PPS,它们都是在流开始时发送的。但这些数据可能以不同的数据流发送。例如:
如果我有3个视频流,而只有一个包含SPS和PPS的视频流,我如何知道哪一个流属于SPS和PPS?
发布于 2017-02-28 10:45:10
“如果我有3个视频流,而只有一个包含SPS和PPS的视频流,我如何知道哪一个流属于SPS和PPS?”
SPS和PPS仅用于设置MPEG解码器。一旦设置好处理一个流,就可以更改为解码文件中的其他流,而不需要任何新的SPS & PPS。
除非这3种流有很大的不同(即:每种流具有不同的图片大小和不同的帧速率等)。在这种情况下,您将需要新的SPS & PPS。
发布于 2020-05-20 13:48:47
正如我在我的例子中所注意到的,我们在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是什么:请参阅这里
https://stackoverflow.com/questions/42300009
复制相似问题