Организация on-line трансляции на сайте FFmpeg HLS Nginx
Пример организации on-line трансляции на сайте из потоков multicast средствами ffmpeg и nginx на ubuntu server разных версий. Процесс установки и настройки не так уж сложен, это как туры во францию все просто. Для начала немного теории:
FFmpeg — набор свободных библиотек с открытым исходным кодом, которые позволяют записывать, конвертировать и передавать цифровые аудио— и видеозаписи в различных форматах.
HLS (HTTP Live Streaming) — коммуникационный протокол для потоковой передачи медиа на основе HTTP, разработанный компанией Apple как часть программного обеспечения QuickTime, Safari, OS X и iOS. В основе работы лежит принцип разбиения цельного потока на небольшие фрагменты, последовательно скачиваемые по HTTP. Поток непрерывен и теоретически может быть бесконечным. В начале сессии скачивается плей-лист в формате M3U, содержащий метаданные об имеющихся вложенных потоках.
nginx (англ. engine x) (по-русски произносится как э́нжин-э́кс или э́нжин-и́кс) — веб-сервер и почтовый прокси-сервер, работающий на Unix-подобных операционных системах (тестировалась сборка и работа на FreeBSD, OpenBSD, Linux, Solaris, Mac OS X, AIX и HP-UX).
Потоковое мультимедиа (от. англ. streaming media) — это мультимедиа, которое непрерывно получается пользователем от провайдера потокового вещания. Это понятие применимо как к информации, распространяемой через телекоммуникации, так и к информации, которая изначально распространялась посредством потокового вещания (например, радио, телевидение) или непотоковой (например, книги, видеокассеты, аудио CD).
Приступим к установки по для работы
- Устанавливаем FFmpeg, добавляем репозиторий с последними сборками :
sudo add-apt-repository ppa:jonathonf/ffmpeg-3 sudo apt update && sudo apt install ffmpeg libav-tools x264 x265
- Устанавливаем Nginx, добавляем репозиторий с последними сборками :
sudo apt-get install python-software-properties sudo add-apt-repository ppa:nginx/stable sudo apt-get update sudo apt-get install nginx
- Создаем скрипт для работы над потоком:
sudo cd /opt/ sudo touch script_stream_hls.sh sudo chmod 777 script_stream_hls.sh sudo useradd ffmpeguser sudo mkdir /opt/www/
Настройка по для работы
- Необходима определиться потоком данных откуда будем брать исходную картинку, для примера я возьму мультикастовый поток , можно брать изображение с камеры, из файла или других ресурсов.
- В файл script_stream_hls.sh записываем следующее:
#!/bin/sh sudo -u ffmpeguser ffmpeg -i udp://@224.0.0.1:5000 -codec:v libx264 -s 640x480 -b:v 800k -movflags +faststart -c:a aac -b:a 160000 -ac 2 -strict -2 \ -metadata service_provider="Stream TV" \ -metadata service_name="Stream TV" \ -hls_time 10 -hls_list_size 6 -hls_wrap 18 -start_number 1 \ -hls_segment_filename '/opt/www/out%03d.ts' /opt/www/playlist.m3u8
- Настраиваем nginx для отдачи контента.
server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; root /opt/www; index index.html index.htm; # Make site accessible from http://localhost/ server_name localhost; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; # Uncomment to enable naxsi on this location # include /etc/nginx/naxsi.rules } add_header 'Access-Control-Allow-Origin' '*'; error_page 404 /index.html; } }