@Levhav
Контакты: скайп Levhav, почта Levhav@ya.ru

Как реализовать стриминг видео «Один-ко-многим» с минимальной задержкой?

Надо сделать стриминг когда один вещает видео поток а множество людей его смотрит. Желательно сделать всё с минимальной задержкой в воспроизведении.

Сейчас наладил это так FreeSwitch держит видеоконференцию и транслирует её по rtmp на nginx с nginx-rtmp-module там rtmp конвертируется в hls и раздаётся в браузеры.

Но пока не могу побороть задержку в воспроизведении. Она у меня сейчас до 40 секунд и ни как не могу понять как её сократить.

Конфигурация nginx rtmp секции
worker_processes  1;

rtmp {
           
    server {
		live on;
        listen 1935;
        chunk_size 512;
        buflen 1s;
        idle_streams off;
        
        application cam1 {
            live on;
            exec_options on;


         	record off;

            exec ffmpeg -i rtmp://localhost/cam1/$name
				  -c:a libfdk_aac -b:a 32k   -c:v libx264 -b:v 128K -s 80x60    -f flv rtmp://localhost/hls/$name_low
				  -c:a libfdk_aac -b:a 64k   -c:v libx264 -b:v 256k -s 160x120  -f flv rtmp://localhost/hls/$name_mid
				  -c:a libfdk_aac -b:a 128K  -c:v libx264 -b:v 512K -s 320x240  -f flv rtmp://localhost/hls/$name_hi;
				   
        }
          
		application hls {
			live on;
			hls on;
			hls_path /tmp/hls;
			hls_fragment 2s;
			hls_playlist_length 10s;
			#record off;
			hls_type live;
 
			hls_continuous on;

			hls_fragment_naming sequential;

			hls_nested on; 
                        hls_cleanup off;

			hls_variant _low BANDWIDTH=160000;
			hls_variant _mid BANDWIDTH=320000;
			hls_variant _hi  BANDWIDTH=640000;
		} 
    }
}
Примечание: В итоге задержку мне удалось уменьшить. Как выяснилось её вносила команда `exec ffmpeg ... ` если там не проводить модификации самого видео с уменьшением качества то мой сервер начинает нормально тянуть трансляцию с задержкой до 10 секунд.
  • Вопрос задан
  • 3007 просмотров
Решения вопроса 2
@Levhav Автор вопроса
Контакты: скайп Levhav, почта Levhav@ya.ru
В целом отвечу ещё сам раз есть 10 подписчиков.
Мне удалось настроить nginx так чтоб задержка стрима была около 7 - 9 секунд.

Вот конфиг nginx
worker_processes  1;

rtmp {
           
    server {
		live on;
        listen 1935;
        chunk_size 512;
        buflen 1s;
        idle_streams off;
        
        application stream {
            live on; 
         	record off;
 
			hls on;
			hls_path /tmp/hls;
			hls_fragment 1s;
			hls_playlist_length 6; 
			hls_type live;
  
			hls_fragment_naming sequential;

			hls_nested on;  
			dash on;
            dash_path /tmp/dash;
            
            dash_fragment 1s;
            dash_playlist_length 6;
            dash_nested on; 
        } 
    }
}


Но этого мало. Если такой стрим скормить плееру https://videojs.github.io/videojs-contrib-hls/ то задержка будет 15 - 18 секунд примерно.

Но если внедриться в код плеера и перед тем как он в свои недра передаст содержимое index.m3u8 файла этот файл обрезать чтоб вместо 6 последних элементов в плей листе оставить 2 самых новых файла видео то задержка сократится до 7 - 9 секунд.
Ответ написан
Aquary
@Aquary
softvelum.ru
Можете попробовать нашу технологию SLDP. Работает на базе вебсокетов, позволяет доставлять контент с задержкой меньше секунды. На стороне сервера поддерживается нашим медиа-сервером Nimble Streamer.
На клиентах играет нашими плеерами на всех браузерах с MSE (Win, Linux, MacOS, Android), плюс есть приложения под iOS и Android. Для всех платформ есть SDK для кастомизации плееров.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Wexter
с hls у вас задержки меньше 30-40с не будет. low-latency сейчас идут rtmp/mse/webrtc. последний работает из коробки в фрисвиче через sipml5, только что клиентам нужна будет учётка для дозвона extension'у
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
22 марта 2019, в 06:30
10000 руб./за проект
22 марта 2019, в 03:12
20000 руб./за проект
22 марта 2019, в 01:06
4000 руб./за проект