2013-03-29 6 views
5

In ffmpeg streamingGuide, es schreibt:Warum wird das rtp-Streaming einer .avi-Videodatei nicht empfangen?

ffmpeg -re -f lavfi -i aevalsrc="sin(400*2*PI*t)" -ar 8000 -f mulaw -f rtp rtp://127.0.0.1:1234 & 
ffplay rtp://127.0.0.1:1234 

ich das künstliche Signal eine echte Video-Datei zu ersetzen, verwenden möchten. Dann schreibe ich die unten an der Klemme A:

ffmpeg -re -i outputFile.avi -f mulaw -f rtp rtp://127.0.0.1:1234 

es scheint, es funktioniert: Die Rahmeninformation zählt. Hier sind Informationen über das Endgerät A am Ende:

frame= 309 fps= 29 q=31.0 Lsize=  931kB time=00:00:10.30 bitrate= 740.8kbits/s  video:922kB audio:0kB subtitle:0 global headers:0kB muxing overhead 1.030813% 

Wenn der Rahmen an der Klemme A noch zu zählen (nicht abgeschlossen), ich die unten an der Klemme B Typ:

ffplay rtp://127.0.0.1:1234 

Aber es tut nicht: Die Fehlerinformation ist:

[udp @ 0x7fb370001500] bind failed: Address already in useB f=0/0 
rtp://127.0.0.1:1234: Input/output error 

Warum?

[1 Update], um die Anweisung von Camille Goudeseune Nach I der foo.sdp verwendet
Der Eingang für das ffmpeg Terminal ist:

ffmpeg -RE -I out.avi -f mulaw -f RTP- RTP-: //127.0.0.1: 1235

Das Terminal für ffplay ist:

ffplay -I foo.sdp

Das ffplay-Terminal zeigt viele Fehler, ohne Bilder.

libpostproc 52. 2.100/52. 2.100 
[sdp @ 0x7fafdc0008c0] Undefined type (30) 0KB sq= 0B f=0/0 
[sdp @ 0x7fafdc0008c0] nal size exceeds length: 25453 86 0B f=0/0 
[sdp @ 0x7fafdc0008c0] Consumed more bytes than we got! (-25367) 
[sdp @ 0x7fafdc0008c0] nal size exceeds length: 25453 86 
[sdp @ 0x7fafdc0008c0] Consumed more bytes than we got! (-25367) 
[sdp @ 0x7fafdc0008c0] Unhandled type (27) (See RFC for implementation details 
[sdp @ 0x7fafdc0008c0] Undefined type (31) 0KB sq= 0B f=0/0 
[sdp @ 0x7fafdc0008c0] Unhandled type (27) (See RFC for implementation details 
[sdp @ 0x7fafdc0008c0] nal size exceeds length: 62414 6130B f=0/0 
[sdp @ 0x7fafdc0008c0] Consumed more bytes than we got! (-61801) 
[sdp @ 0x7fafdc0008c0] nal size exceeds length: 62414 613 
[sdp @ 0x7fafdc0008c0] Consumed more bytes than we got! (-61801) 
[h264 @ 0x7fafdc003020] non-existing PPS referencedq= 0B f=0/0 
[h264 @ 0x7fafdc003020] non-existing PPS 0 referenced 
[h264 @ 0x7fafdc003020] decode_slice_header error 
[h264 @ 0x7fafdc003020] Invalid mix of idr and non-idr slices 
[sdp @ 0x7fafdc0008c0] Undefined type (31) 0KB sq= 0B f=0/0 
[sdp @ 0x7fafdc0008c0] Unhandled type (29) (See RFC for implementation details 
[sdp @ 0x7fafdc0008c0] Unhandled type (26) (See RFC for implementation details 
[sdp @ 0x7fafdc0008c0] Unhandled type (27) (See RFC for implementation details 
    Last message repeated 2 times 0KB vq= 0KB sq= 0B f=0/0 
[sdp @ 0x7fafdc0008c0] Undefined type (31) 
[sdp @ 0x7fafdc0008c0] Unhandled type (26) (See RFC for implementation details 
[sdp @ 0x7fafdc0008c0] Unhandled type (25) (See RFC for implementation details 
[h264 @ 0x7fafdc003020] insane cropping not completely supported, this could look slightly wrong ... (left: 2, top: 2) 
[h264 @ 0x7fafdc003020] illegal aspect ratio 
[h264 @ 0x7fafdc003020] missing picture in access unit with size 84589 
[h264 @ 0x7fafdc003020] Partitioned H.264 support is incomplete 
[h264 @ 0x7fafdc003020] insane cropping not completely supported, this could look slightly wrong ... (left: 2, top: 2) 
[h264 @ 0x7fafdc003020] illegal aspect ratio 
[h264 @ 0x7fafdc003020] insane cropping not completely supported, this could look slightly wrong ... (left: 2, top: 2) 
[h264 @ 0x7fafdc003020] illegal aspect ratio 
[h264 @ 0x7fafdc003020] no frame! 
[h264 @ 0x7fafdc003020] RTP: missed 2563 packetsB sq= 0B f=0/0 
[sdp @ 0x7fafdc0008c0] Undefined type (30) 
    Last message repeated 1 times 
[sdp @ 0x7fafdc0008c0] Undefined type (31) 
+0

Es ist ein paar Jahre her, und diese Antworten haben anderen geholfen.Wenn eine dieser Antworten auch für Sie funktioniert, akzeptieren Sie sie bitte. –

+0

Sehr geehrter Benutzer1914692, warum werden Sie keine Antwort akzeptieren? Eine dieser Antworten hat sogar eine "nette Antwort" gewonnen. Sie haben genug Aktivitäten und Abzeichen, um zu wissen, wie SO funktioniert. –

Antwort

14

Verwenden Sie anstelle von ffplay rtp://127.0.0.1:1235ffplay -i foo.sdp.

Erstellen Sie die lokale Datei foo.sdp, indem sie in die Textausgabe von ffmpeg einfügen, die die Linie SDP: zum Beispiel folgen:

v=0 
o=- 0 0 IN IP4 127.0.0.1 
s=No Name 
c=IN IP4 127.0.0.1 
t=0 0 
a=tool:libavformat 55.2.100 
m=video 1235 RTP/AVP 96 
a=rtpmap:96 H264/90000 
a=fmtp:96 packetization-mode=1 

Die .sdp-Datei enthält die rtp-Adresse, so dass Sie nicht rtp angeben müssen: //... auch.

+1

Ich habe die foo.sdp verwendet Der Eingang für das ffmpeg-Terminal ist: ffmpeg -re -i out.avi -f mulaw -f rtp rtp: //127.0.0.1: 1235 Das Terminal für ffplay ist: ffplay -i foo.sdp Das ffplay-Terminal zeigt eine Menge Fehler, ohne Bilder. – user1914692

+0

[sdp @ 00000000003759c0] Codec-Parameter für Stream 0 nicht gefunden (Video: h2 64, keine): nicht angegebene Größe Sie können den Wert für die Optionen 'analysationuration' und 'probesize' erhöhen C: \ rtp.sdp: könnte nicht finden codec parameter nan: 0,000 fd = 0 aq = 0KB vq = 0KB sq = 0B f = 0/0 –

+1

lmgtfy: http://stackoverflow.com/a/11659459/2097284 –

3

ffplay rtp://127.0.0.1:1234 beginnen am UDP-Port 1234 für eingehenden RTP-Datenverkehr zu hören.

Nur eine einzelne Anwendung kann zu jedem beliebigen Zeitpunkt einen beliebigen Port auf einem Host abhören.

Der Fehler "Bindung fehlgeschlagen: Adresse bereits verwendet" zeigt an, dass eine andere Anwendung bereits den Port 1234 abgehört hat. wahrscheinlich führen Sie immer noch das Skript aus Ihren Tests?

entweder die Anwendung stoppen, die den Port blockiert, oder einen anderen Port verwenden.

+0

Hmm, wenn 'SO_REUSEADDR' und/oder' SO_REUSEPORT' auf True gesetzt sind, ist es durchaus möglich, zwei verschiedene Prozesse an dieselbe IP-Adresse und denselben TCP-Port zu binden. – Fraser

+1

ja, aber es wird wahrscheinlich nicht tun, was Sie tun möchten. Wenn "SO_REUSEPORT" verwendet wird, wird ein empfangenes Paket * NICHT * bei * allen * Listenern auftauchen, aber nur bei eins (wobei das eine vom Betriebssystem entschieden wird, beispielsweise unter Verwendung eines Round-Robin-Algorithmus). Das ist cool für den Aufbau eines Load-Balancers, aber für einige andere Dinge (ich kann mir keine vorstellen) –

Verwandte Themen