У меня есть веб-радио, которое транслируется с помощью Liquidsoap + Icecast на капле DigitalOcean (Ubuntu 16.04), и я хочу объединить этот аудиопоток с простым изображением jpeg с помощью ffmpeg, преобразовать его в видеопоток и отправить в Facebook в прямом эфире.
Характеристики Facebook Live:
Формат видео:
Мы принимаем видео с максимальным разрешением 720p (1280 x 720) со скоростью 30 кадров в секунду. (или 1 ключевой кадр каждые 2 секунды). Вы должны отправлять I-кадр (ключевой кадр) не реже одного раза в две секунды на протяжении всего потока. Рекомендуемая максимальная скорость передачи данных составляет 4000 Кбит / с. Заголовки должны быть меньше 255 символов, иначе поток завершится ошибкой. Live API принимает только видео в кодировке H264 и аудио в формате AAC.
Длина видео:
Максимальная продолжительность 240 минут, за исключением непрерывной прямой трансляции (см. Выше). Максимальная продолжительность потокового предварительного просмотра - 240 минут (либо через диалоговое окно Live, либо через инструменты издателя). Через 240 минут должен быть сгенерирован новый ключ потока.
Расширенные настройки :
Соотношение сторон пикселя: квадрат. Типы кадров: прогрессивная развертка. Частота дискретизации аудио: 44,1 кГц. Аудио битрейт: стерео 128 Кбит / с. Кодирование битрейта: CBR.
И команда ffmpeg, которую я пробовал:
ffmpeg -loop 1 -i radio-background.jpg -thread_queue_size 20480 -i http://localhost:8000/radio -framerate 30 -r 30 -acodec aac -strict -2 -c:v libx264 -strict experimental -b:a 128k -pix_fmt yuvj444p -x264-params keyint=60 -b:v 256k -minrate 128k -maxrate 512k -bufsize 768k -f flv 'rtmp://rtmp-api.facebook.com:80/rtmp/<fb-streaming-key>'
Это действительно работает, поскольку Facebook получает видео в реальном времени и позволяет мне публиковать его. Но я не могу понять, почему происходит задержка почти каждые 2 или 3 секунды. Я просил разных людей посмотреть тестовое видео, и у всех возникала одна и та же проблема: каждые 2 или 3 секунды воспроизведение "зависает" на полсекунды и, кажется, загружает видео, я даже вижу, как значок загрузки вращается на экране.
Я пробовал разные комбинации значений для следующих параметров: -thread_queue_size / -b: v / -minrate / -maxrate / -bufsize. Кажется, ничего не меняет.
Потоковое видео для меня в новинку, я не очень удобен с опциями, перечисленными ранее, поэтому я думаю, что мне что-то здесь не хватает ...
Также обратите внимание, что аудиопоток icecast отлично работает, и согласно графикам DigitalOcean сервер не перегружен. Поэтому я считаю, что моя команда ffmpeg неверна.
Какие параметры ffmpeg будут работать в этом случае?
ffmpeg -loop 1 -i radio-background.jpg -thread_queue_size 20480 -i http://localhost:8000/radio -framerate 30 -r 30 -acodec aac -strict -2 -c:v libx264 -strict experimental -b:a 128k -pix_fmt yuvj444p -x264-params keyint=60 -b:v 2048k -minrate 1024k -maxrate 4000k -bufsize 4000k -f flv 'rtmp://rtmp-api.facebook.com:80/rtmp/<fb-streaming-key>
Результат точно такой же. Кажется, это ничего не меняет. - person Matthieu   schedule 15.01.2017keyint=960
? Проблема с зависанием теперь возникает примерно каждые 4 минуты? Протестируйте и дайте мне знать, спасибо - person VC.One   schedule 30.01.2017