一个RTP会话中的多个H.264视频流

jho*_*oll 10 video streaming rtp h.264

我想在流视频应用程序中动态切换视频源.但是,不同的视频源具有独特的图像尺寸.我可以为每个视频源生成单独的SDP文件,但我想将它们组合成一个SDP文件,以便查看客户端可以在视频源更改时自动调整显示窗口的大小.以下是两个示例SDP文件:

640x480.sdp:

v=0
o=VideoServer 305419896 9876543210 IN IP4 192.168.0.2
s=VideoStream640x480
t=0 0
c=IN IP4 192.168.0.2
m=video 8000/2 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=0; profile-level-id=4D4033; sprop-parameter-sets=Z01AM5ZkBQHtCAAAAwAIAAADAYR4wZU=,aO48gJ==
a=control:trackID=1

960x480.sdp:

v=0
o=VideoServer 305419896 9876543210 IN IP4 192.168.0.2
s=VideoStream960x480
t=0 0
c=IN IP4 192.168.0.2
m=video 8000/2 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=0; profile-level-id=4D4033; sprop-parameter-sets=J01AM5WwPA9sBAIA,KO4G8gA=
a=control:trackID=1

如何将这些单个文件合并为一个SDP文件?

小智 8

两个sdp示例中的参数非常接近 - 流名称和sprop-parameter-sets不同.我假设你不关心流名称.如果您需要单独的sprop-parameter-sets并且客户端支持标准井,则可以为每个分辨率使用单独的动态有效负载类型,并具有单个SDP,如下所示:

    v=0
    o=VideoServer 305419896 9876543210 IN IP4 192.168.0.2
    s=VideoStream640x480
    t=0 0
    c=IN IP4 192.168.0.2
    m=video 8000/2 RTP/AVP 96 97
    a=rtpmap:96 H264/90000
    a=fmtp:96 packetization-mode=0; profile-level-id=4D4033; sprop-parameter-sets=Z01AM5ZkBQHtCAAAAwAIAAADAYR4wZU=,aO48gJ==
    a=rtpmap:97 H264/90000
    a=fmtp:97 packetization-mode=0; profile-level-id=4D4033; sprop-parameter-sets=J01AM5WwPA9sBAIA,KO4G8gA=
    a=control:trackID=1

与其他答案类似,如果您实际上不需要不同的流名称或不同的sprop-parameter-sets,您应该能够使用您的第一个SDP和中间切换格式.我不知道H.264或您的特定解码器的实际有效载荷是否足以确保它在您的应用程序中有效但在视频会议应用程序中非常常见,允许在分辨率之间动态切换而不需要发出变化或需要单独的动态有效载荷类型

虽然您可以连接另一个答案中提到的两个SDP文档,但我认为在这种情况下它不会有所帮助.H.264解码器只能在我认为的时候使用单个sprop-parameter-sets参数.由于两个SDP将具有相同的有效载荷类型,源端口等,因此接收器将不知道何时使用哪个sprop-parameter-sets参数.更新:注意一些实现在带内而不是从SDP(或者最初只是从SDP)获得它们的sprops.如果这适用于您的环境,则可以在带内更新SDP sprop-parameter-sets

参考文献:

  1. 用于H.264视频的RFC 3984 RTP有效载荷格式
  2. 新提出的H.264 RTP有效载荷格式RFC 6184
  3. RFC 4566 SDP:会话描述协议

[抱歉没有给出完整的引用 - 随意纠正]