MediaMTX — это облегченный сервер потокового мультимедиа с открытым исходным кодом. Процесс его установки описан в разделе «10.2.2 Передача потоковой передачи FFmpeg в сеть» в книге «Практика разработки FFmpeg: от нулевых основ к короткому видео в Интернете». Загруженный сжатый пакет MediaMTX включает в себя исполняемую программу mediamtx.exe и файл конфигурации mediamtx.yml. Он выглядит очень просто, но предоставляемые им потоковые сервисы ничуть не уменьшены. Дважды щелкните файл mediamtx.exe, и MediaMTX откроет окно командной строки. Информация журнала внутри окна выглядит следующим образом:
2023/12/10 14:18:25 INF MediaMTX v1.3.0
2023/12/10 14:18:25 INF configuration loaded from E:\Program Files (x86)\mediamtx\mediamtx.yml
2023/12/10 14:18:25 INF [RTSP] listener opened on :8554 (TCP), :8000 (UDP/RTP), :8001 (UDP/RTCP)
2023/12/10 14:18:25 INF [RTMP] listener opened on :1935
2023/12/10 14:18:25 INF [HLS] listener opened on :8888
2023/12/10 14:18:25 INF [WebRTC] listener opened on :8889 (HTTP), :8189 (ICE/UDP)
2023/12/10 14:18:25 INF [SRT] listener opened on :8890 (UDP)
Из журнала видно, что MediaMTX включил следующие пять потоковых сервисов: 1. Прослушивайте службу RTSP на порту 8554, соответствующий адрес воспроизведения потокового мультимедиа — rtsp://127.0.0.1:8554/stream; 2. Прослушивайте службу RTMP на порту 1935, соответствующий адрес воспроизведения потокового мультимедиа — rtmp://127.0.0.1:1935/stream; 3. Прослушивайте службу HLS на порту 8888. Есть два соответствующих адреса воспроизведения потокового мультимедиа. Среди них http://127.0.0.1:8888/stream можно воспроизводить напрямую через браузер (например, Chrome), а другой — напрямую. http://127.0 .0.1:8888/stream/index.m3u8 необходимо открыть с помощью плеера. 4. Прослушиваем службу WebRTC на порту 8889; 5. Прослушиваем службу SRT на порту 8890; Затем проверьте фактическую потоковую передачу push и pull MediaMTX. Откройте окно MSYS, войдите в каталог исходного кода главы 10 книги «Практика разработки FFmpeg: от нулевых основ до короткого видео в Интернете» и выполните следующую команду компиляции.
gcc pushvideo.c -o pushvideo -I/usr/local/ffmpeg/include -L/usr/local/ffmpeg/lib -lavformat -lavdevice -lavfilter -lavcodec -lavutil -lswscale -lswresample -lpostproc -lm
После завершения компиляции выполните следующую команду, чтобы запустить тестовую программу, надеясь отправить 2018.mp4 на адрес отправки по умолчанию rtsp://127.0.0.1:8554/stream.
./pushvideo ../2018.mp4
Откройте другое окно MSYS, также войдите в каталог исходного кода главы 10 книги «Практика разработки FFmpeg: от нулевых основ к короткому видео в Интернете» и выполните следующую команду компиляции.
gcc pullvideo.c -o pullvideo -I/usr/local/ffmpeg/include -L/usr/local/ffmpeg/lib -I/usr/local/sdl2/include -L/usr/local/sdl2/lib -lsdl2 -lavformat -lavdevice -lavfilter -lavcodec -lavutil -lswscale -lswresample -lpostproc -lm
После завершения компиляции выполните следующую команду, чтобы запустить тестовую программу. Ожидается, что видеопоток будет получен с http://127.0.0.1:8888/stream/index.m3u8 и воспроизведен во всплывающем окне.
./pullvideo http://127.0.0.1:8888/stream/index.m3u8
Затем появилось окно SDL, воспроизводящее видеоэкран, полученное из службы HLS, что указывает на то, что MediaMTX правильно реализовал функцию пересылки потокового мультимедиа протокола HLS. Однако для вышеуказанного протокола HLS конкретная ситуация с воспроизведением более сложна. Например, http://127.0.0.1:8888/stream можно воспроизвести только через Chrome, а не через FireFox или Edge. Адрес http://127.0.0.1:8888/stream/index.m3u8 невозможно открыть с помощью проигрывателя Windows Media, и экран не будет отображаться, даже если воспроизводится через VLC. Предполагается, что pushvideo передает только видеопотоки, но не аудиопотоки, а механизм синхронизации аудио и видео VLC использует тесты аудио. Из-за отсутствия аудиопотоков видеопотоки негде калибровать, и изображение не может отображаться нормально.