gpt4 book ai didi

ffmpeg 无法流式传输到远程客户端

转载 作者:行者123 更新时间:2023-12-04 22:46:01 24 4
gpt4 key购买 nike

我正在我的笔记本电脑上构建一个简单的 ffmpeg 命令行以从它的相机流式传输。命令行读取(底部的详细输出):

host1> ffmpeg -v verbose \
-f dshow \
-i video="Camera":audio="Microphone" \
-r 30 -g 0 -vcodec h264 -acodec libmp3lame \
-tune zerolatency \
-preset ultrafast \
-f mpegts udp://12.34.56.78:12345

首先,它在本地工作。即,我可以在同一主机上使用 ffplay 查看输出:

host1> ffplay -hide_banner -v udp://12.34.56.78:12345

现在,当我从同一网络中的另一台机器执行此操作时,无法正常工作。它显示了 nan 进度:

host2> ffplay -hide_banner -v udp://12.34.56.78:12345
nan : 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0

我使用 ncat 来转储原始内容。但是没有输出:

host2>\ncat\ncat -v -u 12.34.56.78 12345
Ncat: Version 5.59BETA1 ( http://nmap.org/ncat )
Ncat: Connected to 12.34.56.78:12345.
(...and nothing happen...)

请注意,我可以排除防火墙问题,因为我使用 ncat 使用相同的端口和协议(protocol) (UDP) 通过线路相互通信。这行得通,他们可以互相聊天:

host1> ncat -l -u -p 12345
host2> ncat -u 12.34.56.78 12345

有什么提示吗?

我正在使用 Windows x64 和从 here 安装的 FFMPEG 64 位.下面是我的 ffmpeg 命令的输出:

C:\ffmpeg\bin>ffmpeg -v verbose -f dshow -i video="Integrated Camera":audio="Microphone (Realtek High Definition Audio)" -r 30 -g 0 -vcodec h264 -acodec libmp3lame -tune zerolatency -preset ultrafast -f mpegts udp://12.34.56.78:12345
ffmpeg version N-66012-g97b8809 Copyright (c) 2000-2014 the FFmpeg developers
built on Sep 1 2014 00:21:15 with gcc 4.8.3 (GCC)
configuration: --disable-static --enable-shared --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug -enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-decklink --enable-zlib
libavutil 54. 7.100 / 54. 7.100
libavcodec 56. 1.100 / 56. 1.100
libavformat 56. 3.100 / 56. 3.100
libavdevice 56. 0.100 / 56. 0.100
libavfilter 5. 0.103 / 5. 0.103
libswscale 3. 0.100 / 3. 0.100
libswresample 1. 1.100 / 1. 1.100
libpostproc 53. 0.100 / 53. 0.100
Guessed Channel Layout for Input Stream #0.1 : stereo
Input #0, dshow, from 'video=Integrated Camera:audio=Microphone (Realtek High Definition Audio)':
Duration: N/A, start: 171840.657000, bitrate: N/A
Stream #0:0: Video: rawvideo, bgr24, 640x480, 30 fps, 30 tbr, 10000k tbn, 30 tbc
Stream #0:1: Audio: pcm_s16le, 44100 Hz, 2 channels, s16, 1411 kb/s
Matched encoder 'libx264' for codec 'h264'.
[graph 0 input from stream 0:0 @ 0000000000470aa0] w:640 h:480 pixfmt:bgr24 tb:1/10000000 fr:10000000/333333 sar:0/1 sws_param:flags=2
[auto-inserted scaler 0 @ 0000000004326d00] w:iw h:ih flags:'0x4' interl:0
[format @ 0000000004325a00] auto-inserting filter 'auto-inserted scaler 0' between the filter 'Parsed_null_0' and the filter 'format'
[auto-inserted scaler 0 @ 0000000004326d00] w:640 h:480 fmt:bgr24 sar:0/1 -> w:640 h:480 fmt:yuv444p sar:0/1 flags:0x4
No pixel format specified, yuv444p for H.264 encoding chosen.
Use -pix_fmt yuv420p for compatibility with outdated media players.
[graph 1 input from stream 0:1 @ 0000000000460c20] tb:1/44100 samplefmt:s16 samplerate:44100 chlayout:0x3
[audio format for output stream 0:1 @ 00000000004601a0] auto-inserting filter 'auto-inserted resampler 0' between the filter 'Parsed_anull_0' and the filter 'audio format for output stream 0:1'
[auto-inserted resampler 0 @ 00000000004604a0] ch:2 chl:stereo fmt:s16 r:44100Hz -> ch:2 chl:stereo fmt:s16p r:44100Hz
[libx264 @ 000000000081bb20] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 000000000081bb20] profile High 4:4:4 Intra, level 3.0, 4:4:4 8-bit
[mpegts @ 000000000081abe0] muxrate VBR, pcr every 3 pkts, sdt every 200, pat/pmt every 40 pkts
Output #0, mpegts, to 'udp://12.34.56.78:12345':
Metadata:
encoder : Lavf56.3.100
Stream #0:0: Video: h264 (libx264), yuv444p, 640x480, q=-1--1, 30 fps, 90k tbn, 30 tbc
Metadata:
encoder : Lavc56.1.100 libx264
Stream #0:1: Audio: mp3 (libmp3lame), 44100 Hz, stereo, s16p
Metadata:
encoder : Lavc56.1.100 libmp3lame
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
Stream #0:1 -> #0:1 (pcm_s16le (native) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
*** 1 dup!
frame= 241 fps= 31 q=28.0 Lsize= 3439kB time=00:00:08.03 bitrate=3506.4kbits/s dup=1 drop=0
video:3035kB audio:125kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 8.791966%
Input file #0 (video=Integrated Camera:audio=Microphone (Realtek High Definition Audio)):
Input stream #0:0 (video): 240 packets read (221184000 bytes); 240 frames decoded;
Input stream #0:1 (audio): 16 packets read (1411200 bytes); 16 frames decoded (352800 samples);
Total: 256 packets (222595200 bytes) demuxed
Output file #0 (udp://12.34.56.78:12345):
Output stream #0:0 (video): 241 frames encoded; 241 packets muxed (3108187 bytes);
Output stream #0:1 (audio): 306 frames encoded (352512 samples); 307 packets muxed (128313 bytes);
Total: 548 packets (3236500 bytes) muxed
[libx264 @ 000000000081bb20] frame I:241 Avg QP:27.97 size: 12897
[libx264 @ 000000000081bb20] mb I I16..4: 100.0% 0.0% 0.0%
[libx264 @ 000000000081bb20] coded y,u,v intra: 26.3% 0.5% 0.0%
[libx264 @ 000000000081bb20] i16 v,h,dc,p: 19% 28% 21% 31%
[libx264 @ 000000000081bb20] kb/s:3095.29
[dshow @ 0000000000467720] real-time buffer[Integrated Camera] too full (90% of size: 3041280)! frame dropped!
Received signal 2: terminating. (I pressed CTRL-C)

最佳答案

好的,我让它工作了。问题是我对 FFmpegFFplay 工作方式的理解是错误的。当我们说:

host1> ffmpeg -i INPUT -i protocol://ip:port

这并不意味着 ffmpeg 正在绑定(bind)和监听 ip:port,而是它试图将输出“发布”到此端点。

同理

host2> ffplay -i protocol://ip:port

意味着 ffplay 实际上绑定(bind)到 ip 并在 port 上监听传入内容。

因此要让它工作,ffmpeg 应该发送到 ip:port,其中 ip:port 是远程主机和端口ffplay 正在监听,而不是本地计算机的 IP 地址 - 因为 ffmpeg 是客户端,而不是服务器。

关于ffmpeg 无法流式传输到远程客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25655250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com