sprop-parameter-sets或profile-level-id是解码H264所需的SDP参数?

 飞跃星空2502906253 发布于 2023-02-09 19:49

我试图了解SDP中所需的参数是什么,能够从RTP数据包中解码H264.

这与这个问题有关,因为答案仅适用于少数情况.

我使用以下命令从VLC流式传输.

vlc -vvv sample_video/big_buck_bunny_480p_h264.mov --sout '#transcode{vcodec=h264,vb=700,fps=20,scale=0.25,acodec=none}:rtp{dst=10.5.110.117,port=5004,ttl=1}'

这会将视频转码为:

比特率:700kbps

帧速率:每秒20帧

分辨率:原始的25%

接收器使用以下SDP文件正确接受和解释流(删除第一行,它只是一个名称).

//test.sdp
c=IN IP4 10.5.110.117
m=video 5004 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 profile-level-id=640014;sprop-parameter-sets=Z2QAFKzZQ0R+f/zBfMMAQAAAAwBAAAAKI8UKZYA=,aOvssiw=;

要运行的命令: vlc test.sdp

此处提供的文档在第7.2章中针对profile-level-id状态命名为SIP Video Profile Best Practices:

型材级-ID

虽然在RFC 6184中指定为可选(与所有参数一样),但'profile-level-id'参数是编解码器设置的基础,并且还需要指定任何其他参数.因此,所有实现都应在其SDP中包含此参数,并在接收时应解释它.如果未包含,则默认值为420010,如RFC 6184中所指定.

对于sprop-parameter-sets,同一文档声明了以下内容:

sprop参数集

H.264允许在带内和带外发送序列和图像信息.SIP视频实现应该在带内发信号通知该信息,符合H.323中普遍存在的模型以及绝大多数现有SIP视频实现中的模型,因此不应包括该参数.

问题1

即使profile-level-id被移除,视频也会在接收器上正确解释.

//test.sdp
c=IN IP4 10.5.110.117
m=video 5004 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 sprop-parameter-sets=Z2QAFKzZQ0R+f/zBfMMAQAAAAwBAAAAKI8UKZYA=,aOvssiw=;

没有工作sprop-parameter-sets.

问题2

我一直在线路不同的RTCP,SIP和SAP,而且SDP 通常不 包含sprop-parameter-sets.

问题

请解释两个参数之间的含义和差异

根据上述问题的答案,解释问题中出现的对比

nakib.. 7

意义和主要区别:

正如您在定义中所看到的profile-level-id,它具有默认值,因此可以在信令协商中省略.此参数中包含的字符串是十六进制格式,它有3个字节,通知解码器有关配置文件,约束和将用于发送数据的级别.此设置定义了几个参数,如比特率,分辨率,数据包类型......

该参数sprop-parameter-sets可被视为解码您将要发送的数据的密钥.它包含一些将用于编码数据的字节,因此您可以与接收器共享它,以便它可以解码视频数据包.它也可以从信令中省略,但它们对于解码器是必需的,因此它们也可以在带内发送.因此,如果在sdp中省略它们,则需要在数据包中发送它们.接收器只能在接收到该信息后解码数据.

问题1:

如前所述,profile-level-id可以省略,它仍然有效,因为420010将使用默认值.唯一的区别是设置会有所不同,可能会影响视频质量.例如,默认情况下,42引用约束基线配置文件(CBP),SDP中初始值中的64引用高配置文件(HiP).

sprop-parameter-sets由于vlc不支持在带内发送数据,因此视频在丢失时无法正常工作,正如我上面所解释的那样,它是强制性的.

问题2:

许多SIP实现都支持发送sprop-parameter-sets带内,这就是您正在捕获的内容.检查Wireshark中的h264数据包,您将在某些数据包中看到此值的描述.

1 个回答
  • 意义和主要区别:

    正如您在定义中所看到的profile-level-id,它具有默认值,因此可以在信令协商中省略.此参数中包含的字符串是十六进制格式,它有3个字节,通知解码器有关配置文件,约束和将用于发送数据的级别.此设置定义了几个参数,如比特率,分辨率,数据包类型......

    该参数sprop-parameter-sets可被视为解码您将要发送的数据的密钥.它包含一些将用于编码数据的字节,因此您可以与接收器共享它,以便它可以解码视频数据包.它也可以从信令中省略,但它们对于解码器是必需的,因此它们也可以在带内发送.因此,如果在sdp中省略它们,则需要在数据包中发送它们.接收器只能在接收到该信息后解码数据.

    问题1:

    如前所述,profile-level-id可以省略,它仍然有效,因为420010将使用默认值.唯一的区别是设置会有所不同,可能会影响视频质量.例如,默认情况下,42引用约束基线配置文件(CBP),SDP中初始值中的64引用高配置文件(HiP).

    sprop-parameter-sets由于vlc不支持在带内发送数据,因此视频在丢失时无法正常工作,正如我上面所解释的那样,它是强制性的.

    问题2:

    许多SIP实现都支持发送sprop-parameter-sets带内,这就是您正在捕获的内容.检查Wireshark中的h264数据包,您将在某些数据包中看到此值的描述.

    2023-02-09 19:50 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有