Ffmpeg 为什么无法接收.avi视频文件的rtp流?

Ffmpeg 为什么无法接收.avi视频文件的rtp流?,ffmpeg,video-streaming,rtp,Ffmpeg,Video Streaming,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 它似乎在起

在这本书中,它写道:

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]按照Camille Goudeseune的指示 我使用了foo.sdp
ffmpeg终端的输入为:

ffmpeg-re-i out.avi-f mulaw-f rtprtp://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)

ffplayrtp://127.0.0.1:1234
将开始在UDP端口
1234
上侦听传入的RTP流量

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

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


停止阻塞端口的应用程序,或者使用其他端口。

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

通过将ffmpeg输出的文本粘贴到本地文件
foo.sdp
,该文本位于
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://... 同样。

Hmm,如果
SO\u REUSEADDR
和/或
SO\u REUSEPORT
设置为true,则完全可以将两个不同的进程绑定到相同的IP地址和TCP端口。是的,但它很可能不会执行您希望执行的操作。当使用
SO_REUSEPORT
时,收到的包不会出现在所有侦听器上,而只出现在一个侦听器上(哪个由操作系统决定,例如使用循环算法)。这对于构建负载平衡器来说很酷,但是对于其他一些事情(我想不出任何事情),我使用了foo.sdp,ffmpeg终端的输入是:ffmpeg-re-i out.avi-f mulaw-f rtprtp://127.0.0.1:1235 ffplay的终端是:ffplay-i foo.sdp ffplay终端显示很多错误,没有图像。[sdp@0000000000 3759C0]找不到流0的编解码器参数(视频:h2 64,无):不指定的大小考虑增加“分析”和“概率”选项的值C:\RTP.SDP:找不到编解码器参数:0:FD=0 AQ= 0KB VQ= 0KB SQ=0B F=0/0I得到了一些不在白名单“文件”上的<代码>协议,<>代码>,所以我只添加了< > >协议-白名单文件、UDP、RTP < /代码>。