RTSP上的音频和视频的相同媒体格式

时间:2013-02-26 14:12:34

标签: h.264 rtsp rtp mpeg-4 sdp

我们公司开发了一款摄像监控软件,我们主要使用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用于音频(甚至静态映射,如0用于PCMU),但是此设备对所有媒体使用相同的映射,因此,我们的解析器不会工作,因为它将识别与有效载荷96一起接收的音频数据包作为视频数据包,并将它们直接发送到视频解码器,当然它不会工作......

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

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

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

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

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

以上SDP在我看来是有效的。我见过媒体类型包括音频和视频媒体频道的相同有效载荷号。

一些想法: 1.看看您是否可以要求本相机仅独立传输音频或视频。这样你就可以在技术上拥有两个RTSP会话(一个用于音频,一个用于视频);通过这种方式,您可以确切地知道您正在使用哪种RTP流量;并根据该信息使用音频或视频解码器。

  1. 如果这是一个非常大的提升,请检查传入的RTP数据包是否可能没有任何其他额外信息,可以让您推断它是音频还是视频频道。

答案 2 :(得分:0)

这是一个非常好的问题。根据您发布的SDP的语义,此相机似乎根据RTSP字段的存在实施RFC 2326 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
相关问题