4

我们公司开发了一个摄像头监控软件,我们主要使用 RTSP 与设备进行通信(但我们支持所需的任何协议),我们开发了自己的 RTSP 客户端和解析器

今天我们正在研究一个新相机的集成,我们发现了一个有趣的场景,相机将动态有效负载 96 映射到音频和视频数据包,请参阅 SDP 描述:

RTSP/1.0 200 OK
CSeq: 2
Date: Sat, Jan 01 2000 19:39:38 GMT
Content-Base: rtsp://10.1.39.174:8557/PSIA/Streaming/channels/2?videoCodecType=H.264/
Content-Type: application/sdp
Content-Length: 830

v=0
o=- 946754247689123 1 IN IP4 10.1.39.174
s=RTSP/RTP stream from IPNC
i=2?videoCodecType=H.264
t=0 0
a=tool:LIVE555 Streaming Media v2010.07.29
a=type:broadcast
a=control:*
a=range:npt=0-
a=x-qt-text-nam:RTSP/RTP stream from IPNC
a=x-qt-text-inf:2?videoCodecType=H.264
m=video 0 RTP/AVP 96
c=IN IP4 0.0.0.0
b=AS:4000
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=64001F;sprop-parameter-   sets=Z2QAKK2EBUViuKxUdCAqKxXFYqOhAVFYrisVHQgKisVxWKjoQFRWK4rFR0ICorFcVio6ECSFITk8nyfk/k/J8nm5s00IEkKQnJ5Pk/J/J+T5PNzZprQCgC3YCqQAAAMABAAAAwJZgQAB6EgAAiVQve+F4RCNQAAAAAE=,aO48sA==
a=control:track1
m=audio 0 RTP/AVP 96
c=IN IP4 0.0.0.0
b=AS:128
a=rtpmap:96 PCMU/16000
a=control:track2
m=application 0 RTP/AVP 96
c=IN IP4 0.0.0.0
b=AS:64
a=rtpmap:96 vnd.onvif.metadata/90000
a=control:track3

如你看到的:

m=video 0 RTP/AVP 96
m=audio 0 RTP/AVP 96

问题是我们使用这个映射来识别接收到的 RTP 数据包的压缩。我一直认为每种媒体都会有不同的映射,比如视频 96 和音频 97(甚至静态映射,比如 PCMU 的 0),但是这个设备对所有媒体使用相同的映射,所以,我们的解析器不会工作,因为它将使用有效负载 96 接收的音频数据包识别为视频数据包,并将它们直接发送到视频解码器,当然它不会工作......

我已经检查过 VLC 工作正常,但我坚信 VLC 不使用此映射来拆分数据包,而是使用通道标识(在 TCP 中)或不同的 UDP 端口来识别哪些数据包属于哪个媒体......但是我们已经构建了我们的架构来根据负载类型拆分数据包

所以我问......将音频和视频都映射到相同的动态有效载荷编号(96)是否正确?

这是我第一次遇到这个问题,我需要知道我们是否必须更改整个 RTSP 客户端以使用通道而不是 Payload 格式来识别媒体,或者相机端是否存在实现错误他们应该将其他有效载荷编号链接到每个不同的媒体(96 个视频、97 个音频、98 个应用程序......)

有谁知道这种做法(对所有媒体使用相同的有效载荷编号)是否有效???

我们已经使用 RFC 规范实现了 RTSP 客户端和 SDP 解析器,但我没有发现任何与对所有媒体使用相同有效载荷编号相关的内容,在所有示例中,它们总是为每个媒体分配不同的有效载荷编号......

4

3 回答 3

1

这是一个非常好的问题。从您发布的 SDP 的语义来看,这台相机似乎正在执行RFC 2326中基于字段存在的RTSP规范。a=control

在本规范中,可以观察到每个媒体有效载荷都有一个特定的控制参数,第一个控制语句是a=control:*。从规范的第 83 页,我觉得音频和视频流可以设置为

audio = rtsp://10.1.39.174:8557/PSIA/Streaming/channels/track2

video = rtsp://10.1.39.174:8557/PSIA/Streaming/channels/track1
于 2013-03-07T02:50:16.330 回答
0

好问题,范围 96-127 是为动态有效负载类型定义的,RFC 没有具体说明使用的类型是否应该在多个描述符中是唯一的。当然,如果它们是独一无二的,事情会更清楚。然而,他们不必像看起来那样。没有混合有效负载类型,因为它们都是在其自己的媒体公告下单独定义的,即使用视频 96 和音频 96 看起来是有效的。更不用说如果现实世界的设备以这种方式定义会话,那么 RTSP 客户端应该为此做好准备。

于 2013-02-26T15:20:37.630 回答
0

在我看来,上述 SDP 是有效的。我已经看到媒体类型包含相同的音频和视频媒体通道的有效载荷编号。

几个想法: 1. 看看你是否可以要求这台相机只独立地流式传输音频或视频。这样,您在技术上可以拥有两个 RTSP 会话(一个用于音频,一个用于视频);这样你就可以确切地知道什么样的 RTP 流量正在向你走来;并基于该信息使用音频或视频解码器。

  1. 如果这对您来说真的是一个很大的提升,请检查传入的 RTP 数据包是否可能没有任何其他额外信息可以让您推断它是音频还是视频通道。
于 2013-02-26T21:11:14.647 回答