Некоторое время назад появилась необходимость транслировать на Youtube видео и звуковые потоки с сетевых камер, вебкамер, а также с рабочих столов. Найти удобное приложение, которое позволяло бы добиться подобной функциональности мне не удалось. Поэтому написал его с помощью flask. Для транслирования потоков используется ffmpeg.
Скрипты запуска и остановки трансляций сделаны на bash.
Был создан простейший шаблон страницы для запуска и остановки камер. Написаны скрипты для запуска и остановки трансляций. Сейчас приложение позволяет транслировать звук и видео с: - Сетевых видеокамер - Рабочих столов Linux - Web камер на компьютерах с Linux
Китайские сетевые камеры Grandstream GXV3651 выдают сильно искаженный звук. Данная проблема была решена с помощью дополнительного источника звука. Сначала я попробовал получать аудиопоток с роутеров с USB звуковой карты, передавая их с помощью pulseaudio и совмещая его с видеопотоком.
Однако, так как использованные роутеры tp-link 1043nd не всегда справлялись с данной нагрузкой, то были куплены raspberry pi, которые отлично справляются с задачей передачи звука.
На компьютерах для передачи звука необходимо настроить pulseaudio, чтобы передавать сетевой поток по сети на сервер. На сервере ffmpeg получает поток от pulseaudio и совмещает его с видеопотоком от сетевых камер. Несмотря на свою сложность, такая схема оказалась довольно надежной, а качество звука стало очень хорошим. Отмечу, что для получения стабильного звука с роутеров tl-wr1043nd от USB звуковых карт нужно устанавливать большой буфер в pulseaudio.
В моем случае я задавал default-fragment-size-msec = 1024
Исходные когды этого простого, но очень полезного приложения выложены на Github https://github.com/litvinovg/videoapp