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など、メディアごとに異なるマッピングがあると常に思っていましたが、このデバイスはすべてのメディアに同じマッピングを使用するため、パーサーは使用しません。ペイロード96で受信されているオーディオパケットをビデオパケットとして識別し、それらをビデオデコーダに直接送信するため、機能します。もちろん、機能しません。

VLCが正常に機能することを確認しましたが、VLCはこのマッピングを使用してパケットを分割するのではなく、チャネルID(TCPの場合)またはさまざまなUDPポートを使用して、パケットがどのメディアに属しているかを識別します。ただし、ペイロードタイプに応じてパケットを分割するアーキテクチャはすでに構築されています

だから私は尋ねます...オーディオとビデオの両方を同じ動的ペイロード番号(96)にマッピングするのは正しいですか?

この問題に遭遇したのはこれが初めてであり、ペイロード形式の代わりにチャネルを使用してメディアを識別するためにRTSPクライアント全体を変更する必要があるかどうか、またはカメラ側に実装のバグがあるかどうかを知る必要があります。他のペイロード番号をそれぞれの異なるメディア(96ビデオ、97オーディオ、98アプリケーション...)にリンクする必要があります。

そのような慣行(すべてのメディアに同じペイロード番号を使用)が有効かどうか誰かが知っていますか?

RFC仕様を使用してRTSPクライアントとSDPパーサーを実装しましたが、すべてのメディアに同じペイロード番号を使用することに関連するものは見つかりませんでした。すべての例で、メディアごとに異なるペイロード番号が常に割り当てられます...

4

3 に答える 3

1

これはとてもいい質問です。あなたが投稿した SDP のセマンティクスから、このカメラはフィールドの存在に基づいてRFC 2326RTSPの仕様を実装しているようです。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 は動的ペイロード タイプに対して定義されています。確かに、それらがユニークであれば、物事はより明確になります。しかし、そうである必要はありません。ペイロード タイプが混在することはありません。それらはすべて独自のメディア アナウンスメントの下で個別に定義されているためです。つまり、ビデオ 96 とオーディオ 96 の使用は有効に見えます。言うまでもなく、実世界のデバイスがこのようにセッションを定義している場合、RTSP クライアントはこれに対応できるはずです。

于 2013-02-26T15:20:37.630 に答える
0

Above SDP is valid in my opinion. I have seen media type include same payload numbers for audio and video media channels.

Couple of ideas: 1. See if you can ask this camera to only stream audio or video independently. That way you could technically have two RTSP sessions(one for audio, one for video); that way you could know exactly what kind of RTP traffic is coming your way; and based on that information either use audio or video decoder.

  1. If this is a really big lift on your side, check if incoming RTP packets perhaps don't have any other extra information that could allow you in infer if it is an audio or video channel.
于 2013-02-26T21:11:14.647 に答える