Украина Россия Англия Испания Италия Германия Франция Лига Чемпионов Лига Европы
Чемпионат Мира Чемпионат Европы Кубок Америки Другие Чемпионаты Футбольные программы
РАСПИСАНИЕ ТРАНСЛЯЦИЙ
РЕКЛАМА
НАША ГРУППА В "ВК"

Livescore.in
ОПРОС
Какой чемпионат Вы смотрите:


Создание флеш трансляции в ffmpeg
РУКОВОДСТВО ПО СОЗДАНИЮ ОНЛАЙН ТРАНСЛЯЦИИ С ПОМОЩЬЮ СВЯЗКИ FFMPEG И ALIEZ
 
 В продолжении серии гайдов по флеш стримингу нельзя обойти стороной весьма гибкий на мой взгляд, и самый простой способ создания прямой трансляции. Речь о медиа библиотеке ffmpeg. Мультиплатформенность пакета позволила охватить самый широкий спектр ОС и софта для кодирования-декодирования аудио/видео контента. Возможности пакета на столько широки, что на сайте разработчика написан целый учебник с главами в качестве руководства по использованию. Мы же, по традиции, затронем лишь "профильные" возможности этого пакета.

И так! Для начала качаем сам пакет дистрибутива для Windows, так как настоящая инструкция будет описывать использование последнего именно в этой среде.

1. Создаем новую директорию в любом удобном месте, скажем на корне С и назовем ее ffmpeg. Помещаем в нее файл ffmpeg.exe. Сам пакет работает из под консоли. По этому для работы нам придется создать исполнительный bat файл, содержащий необходимую конфигурацию запуска. Приведу краткое описание ключей кода (если нет желания разбираться в в ключах и их значениях, проматывайте к спойлерам и пункту №2, но не забудьте предварительно зарегистрировать аккаунт на aliez.me и создать новый канал. Нам понадобятся FMS URL и Stream key):

:start -- команда запуска

ffmpeg -- собственно, сам программный пакет

-i -- ключ указывающий ffmpeg источник нашего контента (их, к слову, может быть несколько. На пример если нужно свести отдельные потоки видео и аудио или добавить картинку лого на стрим. В последнем случае придется добавить в комплекс фильтров overlay).

-filter_complex -- Ключ объединяющий группу фильтров в комплекс. Фильтры с параметрами вводятся через запятую (если фильтр всего один можно использовать ключ -vf)

-yadif -- фильтр убирает интерленцию видео (эффект расчески).

-scale -- фильтр масштабирования видео кадра (в примере использованы значения 640х360, где 640 пикселов - это ширина кадра, а 360 - высота. Для генерации правильных разрешений можно воспользоваться любым онлайн калькулятором аспекта).

-c:v -- кодек компрессии видео потока (в нашем случае это libx264 - H.264).

-preset -- главная опция H.264 кодека. Определяет соотношение качество видео / скорость кодирования. Прямо влияет на нагрузку ЦП. Возможные варианты от менее качественных / быстрых к более качественным / медленным - ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo. Можно поэкспериментировать в поисках оптимальной нагрузки для своего ЦП.

-b:v -- ключ задающий постоянное значение битрета видео потока.

-af volume -- фильтр усиления звука. Часто телевизионные каналы вещают с недостаточным уровнем звука. Если Вы считаете входящий уровень достаточным - исключите этот ключ из кода. Я же опытным путем определил для себя (для "профильных" каналов) оптимальное значение равное 3.

-c:a -- кодек компрессии аудио потока (Спецификация флеш стриминга разрешает использовать только mp3 и aac (m4a) кодеки. Если по каким-то причинам mp3 Вас не устраивает, придется в коде заменить mp3 на aac и после комплекса всех фильтров добавить ключ -strict со значением -2)

-b:a -- ключ задающий постоянное значение битрейта аудио потока.

-ac -- ключ определяющий количество каналов аудио. Здесь остановимся чуть подробнее. В отличие от mp3, формат aac позволяет транслировать многоканальный поток 5.1 и если источник располагает такой конфигурацией, то можно попробовать дать зрителю многоканальный звук. Однако, следует учесть зависимость - чем больше каналов звука, тем больше суммарный битрейт аудио потока. Скажем, если для моно звука (1 канал) достаточно 64К/сек, то в многоканальной конфигурации при том же качестве на канал поток будет равен 64х6=384К/сек. И это значение нам нужно прибавить к битрейту видео (в примере кода - 600K/с), а значит на выходе будем иметь без малого 1 Мегабит, что никак не вписывается в ограничения Free плана aliez.me. В общем имеем еще одно поле для экспериментов.

-ar -- ключ задающий частоту дискретизации звука. Подробнее о семплировании расскажет википедия. Для нас же важно знать, что чем выше значение, тем качественнее звук. В случае с mp3 самыми полезными из допустимых будут только два значения это 22050 (низкое качество) и 44100 (стандартное качество). aac в этом плане более гибкий. С ним возможно использовать стандартную для спутниковых потоков частоту 48000 Герц или более экзотическую в 32000. Применимо даже значение в 96000 Герц, но на практике чаще всего используются 44,1Кгц для mp3 и 48Кгц для aac.

-f -- ключ задающий контейнер объединенного потока, в народе просто формат. В нашем случае flv - flash video.

Часть кода в конце (rtmp://...) это последовательность FMS URL и Stream key полученных при создании канала на aliez.me (как создать свой канал я рассказывал в статье по OBS Studio). Обратите внимание что FMS URL и Stream key вводятся одной строкой и разделены слешем без пробелов.

Последний параметр это goto start. Ставится с новой строки. Позволяет автоматически перезапустить код, если трансляция по какой-нибудь причине упала (к примеру из-за ошибок во входящем потоке вызванных плохими погодными условиями). Удобно, если нет возможности постоянно мониторить состояние трансляции.
 
Конфигурация кода с mp3 звуком формата 2.0:
 
 
Конфигурация кода с aac звуком формата 5.1:
 
 
Конфигурация кода с aaс звуком формата 1.0 и опцией сохранения копии входящего потока:
 
 
Обратите внимание на часть кода под последним спойлером (%time:~0,2%-%time:~3,2%-%time:~6,2%). Он добавляет в название сохраняемого файла время старта записи. Таким образом удалось избежать проблему с перезаписью файла в случае падения трансляции и автоматического перезапуска. Код позволяет создавать новый файл с отличным от предыдущего именем. Префикс "stream" можно менять по Вашему усмотрению. Так же по желанию в код можно внести путь для сохранения файлов. Если оставить как есть, файлы будут сохранятся в директории ffmpeg.
 
2. Открываем блокнот (Пуск => Все программы => Стандартные => Блокнот) и вставляем в пустой документ код из спойлера. Сохраняем его с именем stream.bat в папку ffmpeg.

3. Остается только запустить наш bat файл. Если все сделано правильно, мы увидим окно консоли с информацией нашей трансляции, обновляющуюся в реальном времени. А на странице плеера появится наше видео. Не забываем вносить правила в брандмауэр.


Слева на право: frame - количество перекодированных кадров к текущему моменту; fps - количество кадров в секунду в исходящем видеопотоке; q - параметр квантизера (в нашем случае будет переменным, так как задан постоянный битрейт); size - объем переданных даннык в Килобайтах; time - время от начала трансляции; bitrate - усредненный суммарный битрейт потока.
 
В завершение напомню, что площадка Aliez, используемая в примере, не является обязательным требованием. Использовать можно любую аналогичную площадку. Так же не забывайте об ответственности за нарушение авторских прав. На этом все. Статью для Вас подготовил FRAPS). До новых встреч.