ffmpeg потокового до rtmp на 30 кадрів в секунду


0

Я намагаюся потік мій робочий стіл на сервер rtmp facebook за допомогою екран-захоплення-рекордер:

ffmpeg -re -rtbufsize 256M -f dshow -i audio="Mikrofon (Realtek Audio)" 
-rtbufsize 256M -f dshow -i audio="virtual-audio-capturer"  
-rtbufsize 1024M -f dshow -i video=screen-capture-recorder -r 30  
-filter:v scale=1280:720 -c:v  h264_nvenc -pix_fmt yuv420p -preset fast 
-b:v 8M -maxrate:v 10M  -c:a aac -b:a 128k -ar 44100 
-f flv rtmp://live-api.facebook.com:80/rtmp/..............

Я використовую h264_nvenc кодека для прискорення gpu, але я можу потоку в rtmp тільки 12-18 кадрів в секунду. Однак, коли я передаваю файл у файл:

ffmpeg -re  -rtbufsize 256M -f dshow -i audio="Mikrofon (Realtek Audio)" 
-rtbufsize 256M -f dshow -i audio="virtual-audio-capturer"  
-rtbufsize 1024M -f dshow -i video=screen-capture-recorder -r 30  
-filter:v scale=1280:720 -c:v  h264_nvenc -pix_fmt yuv420p -preset fast 
-b:v 8M -maxrate:v 10M  -c:a aac -b:a 128k -ar 44100 
D:\test.mp4 -y

Я отримую 30 кадрів в секунду без проблем, навіть коли граю в гру (наприклад, виклик чергового 6, симпатичний HW зливання).

Крім того, при запуску потоку (до rtmp), через деякий час я отримую цю помилку, хоча мій -rtbufsize розмір 1024M, який я вважаю досить великим, і багато кадрів втрачаються:

real-time buffer too full or near too full! frame dropped!

Чи можете ви допомогти мені, як запобігти rtbufsize помилку, і чи можна змінити мою команду, щоб я міг потік в rtmp при 30 кадрів в секунду? Дякую

Якщо потрібно, мій конфігурація збірки ffmpeg:

ffmpeg version 3.3.3 Copyright (c) 2000-2017 розробники FFmpeg побудований з gcc 7.1.0 (GCC) конфігурація: --disable-static --enable-shared --enable-gpl --доступна-версія3 --enable-cuda --доступна-cuvid --enable-d3d11va --enable-dxva2 --enable-libmfx --enable -nvenc --enable-avisynth --enable-bzlib --enable-fontconfig --доступний-вільний -enable-gnutls -enable-iconv -enable-libass -enable-libbluray --enable-libbs2b -libcaca --enable-libfreetype --enable-libgme --enable-libgsm -enable-libilbc -enable-libmodplug --enable-libmp3lame -enable-libopencore -mnbb -enable-libopencore-amrwb -enable- libopenh264 --enable-libopenjpeg --enable-libopus --enable-librtmp -enable-libsnappy -enable-libsoxr -enable-libspeex --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

Відповіді:


0

Для початку я б втратив індивідуальність -rtbufsize для кожного входу. Якщо ffmpeg відстає, збільшення буфера в реальному часі не допоможе, якщо ви не намагаєтеся виправити випадкові спайки. Я не впевнений, скільки запасів ffmpeg на вікнах, але я думаю, що можна з упевненістю припустити, що якщо ви отримуєте 12 кадрів в секунду з частотою кадрів, встановленою на 30, це ніколи не наздожене. Це в основному запису до 1 Гб захоплення екрану для кодування пізніше, діючи як буфер можливо, хвилини, ймовірно, коротше, перш ніж вона викине кадри.

Ви сказали, що ви могли зберегти у файлі на 30 кадрів в секунду без проблем, так що це, швидше за все, швидкість завантаження на facebook. Таким чином, ви повинні зробити вихід менше, в основному.

Я впевнений, що ffmpeg читає всі вхідні дані як 25fps за замовчуванням, тому встановлення виходу до 25 кадрів в секунду замість 30, скоріше за все, дозволить вам скористатися фпс до 20. Я не впевнений, як працює dshow, тому я можу помилятися, якщо ви дійсно хочете 30fps.

і я просто помітив, що ви поклали -b:v 8M для кодера ... це реалістично для вашого підключення до Інтернету? Багато постачальників послуг Інтернету (ISP) примусово завантажуватимуть завантаження для своїх приватних клієнтів, тому ви не зможете зробити більше 3-4 Мбіт / с, особливо, якщо ви хочете жити потоком.

Ви хочете використовувати -preset=slow або medium якщо ви збираєтеся використовувати попередню установку. Це може бути іншим для апаратного кодера, так що ви можете перевірити його параметри, але зі швидкістю мережі як вузьким місцем, ви не можете багато чого зробити, якщо ви хочете в реальному часі потокового відео, відео повинно бути менше, або в частоті кадрів , роздільну здатність або стиснення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.