首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么SPS和PPS在不同的块流标识中存在?

为什么SPS和PPS在不同的块流标识中存在?
EN

Stack Overflow用户
提问于 2017-02-17 14:11:14
回答 2查看 939关注 0票数 2

我和RTMP一起工作。我需要编写一个程序来捕获RTMP数据包,解析它并将RTMP视频保存在flv容器中。为此,我需要SPS和PPS,它们都是在流开始时发送的。但这些数据可能以不同的数据流发送。例如:

  1. SPS和PPS在流6中发送,视频数据在流7中发送。
  2. SPS、PPS和视频数据出现在流7中。

如果我有3个视频流,而只有一个包含SPS和PPS的视频流,我如何知道哪一个流属于SPS和PPS?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-28 10:45:10

“如果我有3个视频流,而只有一个包含SPS和PPS的视频流,我如何知道哪一个流属于SPS和PPS?”

SPS和PPS仅用于设置MPEG解码器。一旦设置好处理一个流,就可以更改为解码文件中的其他流,而不需要任何新的SPS & PPS。

除非这3种流有很大的不同(即:每种流具有不同的图片大小和不同的帧速率等)。在这种情况下,您将需要新的SPS & PPS。

票数 1
EN

Stack Overflow用户

发布于 2020-05-20 13:48:47

正如我在我的例子中所注意到的,我们在RTMP中获得的第一个视频帧就是具有这两个值。当您将其存储为单个FLV文件时,您只需将其作为第一个帧即可。

但是,如果您想要将其分割成较小的文件,间隔较短--例如,使用破折号进行流处理--那么您需要将第一帧粘贴到您创建的每个拆分文件中。这可以在ffmpeg的帮助下自动完成。在这种情况下,如果您想在RTMP客户机中包含代码,您可以遵循以下步骤。否则,除了第一个文件外,您可能无法播放拆分文件。

正如我前面提到的,第一个帧转换为十六进制字符串:

代码语言:javascript
复制
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是什么:请参阅这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42300009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档