Тестовое видео в статье:https://pan.baidu.com/s/1Cs9bULQ26zmDjbNqiIyUow Пароль: q839
SRSОфициальный сайт:http://winlinvip.github.io/srs.release/releases/
SRSИсходный код:https://github.com/ossrs/srs
прямая трансляцияСравнение планов
Подробности смотрите в таблице ниже:
распределение
платформа
протокол
компания
иллюстрировать
RTMP
Windows Flash
RTMP
Adobe
Основной поток с низкой задержкойраспределение Способ, Встроенная поддержка Adobe для RTMP — Flash. FMS(Adobe Media предшественник сервера), Это Флэш Media Аббревиатура «Сервер» показывает, как «родной» Flash воспроизводит RTMP. Это так же «родно», как браузер, открывающий веб-страницу http, После тестирования Flash может воспроизводить потоки RTMP более 10 дней без перерыва.
HLS
Apple/ Android
HTTP
Apple/ Google
Задержка более чем на один фрагмент (обычно более 10 секунд), Эффект HLS на платформе Apple даже лучше, чем RTMP на ПК. И все устройства Apple поддерживают его, Изначально Android не поддерживал HLS, но позже стал поддерживать. Но тест показал, что поддержка не так хороша, как у Apple. Однако с просмотром проблем нет, но стабильность немного хуже. Итак, какая-то компания специализируется на потоковой передаче медиаплееров на Android.
ТекущийсерверНе требует операций ffmpeg.Используйте это, когда Способ
Следующий метод заключается в прямой установке официальной скомпилированной версии, которая не содержит библиотеки ffmpeg.
Если вам нужен ffmpeg для обработки потока, вам необходимо скачать ffmpeg самостоятельно или использовать метод ниже для компиляции исходного кода (рекомендуется)
cd /root
wget http://winlinvip.github.io/srs.release/releases/files/SRS-CentOS6-x86_64-2.0.243.zip
unzip -q SRS-CentOS6-x86_64-2.0.243.zip
cd SRS-CentOS6-x86_64-*
sudo bash INSTALL
sudo /etc/init.d/srs start
копировать
Каталог после установки srs — /usr/local/srs.
abort, please install lsb_release
yum install -y redhat-lsb
копировать
Формат URL-адреса RTMP:
rtmp://ip:[port]/appName/streamName
копировать
Например:
rtmp://192.168.1.108:1935/live/xiaoming
копировать
ТекущийсерверИспользование операций ffmpegИспользуйте это, когда Способ
Загрузите официальный исходный код и скомпилируйте его ниже. Загрузка на Github происходит слишком медленно, поэтому я сделал зеркало на gitee.
Причина, по которой исходный код компиляции находится здесь, заключается в том, что предыдущий метод прямой установки не предоставляет сторонние библиотеки.,Например, что будет использоваться дальшеffmpeg;
Конечно, мы также можем вручную установить ffmpeg, а затем изменить путь к ffmpeg по умолчанию в файле конфигурации.
Обратите внимание здесьffmpegНеобходимо использовать4.1Версия Некоторый синтаксис srs не поддерживается в версии 4.2. Это место обманывало меня долгое время Если вы ранее устанавливали версию 4.2, обязательно сначала удалите ее.
Проверьте версию ffmpeg
ffmpeg -version
копировать
установить SRS
cd ~
git clone https://gitee.com/psvmc/srs.git
cp -rf srs/trunk /usr/local/srs2
cd /usr/local/srs2
./configure --full
make
копировать
Здесь нет такого метода установки, как следующий.
./configure --prefix=/usr/local/srs2 --with-ffmpeg
make && make install
копировать
Это из-за этого Установитьназадffmpegиз Папка не создается Вам все равно придется переходить вручную
Когда я устанавливаю сюда ffmpeg, при компиляции получаю ошибку.
build ffmpeg failed build ffmpeg-4.1 failed, ret=1
изначальноsrsизкомпилировать Уже включеноx264иffmpeg,Когда я получаю эту ошибку, я могу сделать это только вручную.
Если описанная выше установка прошла успешно, нет необходимости выполнять следующие команды.
Установите среду компиляции
yum install -y automake autoconf libtool gcc gcc-c++
yum install -y make
копировать
Установите плагин yasm
wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar -xvf yasm-1.3.0.tar.gz
cd yasm-1.3.0/
./configure && make && make install
копировать
Установить насм
cd ~
wget https://www.nasm.us/pub/nasm/releasebuilds/2.14.02/nasm-2.14.02.tar.gz
tar -zxvf nasm-2.14.02.tar.gz
cd nasm-2.14.02
./configure
make && make install
cd ..
копировать
установить SRS
yum install -y git
# скачать
rm -rf /usr/local/srs2
cd ~
git clone https://gitee.com/psvmc/srs.git
cp -rf srs/trunk /usr/local/srs2
# Установить Трехсторонняя зависимость
cd /usr/local/srs2/3rdparty/
# Установить x264:
wget https://code.videolan.org/videolan/x264/-/archive/stable/x264-stable.tar.gz
tar -zxvf x264-stable.tar.gz
cd x264-stable
./configure --enable-static --enable-shared
make && make install
cd ..
# Установитьfdk-aac
wget https://jaist.dl.sourceforge.net/project/opencore-amr/fdk-aac/fdk-aac-0.1.5.tar.gz
tar -zxvf fdk-aac-0.1.5.tar.gz
cd fdk-aac-0.1.5
./configure
make && make install
cd ..
# Установить ffmpeg:
unzip ffmpeg-4.1.zip
cd ffmpeg-4.1
./configure --enable-gpl --enable-libx264 --enable-nonfree --enable-libfdk-aac
make && make install
# установить SRS:
cd /usr/local/srs2
./configure --full
make
копировать
Тест ffmpeg
ffmpeg -version
копировать
Сообщается об ошибке:
ffmpeg: error while loading shared libraries: libx264.so.157: cannot open sh
Решение
vi /etc/ld.so.conf
копировать
добавить вlibx264.soПуть
/usr/local/lib
копировать
Выполнить после выхода
ldconfig
копировать
cd /usr/local/srs
nohup ./objs/srs -c conf/realtime.conf>log.txt &
копировать
завершить процесс
lsof -i:1935
kill -9 PID
копировать
listen 1935;
max_connections 1000;
daemon off;
srs_log_tank console;
vhost __defaultVhost__ {
gop_cache off;
queue_length 10;
min_latency on;
mr {
enabled off;
}
mw_latency 100;
tcp_nodelay on;
}
копировать
Подробная конфигурация:https://github.com/ossrs/srs/wiki/v2_CN_Security
В настоящее время поддерживается только политика безопасности на основе IP, что не очень практично.
vhost your_vhost {
# security for host to allow or deny clients.
# @see https://github.com/ossrs/srs/issues/211
security {
# whether enable the security for vhost.
# default: off
enabled on;
# the security list, each item format as:
# allow|deny publish|play all|<ip>
# for example:
# allow publish all;
# deny publish all;
# allow publish 127.0.0.1;
# deny publish 127.0.0.1;
# allow play all;
# deny play all;
# allow play 127.0.0.1;
# deny play 127.0.0.1;
# SRS apply the following simple strategies one by one:
# 1. allow all if security disabled.
# 2. default to deny all when security enabled.
# 3. allow if matches allow strategy.
# 4. deny if matches deny strategy.
allow play all;
allow publish all;
}
}
копировать
Подробная конфигурация:https://github.com/ossrs/srs/wiki/v2_CN_DVR
Прямые трансляции сохраняют локальные файлы.
vhost __defaultVhost__ {
dvr {
enabled on;
dvr_path /data/rtmplive/[app]/[stream]/[2006]/[01]_[02]/[15]_[04]_[05]_[999].flv;
dvr_plan session;
dvr_duration 30;
dvr_wait_keyframe on;
time_jitter full;
}
}
копировать
Подробная конфигурация:https://github.com/ossrs/srs/wiki/v1_CN_SampleForward
vhost __defaultVhost__ {
forward 127.0.0.1:19350;
}
копировать
Forward VS Edge
ForwardАрхитектураиCDNАрхитектураиз Самая большая разница,CDN принадлежит к масштабному кластеру,Будут тысячи краевых узлов,2 исходные станции (горячий резерв),Также должен быть средний слой. У CDN много клиентов,Также будет много потоков. Итак, если начало координат перенаправляет каждый поток к краю,Это создает огромные потери (есть много потоков, которые нужны только нескольким узлам).
Видно, что перенаправление применяется только ко всем граничным узлам, которым требуются все потоки. CDN требует определенных потоков для определенных краевых узлов.
Узким местом пересылки является количество потоков. Предположим, что каждый SRS прослушивает только один порт:
Количество потоков в системе = Количество потоков для кодера × Количество узлов × Количество портов
копировать
Рассмотрим 5 узлов, каждый узел имеет 4 порта, то есть имеется 20 ребер SRS. Если кодер выводит 5 потоков, получается 20 * 5 = 100 потоков.
В той же архитектуре для краевых узлов CDN количество потоков в системе — это поток пользователей, обращающихся к граничным узлам. Если предположить, что пользователи не получают доступа, в системе не будет трафика. Когда пользователь в определенной области получает доступ к потоку на определенном узле, в системе существует только один поток вместо многоканального прямого широковещательного потока.
Кроме того, пересылка требует от игрока случайного доступа к нескольким портам для достижения балансировки нагрузки или от игрока к доступу к серверу API и серверу API для достижения балансировки нагрузки, что не подходит для CDN (клиенту необходимо сменить проигрыватель).
Короче говоря, пересылка подходит для небольших кластеров и не подходит для крупномасштабных кластерных приложений CDN.
Подробная конфигурация:https://github.com/ossrs/srs/wiki/v2_CN_SampleHttpFlv
listen 1935;
max_connections 1000;
http_server {
enabled on;
listen 8080;
dir ./objs/nginx/html;
}
vhost __defaultVhost__ {
http_remux {
enabled on;
mount [vhost]/[app]/[stream].flv;
hstrs on;
}
}
копировать
Сгенерированный адрес потока:
Подробная конфигурация:https://github.com/ossrs/srs/wiki/v2_CN_SampleHLS
listen 1935;
max_connections 1000;
vhost __defaultVhost__ {
hls {
enabled on;
hls_path ./objs/nginx/html;
hls_fragment 10;
hls_window 60;
}
}
копировать
Сгенерированный адрес потока:
Подробная конфигурация:https://github.com/ossrs/srs/wiki/v2_CN_HTTPCallback
vhost __defaultVhost__ {
http_hooks {
enabled on;
on_connect http://127.0.0.1:8085/api/v1/clients http://localhost:8085/api/v1/clients;
on_close http://127.0.0.1:8085/api/v1/clients http://localhost:8085/api/v1/clients;
on_publish http://127.0.0.1:8085/api/v1/streams http://localhost:8085/api/v1/streams;
on_unpublish http://127.0.0.1:8085/api/v1/streams http://localhost:8085/api/v1/streams;
on_play http://127.0.0.1:8085/api/v1/sessions http://localhost:8085/api/v1/sessions;
on_stop http://127.0.0.1:8085/api/v1/sessions http://localhost:8085/api/v1/sessions;
on_dvr http://127.0.0.1:8085/api/v1/dvrs http://localhost:8085/api/v1/dvrs;
on_hls http://127.0.0.1:8085/api/v1/hls http://localhost:8085/api/v1/hls;
on_hls_notify http://127.0.0.1:8085/api/v1/hls/[app]/[stream]/[ts_url][param];
}
}
копировать
События обратного вызова SRS включают:
событие
данные
иллюстрировать
on_connect
{ “action”: “on_connect”, “client_id”: 1985, “ip”: “192.168.1.10”, “vhost”: “video.test.com”, “app”: “live”, “tcUrl”: “rtmp://x/x?key=xxx”, “pageUrl”: “http://x/x.html" }
Когда клиент подключается к указанному виртуальному хосту и приложению
on_close
{ “action”: “on_close”, “client_id”: 1985, “ip”: “192.168.1.10”, “vhost”: “video.test.com”, “app”: “live”, “send_bytes”: 10240, “recv_bytes”: 10240 }
Когда клиент закрывает соединение или SRS активно закрывает соединение
on_publish
{ “action”: “on_publish”, “client_id”: 1985, “ip”: “192.168.1.10”, “vhost”: “video.test.com”, “app”: “live”, “tcUrl”: “rtmp://x/x?key=xxx”, “stream”: “livestream” }
При отправке на сервер
on_unpublish
{ “action”: “on_unpublish”, “client_id”: 1985, “ip”: “192.168.1.10”, “vhost”: “video.test.com”, “app”: “live”, “stream”: “livestream” }
Когда клиент перестает публиковать поток
on_play
{ “action”: “on_play”, “client_id”: 1985, “ip”: “192.168.1.10”, “vhost”: “video.test.com”, “app”: “live”, “stream”: “livestream”, “pageUrl”: “http://a.com/i.html", “param”:”?k=v” }
Когда клиент начинает воспроизводить поток
on_stop
{ “action”: “on_stop”, “client_id”: 1985, “ip”: “192.168.1.10”, “vhost”: “video.test.com”, “app”: “live”, “stream”: “livestream” }
Когда клиент перестает играть. Примечание. Остановка воспроизведения может не привести к разрыву соединения, и воспроизведение может продолжиться.
on_dvr
{ “action”: “on_dvr”, “client_id”: 1985, “ip”: “192.168.1.10”, “vhost”: “video.test.com”, “app”: “live”, “stream”: “livestream”, “cwd”: “/opt”, “file”: “./l.xxx.flv” }
При записи DVR закрывается FLV-файл
в:
Запустите встроенный интерфейсный сервер
python research/api-server/server.py 8085
копировать
начать срс
./objs/srs -c conf/http.hooks.callback.conf
копировать
Тестовый поток push-уведомлений
ffmpeg -re -stream_loop -1 -i /data/rtmptest.mp4 -vcodec copy -acodec copy -f flv -y rtmp://127.0.0.1:1935/live/test
копировать
Подробная конфигурация:
RTMP-сервер для потоковой передачи или обработки и пересылки.
К основным процессам транскодирования SRS относятся:
Потоковая обработка
listen 1935;
max_connections 1000;
daemon off;
srs_log_tank console;
vhost __defaultVhost__ {
transcode {
enabled on;
ffmpeg ./objs/ffmpeg/bin/ffmpeg;
engine ff {
enabled on;
vfilter {
}
vcodec libx264;
vthreads 4;
vprofile main;
vpreset medium;
vparams {
}
acodec libfdk_aac;
aparams {
}
output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];
}
}
}
копировать
Обработка и пересылка RTMP-сервера
vhost __defaultVhost__ {
transcode {
enabled on;
ffmpeg ./objs/ffmpeg/bin/ffmpeg;
engine ff {
enabled on;
vfilter {
}
vcodec copy;
acodec copy;
output rtmp://livepush.psvmc.cn/live/test;
}
}
}
копировать
запускать
cd /usr/local/srs2
./objs/srs -c conf/ffmpeg.transcode.conf
# или
nohup ./objs/srs -c conf/ffmpeg.transcode.conf>log.txt &
копировать
Push-стриминг
ffmpeg -re -stream_loop -1 -i /usr/local/srs2/doc/source.200kbps.768x320.flv -vcodec copy -acodec copy -f flv -y rtmp://127.0.0.1:1935/live/test
копировать
Проверьте, может ли ffmpeg на сервере успешно обработать поток.
ffmpeg -f flv -i rtmp://127.0.0.1:1935/live/test -vcodec libx264 -threads 4 -profile:v main -preset medium -acodec copy -f flv -y rtmp://127.0.0.1:1935/live/test2
копировать
Задействованные потоки включают в себя:
Путь конфигурации: /usr/local/srs/conf/z.conf
listen 1935;
max_connections 1000;
daemon off;
srs_log_tank console;
http_server {
enabled on;
listen 8080;
dir ./objs/nginx/html;
}
vhost __defaultVhost__ {
gop_cache off;
queue_length 10;
min_latency on;
mr {
enabled off;
}
mw_latency 100;
tcp_nodelay on;
dvr {
enabled on;
dvr_path /data/rtmplive/[app]/[stream]/[2006]/[01]_[02]/[15]_[04]_[05]_[999].flv;
dvr_plan session;
dvr_duration 30;
dvr_wait_keyframe on;
time_jitter full;
}
http_remux {
enabled on;
mount [vhost]/[app]/[stream].flv;
hstrs on;
}
}
копировать
Заканчивать
lsof -i:1935
kill pid
копировать
запускать
cd /usr/local/srs
nohup ./objs/srs -c conf/z.conf>./log.txt &
копировать
Push-стриминг
ffmpeg -re -stream_loop -1 -i /data/rtmptest.mp4 -vcodec copy -acodec copy -f flv -y rtmp://rtmp.psvmc.cn:1935/live/test
копировать
Воспроизведение петли FFMpeg низкой версии
for((;;));
Опубликовано в 5 дней назад
читать ( 23 )
Категория: Живой