在ffmpeg streamingGuide中,它写道:
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终端的输入为:
ffplay的终端为:
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)
最佳答案
代替ffplay rtp://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://...。
关于ffmpeg - 为什么无法接收.avi视频文件的rtp流?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15712983/