Frage

Ich mag dynamisch die Videoquelle in einer Streaming-Video-Anwendung wechseln. Allerdings haben die verschiedenen Videoquellen einzigartige Bildabmessungen. Ich kann für jede Videoquelle einzelne SDP-Dateien erzeugen, aber ich möchte sie in einer einzigen SDP-Datei kombinieren, so dass die Anzeige-Client automatisch das Anzeigefenster wie die Videoquelle verändert die Größe könnte. Hier sind zwei Beispiele SDP-Dateien:

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

Wie können diese einzelnen Dateien in einer einzigen SDP-Datei kombiniert werden?

War es hilfreich?

Lösung

Die Parameter in Ihren beiden SDP Beispiele sind sehr nah - der Stream-Namen und die sprop-Parameter-Sets unterscheiden. Ich nehme an, Sie nicht über den Stream-Namen ist es egal. Wenn Sie getrennte sprop-Parameter-Sets und die Clients unterstützen die Standard gut können Sie separate dynamische Payload-Typen für jede Auflösung verwenden und einen einzigen SDP haben wie folgt:

    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

Ähnlich wie bei anderen Antworten, wenn Sie nicht wirklich benötigen, um die verschiedenen Stream-Namen oder die verschiedenen sprop-Parameter-Sets sollten Sie Ihre erste SDP zu verwenden und wechseln Format Mitte Stream in der Lage sein. Ich weiß nicht, die tatsächliche Nutzlast von H.264 oder Ihre speziellen Decoder gut genug, um sicherzustellen, dass diese in Ihre Anwendungen funktionieren wird, aber es ist in Videokonferenz-Anwendungen sehr häufig dynamisch zu ermöglichen, zwischen Auflösungen Umschalten ohne eine Änderung Signalisierung oder eine separate dynamische erfordern Payload-Typ.

Auch wenn Sie zwei SDP Dokumente verketten können, wie in einer anderen Antwort erwähnt ich glaube nicht, dass in diesem Fall helfen. H.264 Decoder können nur mit einem einzigen sprop-Parameter-Sets Parameter zu einer Zeit, glaube ich arbeiten. Da beide SDP die gleiche Nutzlast Art, Quellport haben würde, usw. würde der Empfänger nicht wissen, wann die sprop-Parameter-Sets Parameter zu verwenden. UPDATE: Hinweis einige Implementierungen erhalten ihre sprops Inband und nicht von der SDP (oder zunächst nur von der SDP). Wenn das in Ihrer Umgebung zutrifft, kann die SDP sprop-Parameter-Sets aktualisiert Inband werden

Referenzen:

  1. RFC 3984 RTP Payload Format für H.264 Video
  2. Neue H.264 RTP Payload Format RFC vorgeschlagen 6184
  3. RFC 4566 SDP: Session Description Protocol

[Es tut uns nicht geben die volle zitieren - fühlen Sie sich frei zu korrigieren]

Andere Tipps

Ich habe über die RFC gegangen ( RFC2327 - SDP: Session Description Protocol ), und es scheint, dass Sie die beiden SDP Dokumente nur verketten kann. Das Dokument heißt es ausdrücklich:

  

Wenn SDP von SAP gefördert wird, nur eine Sitzung Beschreibung pro Paket erlaubt. Wenn SDP mit anderen Mitteln gefördert wird, können viele SDP-Session Beschreibungen zusammen verkettet werden (die 'v = Zeile den Beginn einer Sitzungsbeschreibung angibt‘beendet die vorherige Beschreibung) .

Ich denke, es ist an Ihren Decoder abhängt. Wenn es unterstützt Parameter im Stream zu ändern, dann, wenn Sie den Geber sagen, können die entsprechenden Header zu setzen, wenn Auflösung zu ändern, sollte der Decoder automatisch wechseln.

Was ist Ihre Frage genau? Ist es: Wie ich die Auflösung ändern kann, ohne zu stoppen / den Strom neu zu starten

Das glaube ich nicht, dass Sie im Voraus an einen Decoder sagen können, hier sind die potentielle Auflösung, die Sie mit etwas sdp Magie sehen. Entweder Ihr Decoder ist in der Lage H264 Parameteränderung zu verstehen, und dann sind Sie in Ordnung, oder Sie müssen aufhören, die ganze Sache neu zu starten, und dann dynamisch sdp ausreichend.

Ich weiß, dass zum Beispiel VLC der Lage ist, MP4-Codierung ändern (von variabler Bitrate zu konstanter Bitrate bewegt zum Beispiel) zu erkennen, aber stürzt ab, wenn Sie die Auflösung ändern Das einzige, was Sie mit sdp tun können, ist verschiedene Medienbeschreibung zu kombinieren, zum Beispiel mit unterschiedlichen dynamischen Nutzlasttyp und verschiedene Steuer-id-Attribut.

Sie können entweder tun, um die dynamische Nutzlast Änderung oder die In-Stream-Parametersatz ändern oder SIP erneut einladen.

Payload Änderungen ein Problem haben, dass, wenn Sie keine Kontrolle über den Encoder und Decoder Sie das andere Ende, um sicherzustellen, müssen beiden Nutzlasten akzeptiert, und dass sie Nutzlasten richtig wechseln werden (und schnell genug für Sie - es gibt keine Anforderung an das).

In-Stream-Änderungen haben ein Problem, wenn die Parameter-Set-Pakete verloren gehen. Sie können einen anderen Satz von Parametersätzen (Schaltern aus Parameter-Set 1 bis 2, wenn Sie ändern) verwenden mis-Decodierung zu vermeiden - wenn die Sätze verloren gehen, sollten Sie nur ein gefrorenes oder leeres Bild bekommen. Ich würde sie raten, ein paar Mal (nicht in allzu schnell hintereinander) Neuübertragung.

SIP re-INVITE ist out-of-bindet und mit Handshake und damit sicher, fügt aber hinzu, die Verzögerung auf Schalter und Glitch auf dem Empfänger abhängig und könnte abgelehnt werden.

(Hinweis: Ich bin ein Autor von RFC 3984bis, das Update auf RFC 3984)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top