ffmpeg

Организация 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).

 

Приступим к установки по для работы
  1. Устанавливаем FFmpeg, добавляем репозиторий с последними сборками :
    sudo add-apt-repository ppa:jonathonf/ffmpeg-3
    
    sudo apt update && sudo apt install ffmpeg libav-tools x264 x265
  2. Устанавливаем Nginx, добавляем репозиторий с последними сборками :
    sudo apt-get install python-software-properties
    
    sudo add-apt-repository ppa:nginx/stable
    
    sudo apt-get update
    
    sudo apt-get install nginx
  3.   Создаем скрипт для работы над потоком:
    sudo cd /opt/
    
    sudo touch script_stream_hls.sh
    
    sudo chmod 777 script_stream_hls.sh
    
    sudo useradd ffmpeguser
    
    sudo mkdir /opt/www/
Настройка по для работы
  1. Необходима определиться потоком данных откуда будем брать исходную картинку, для примера я возьму мультикастовый поток , можно брать изображение с камеры, из файла или других ресурсов.
  2. В файл script_stream_hls.sh записываем следующее:
  3. #!/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
    
    
  4. Настраиваем 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;

	}
}

 

 

Яндекс.Метрика