В книге «Практика разработки FFmpeg: от нулевых основ к короткому видео онлайн» в главе 10 представлен легкий сервер потокового мультимедиа MediaMTX. Этот инструмент может тестировать потоки push и pull протоколов потокового мультимедиа, таких как RTSP/RTMP. Однако функция MediaMTX слишком проста и не может быть применена к производственной среде реальной прямой трансляции. Сервер потокового мультимедиа, который можно по-настоящему использовать в производственной среде, зависит от SRS или ZLMediaKit.
SRS — это домашний видеосервер реального времени с открытым исходным кодом, который поддерживает такие протоколы потокового мультимедиа, как RTMP, WebRTC, HLS, HTTP-FLV, SRT, MPEG-DASH и GB28181. Медиа-сервер SRS работает с такими клиентами, как FFmpeg, OBS, VLC и WebRTC, обеспечивая возможность получения и распространения аудио- и видеопотоков. Это типичная модель сервера публикации (потоковой передачи) и подписки (воспроизведения). SRS поддерживает преобразование аудио- и видеопротоколов, широко используемых в Интернете. Например, он может конвертировать RTMP или SRT в такие протоколы, как HLS, HTTP-FLV или WebRTC. Объединив FFmpeg и SRS, вы можете легко протестировать push- и pull-потоки аудио и видео. Далее, используя систему Эйлера Huawei в качестве операционной среды, мы покажем, как компилировать, устанавливать и отлаживать SRS. Подробные этапы работы следующие.
1. Войдите на сервер Linux (например, в систему Euler от Huawei Cloud) и выполните следующую команду, чтобы установить пакет зависимостей SRS.
yum install git
yum install patch
2. Выполните следующую команду, чтобы загрузить исходный код SRS с сайта gitee.
cd /usr/local/src
git clone -b develop https://gitee.com/ossrs/srs.git
3. Войдите в основной каталог исходного кода SRS и выполните следующую команду для настройки SRS.
cd srs/trunk
./configure
4. Запустите следующую команду, чтобы скомпилировать SRS.
make
После выполнения команды в каталоге srs/trunk/obj создается исполняемая программа SRS srs.
Подробные инструкции по компиляции и установке FFmpeg в системе Linux см. в разделе «1.2 Установка FFmpeg в системе Linux» в книге «Практика разработки FFmpeg: от нулевых основ к короткому онлайн-видео», которая здесь не будет повторяться.
1. Войдите в каталог конфигурации магистрали SRS, то есть выполните следующую команду:
cd /usr/local/src/srs/trunk/conf
2. Откройте файл конфигурации srs.conf и добавьте следующую строку конфигурации в vhost __defaultVhost__:
gop_cache on;
Приведенная выше конфигурация указывает, что кэширование ключевых кадров включено. В противном случае клиент не сможет визуализировать изображение, если поток не сможет найти ключевые кадры. После внесения изменений сохраните и закройте srs.conf. 3. Выполните следующую команду, чтобы запустить службу SRS.
cd /usr/local/src/srs/trunk
./objs/srs -c conf/srs.conf
4. Проверьте, открыты ли на сервере следующие порты: Порт 1935 используется для протокола rtmp и необходим для доступа к адресу прямой трансляции, начинающемуся с «rtmp://». Порт 8080 используется для протокола http и необходим для доступа к адресу прямой трансляции, начинающемуся с «http://».
1. Выполните следующую команду, чтобы передать локальное видео в SRS через протокол RTMP.
ffmpeg -re -stream_loop -1 -i "/usr/local/src/test/2018s.mp4" -vcodec h264 -f flv rtmp://127.0.0.1/live/test
Примечание. SRS не поддерживает push-потоковую передачу RTSP, а только push-потоковую передачу RTMP. 2. Откройте проигрыватель VLC, выберите меню «Медиа» → «Открыть потоковую передачу по сети», введите любой из следующих адресов в поле URL-адреса сети и посмотрите, можно ли нормально воспроизводить видеоэкран.
rtmp://124.***.***.***/live/test
http://124.***.***.***:8080/live/test.flv
http://124.***.***.***:8080/live/test.m3u8
Обратите внимание, что вам необходимо заменить «124.***.***.***» в приведенном выше адресе фактическим адресом общедоступной сети сервера потокового мультимедиа. более подробныйFFmpegИнформацию о разработке см.«Практика разработки FFmpeg: от нулевых основ к короткому онлайн-видео»книга。