2013-03-29 69 views
5

ffmpeg streamingGuide,它写道:为什么无法接收.avi视频文件的rtp流媒体?

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 

我想用一个真正的视频文件,以代替人工信号。 然后我编写下面在A端:

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

似乎它是工作: 帧信息被计数。以下是在端部上的终端A信息:

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% 

当端A上的框架仍在计数(未完成),我在终端B键入以下:

ffplay rtp://127.0.0.1:1234 

但它确实不行: 错误信息是:

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

为什么?

[更新1]在从卡米尔Goudeseune 我用foo.sdp指令
用于ffmpeg的终端的输入是:

的ffmpeg -re -i out.avi -f mulaw -f RTP RTP://127.0.0.1:1235

为ffplay的终端是:

ffplay -i foo.sdp

ffplay终端显示很多错误,没有图像。

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

已经有几年了,这些答案已经帮助了其他人。如果其中一个答案也适用于您,请接受它。 –

+0

尊敬的user1914692,您为什么不接受答案?其中一个答案甚至赢得了“好回答”徽章。你有足够的活动和徽章来了解SO的工作原理。 –

回答

14

而不是ffplay rtp://127.0.0.1:1235,请使用ffplay -i foo.sdp

通过粘贴到它从下面的线SDP: ffmpeg的输出的文本创建本地文件foo.sdp,例如:

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 

的.sdp文件包括RTP地址,这样你就不需要指定RTP: // ...以及。

+1

我使用了foo.sdp ffmpeg终端的输入是:ffmpeg -re -i out.avi -f mulaw -f rtp rtp://127.0.0.1:1235 ffplay的终端是:ffplay -i foo.sdp ffplay终端显示很多错误,没有图像。 – user1914692

+0

[sdp @ 00000000003759c0]无法找到流0的编解码参数(视频:h2 64,无):未指定的大小 考虑增加“分析”和“探测大小”选项的值 C:\ rtp.sdp:可能没有找到编解码器参数 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将开始监听UDP端口1234入局RTP流量。

只有一个应用程序可以在任何给定时间监听主机上的任何给定端口。

错误“绑定失败:地址已在使用中”表示另一应用程序正在侦听端口1234。 可能你还在运行测试脚本?

要么停止阻塞端口的应用程序,要么使用不同的端口。

+0

嗯,如果'SO_REUSEADDR'和/或'SO_REUSEPORT'设置为true,完全可以将两个不同的进程绑定到相同的IP地址和TCP端口。 – Fraser

+1

是的,但它很可能不会做你想做的事情。当使用'SO_REUSEPORT'时,收到的包将不会*出现在* all *听众处,但仅在一个位置(哪一个由操作系统决定,例如使用循环算法)。这对构建一个负载均衡器很酷,但对于其他一些事情(我想不出任何) –