Тема: FFMPEG
Показать сообщение отдельно
Непрочитано 03.10.2016, 12:26   #2
Аватар для WoWan-SM
Герой

По умолчанию Re: FFMPEG

FFmpeg, для работы, может использовать две реализации RTMP: свою встроенную, которая активна по умолчанию, и при помощи librtmp. Последняя должна принудительно включаться опцией --enable-librtmp.

Все встроенные механизмы FFmpeg могут использовать пользовательский interrupt колбек. Установить его можно для формата используя поле AVFormatContext::interrupt_callback.

Встроенная реализация RTMP его обрабатывает (как минимум, я чинил в 2014 году утечку файловых дескрипторов в rtmp_open() на подключении при срабатывании этого колбека), а реализация при помощи librtmp - нет, просто потому, что вся кухня происходит внутри librtmp (из всех колбеков, которые можно ей задать - колбек для логирования).

Проверить, с какой реализацией rtmp собран FFmpeg, можно запустив его без параметров и поискать строку --enable-librtmp:

Код:
$ ffmpeg

ffmpeg version 3.0 Copyright (c) 2000-2016 the FFmpeg developers

built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.1)

configuration: --prefix=/usr --libdir=/usr/lib/ --incdir=/usr/include/ffmpeg3.0 --datadir=/usr/share/ffmpeg3.0 --docdir=/usr/share/doc/ffmpeg3.0 --enable-shared --enable-avresample --disable-stripping --enable-gpl --enable-version3 --enable-nonfree --enable-runtime-cpudetect --build-suffix=.ffmpeg3.0 --progs-suffix=3.0 --enable-postproc --enable-x11grab --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libdc1394 --enable-libfaac --enable-libfdk_aac --enable-libflite --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-openal --enable-opengl --enable-pthreads --enable-vaapi --enable-vdpau --enable-zlib --enable-debug=3
По поводу разницы, я особо не могу сказать: внутренняя более фичаста и функциональна, развивается, но испытывает больше проблем при publishing потока: librtmp поддерживает более навороченные схемы URL, которые особо любит Wowza. librtmp же находится в состоянии стагнации, развития нет, очень часто случаются такие проблемы с тайм-аутами (нет возможности поставить колбек на чтение). В своём PPA я планирую отказаться от сборки с librtmp в пользу встроенной поддержки.

Кроме того, внутренняя реализация поддерживает listen, чего категорически нет в librtmp. Т.е. можно тестировать схемы, где ffmpeg будет выступать в роли эдакого стримингового сервера.

И да stimeout пробывал?
__________________
Студия L2dev.su. Сборки Lindvior, Epilogue. ICQ 1817070. Skype wowan.sm
WoWan-SM вне форума Отправить сообщение для WoWan-SM с помощью ICQ Отправить сообщение для WoWan-SM с помощью Skype™ Ответить с цитированием