我正在尝试使用FFMPEG(Windows)通过dshow对来自视频捕获卡的流进行编码并发送到RTMP服务器。这是我的命令行;
ffmpeg -f dshow -i video="AVerMedia BDA Analog Capture Secondary":audio="Microphone (6- C-Media USB Audi" -vf scale=1280:720 -vcodec libx264 -r 30 -rtbufsize 702000k -acodec mp3 -ac 2 -ar 44100 -ab 128k -pix_fmt yuv420p -tune zerolatency -preset ultrafast -f flv "rtmp://xxx.xxx.xxx.xxx/stream/key" ffmpeg version N-86950-g1bef008 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 7.1.0 (GCC)
configuration: --enable-gpl --enable-version3 --enable-cuda --enable-cuvid --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-nvenc --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-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libsnappy --enable-libsoxr --enable-libspe
ex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-zlib
libavutil 55. 70.100 / 55. 70.100
libavcodec 57.102.100 / 57.102.100
libavformat 57. 76.100 / 57. 76.100
libavdevice 57. 7.100 / 57. 7.100
libavfilter 6. 98.100 / 6. 98.100
libswscale 4. 7.102 / 4. 7.102
libswresample 2. 8.100 / 2. 8.100
libpostproc 54. 6.100 / 54. 6.100
Guessed Channel Layout for Input Stream #0.1 : stereo
Input #0, dshow, from 'video=AVerMedia BDA Analog Capture Secondary:audio=Microphone (6- C-Media USB Audi':
Duration: N/A, start: 2035.202000, bitrate: N/A
Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 720x480, 29.97 fps, 29.97 tbr, 10000k tbn, 10000k tbc
Stream #0:1: Audio: pcm_s16le, 44100 Hz, stereo, s16, 1411 kb/s
[dshow @ 00000000005f90e0] real-time buffer [AVerMedia BDA Analog Capture Secondary] [video input] too full or near too full (68% of size: 3041280 [rtbufsize parameter])! frame dropped!
[dshow @ 00000000005f90e0] real-time buffer [AVerMedia BDA Analog Capture Secondary] [video input] too full or near too full (90% of size: 3041280 [rtbufsize parameter])! frame dropped!
[dshow @ 00000000005f90e0] real-time buffer [AVerMedia BDA Analog Capture Secondary] [video input] too full or near too full (113% of size: 3041280 [rtbufsize parameter])! frame dropped!
Last message repeated 46 times
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
[dshow @ 00000000005f90e0] real-time buffer [AVerMedia BDA Analog Capture Secondary] [video input] too full or near too full (113% of size: 3041280 [rtbufsize parameter])! frame dropped!
[libx264 @ 0000000005b16640] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0000000005b16640] profile Constrained Baseline, level 3.1
[libx264 @ 0000000005b16640] 264 - core 152 r2851 ba24899 - H.264/MPEG-4 AVC codec - Copyleft 2003-2017 - http://www.videolan.org/x264.html - options: cabac=0 ref=1 deblock=0:0:0 analyse=0:0 me=dia subme=0 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=2
1,11 fast_pskip=1 chroma_qp_offset=0 threads=11 lookahead_threads=11 sliced_threads=1 slices=11 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 scenecut=0 intra_refresh=0 rc=crf mbtree=0 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ra
tio=1.40 aq=0
[dshow @ 00000000005f90e0] real-time buffer [AVerMedia BDA Analog Capture Secondary] [video input] too full or near too full (113% of size: 3041280 [rtbufsize parameter])! frame dropped!
Past duration 0.999992 too large
缓冲区太满的消息是不停的。我可以使用开放广播软件(OBS)和流没有问题(我很确定它也使用ffmpeg),所以我做错了。
答案 0 :(得分:2)
增加输入缓冲区大小。
ffmpeg -f dshow -rtbufsize 100M -i ...