如何解码 H264 SDP 中的 sprop 参数集?

Posted

技术标签:

【中文标题】如何解码 H264 SDP 中的 sprop 参数集?【英文标题】:How to decode sprop-parameter-sets in a H264 SDP? 【发布时间】:2011-01-23 15:08:34 【问题描述】:

对于 h264 流,SDP 中 sprop-parameter-sets 中 Base64 解码字节的含义是什么?我如何从这个示例中知道视频大小?

SDP 示例:

sprop-parameter-sets=Z0IAKeNQFAe2AtwEBAaQeJEV,aM48gA==

从 Base64 解码到 Base16 的第一部分:

67 42 00 29 E3 50 14 07 B6 02 DC 04 04 06 90 78 91 15

第二部分(逗号分隔):

68 CE 3C 80

回答: Fetching the dimensions of a H264Video stream

【问题讨论】:

【参考方案1】:

您需要的规范可从此处的 ITU 网站免费下载:- H.264 (03/10)

选择可免费下载的 PDF,您将在第 7.3.2.1.1 节中找到详细的格式。

抱歉,我之前的回答并没有迟钝,只是不知道该信息可在公共领域获得。

【讨论】:

答案中的网址已过时,这是新网址:itu.int/rec/T-REC-H.264/en 如果没有 TIES 会员资格或购买副本,该规范将不再可用。【参考方案2】:

当然,规范总是最好的,但是 SDP 中的 sprop-parameter-sets 通常由您的序列参数和图片参数集组成,采用 base-64 编码并用逗号分隔。序列参数和图片参数集基本上告诉解码器如何正确解码传入的H264流;没有它,您将无法正确解码。

为 SPS/PPS 编写解析器并不难,但要做到这一点,您绝对需要规范。您还需要具备良好的位阅读器课程以及指数哥伦布编码如何适用于有符号和无符号值的知识。见here 和here。

最后,在 Doom9 上的this thread 中找到的代码对我来说非常宝贵——它基本上是基本 H264 流的完整解析器。它包括一个位阅读器类、解析 NALU、sps、pps、VUI 参数、序列缩放矩阵等的例程。对于任何视频工程师来说,这都是一段非常方便的代码。

【讨论】:

谢谢,我已经设法用这个解码它:itu.int/rec/T-REC-H.264-200903-I/en。 =)【参考方案3】:

事实证明,我的问题的答案写在此文档中:ISO/IEC 14496-10:2005,在 7.3.2.1 部分下。 并得到它我需要支付。所以... =)

【讨论】:

好像可以在这里免费下载文档:itu.int/rec/T-REC-H.264/en【参考方案4】:

视频大小在SDP的“framesize”行,不是吗?

00028 int av_strstart(const char *str, const char *pfx, const char **ptr)
00029 
00030     while (*pfx && *pfx == *str) 
00031         pfx++;
00032         str++;
00033     
00034     if (!*pfx && ptr)
00035         *ptr = str;
00036     return !*pfx;
00037 
00038 

p 是你的线 SDP 的指针

       if (av_strstart(p, "framesize:", &p)) 
00370         char buf1[50];
00371         char *dst = buf1;
00372 
00373         // remove the protocol identifier..
00374         while (*p && *p == ' ') p++; // strip spaces.
00375         while (*p && *p != ' ') p++; // eat protocol identifier
00376         while (*p && *p == ' ') p++; // strip trailing spaces.
00377         while (*p && *p != '-' && (dst - buf1) < sizeof(buf1) - 1) 
00378             *dst++ = *p++;
00379         
00380         *dst = '\0';
00381 
00382         // a='framesize:96 320-240'
00383         // set our parameters..
00384         codec->width = atoi(buf1);
00385         codec->height = atoi(p + 1); // skip the -
00386         codec->pix_fmt = PIX_FMT_YUV420P;
           

参考:http://cekirdek.pardus.org.tr/~ismail/ffmpeg-docs/rtpdec__h264_8c-source.html#l00360

【讨论】:

实际上,接受的答案中的文档解释了如何解码参数集...

以上是关于如何解码 H264 SDP 中的 sprop 参数集?的主要内容,如果未能解决你的问题,请参考以下文章

将图像编码为 h264 和 rtp 输出:没有 sprop-parameter-sets 的 SDP 文件无法播放

从 sdp 中的 profile-level-id 识别 h264 配置文件和级别?

webrtc支持h264

制作 H264 RTP 流的最低 SDP?

Chrome Android 未使用 SDP 提供的所有编解码器选项

Firefox 中的 WebRTC 直播流(H264)错误,无法生成有效的 SDP 答案