В прошивке используется специально сформированный пакет ffmpeg-imx, который включает в себя помимо ffmpeg ещё и поддержку ffserver для тестовых задач. В пакет включены конфигурационные файлы и скрипты запуска для системы инициализации procd, которая используется в openwrt. Для настройки нужно использовать кофнигурационные файлы:
- /etc/config/ffmpeg
- /etc/config/ffserver
Для настройки доступны опции:
| Опция | Описание |
|---|---|
| in_device | Системное устройство захвата, обычно, /dev/video0. |
| framerate | Количество кадров в секунду, фреймрейт. Ввиду ограниченности производительности, лучше оставить значение 5. |
| resolution | Разрешение видео, ввиду ограниченности производительности, лучше оставить 720x480. Для видео с низкой задержкой нужно использовать 320x240 |
| vcodec | Кодек исходящего видео. |
| qscale_v | Параметр качества кодирования видеопотока. Оционален, можно не указывать при установке параметра b_v |
| b_v | Скорость исходящего видео-потока. Опционален, можно не указывать при установке параметра qscale_v |
| override_ffserver | Если ffmpeg используется с локальным ffserver, этот ключ желательно установить в '1', чтобы ffmpeg мог переопределять конфигурацию ffserver. При использовании p2p стриминга этот параметр можно опустить. |
| out_format | Указывает формат/протокол исходящего потока. Ключ '-f' для ffmpeg. Обычно, принимает значение 'ffm' или 'rtp' или 'mpegts' |
| remote | Адрес сервера назначения для трансляции, на этот адрес будет отсылаться поток. |
| enabled | Ключ, включающий автозапуск ffmpeg при включении устройства. |
На текущий момент, конфигурация оптимизирована, и изменять стоит только параметр remote
Для настройки доступны опции:
| Опция | Описание |
|---|---|
| enabled | Ключ, включающий автозапуск ffserver при включении устройства. |
| config | Путь к конфигурационному файлу ffserver, большинство опций в конфигурационном файле будут игнорироваться, если ffmpeg запущен с override_ffserver |
- Используйте конфигурацию ffmpeg на плате imx6ull
| config | ffmpeg | ffmpeg |
|---|---|---|
| option in_device | '/dev/video0' | |
| option framerate | '15' | |
| option resolution | '320x240' | |
| option vcodec | 'mpeg2video' | |
| option qscale_v | '5' | |
| option override_ffserver | '0' | |
| option out_format | 'mpegts' | |
| option remote | 'udp://192.168.1.100:5555' | |
| option enabled | '1' | |
| Важно, в параметре 'remote' нужно указать адрес и порт удалённой стороны (сервер), на которую будет отсылаться поток. |
- Для примера просмотра потока с минимальной буферизацией можно использовать ffplay на сервере. Например: $ ffplay -fflags -nobuffer -probesize 32 -sync ext -i udp://192.168.1.100:5555 Последним параметром выступает локальный адрес сервера, на который приходит поток. Другие параметры отвечают за низкую буферизацию потока перед выводом на экран.
В данной конфигурации возможно использование multicast стриминга, но в среде wifi это не рекомендуется, т.к. в беспроводных сетях для широковещательных и мультикаст пакетов используется самый низкий битрейт, что приведёт низкой производительности беспроводного сегмента сети. На некоторых роутерах возможно использовать более высокие битрейты, но это потребует тонкой настройки точек доступа.
Для пробного запуска стриминга выполните следующие шаги:
- Запустите на сервере: $ vlc -vvv -I dummy rtp://0.0.0.0:3333 --sout '#rtp{dst=0.0.0.0,port=3334,sdp=rtsp://0.0.0.0:8080/test.sdp}' Если vlc не установлен, то: $ sudo apt-get install vlc
- На плате imx6ull измените параметры override_ffserver (отключить, установить в "0"), remote (адрес удалённого сервера и порт на котором vlc слушает входящие подключения) и out_format (протокол rtp), чтоб конфигурационный файл выглядел следующим образом:
| config | ffmpeg | ffmpeg |
|---|---|---|
| option in_device | '/dev/video0' | |
| option framerate | '5' | |
| option resolution | '720x480' | |
| option vcodec | 'mpeg2video' | |
| option b_v | '192k' | |
| option override_ffserver | '0' | |
| option out_format | 'rtp' | |
| option remote | 'rtp://192.168.0.103:3333' | |
| option enabled | '1' | |
| После этого перезапустите ffmpeg на imx6ull командой |
/etc/init.d/ffmpeg restart
- Запустите воспроизведение, подключившись к серверу: $ vlc rtsp://127.0.0.1:8077/test.sdp Здесь 127.0.0.1 - адрес rtsp-сервера, запущенного на первом шаге. Т.е. подразумевается, что воспроизведение вы запускаете на той же машине, на которой запущен сервер.