Как запустить трансляцию видео и аудио из файла mp4 в виртуальную веб камеру на Linux?
Нужно создать виртуальную камеру, и пустить на нее поток из простого mp4 файла.
Знаю это можно с помощью OBS Studio - но у меня довольно скромная виртуалка 2CPU*4ГБ, ubuntu 22.04, получается где-то 10 FPS при стандартных настройках.
Попробовал с помощью v4l2loopback и ffmpeg - прекрасно дает поток из mp4 файла с FPS ~30, то что нужно.
Вопрос - как еще и аудио транслировать, с помощью чего создать виртуальный микрофон и одновременно с v4l2loopback транслировать?
Или может как-то настроить OBS чтобы повысить FPS? Наверное виртуалка 2 ядра 4 гига маловато?
Нет, gstreamer не создает никаких устройств, как и в случае v4l2loopback.
Их нужно создавать самостоятельно.
Gstreamer может взять файл/поток/сетевой-поток, один-два или мтого, разделить или соединить видео-аудио, смикшировать и выдать это куда-то еще. Например взять mp4, разделить видео и аудио, отдельно с каждым потоком аудио и видео как-то преобразовать (дублировать и еще раз преобразовать) и выдать на устройство/сеть/файл/протокол.
Другими словами - берем mp4, получаем отдельно аудио и видео, видео публикуем в v4l2, аудио в jack.
Как я понимаю, с v4l2loopback Вы разобрались.
Для получения аудио можно использовать три вещи:
- alsaloopback - не рекомендую, так как альса блокирует вход-выход только для одного потока-программы
- jack (jackd) - аудиосервер, рекомендую, если будете это делать профессионально, но придется много почитать, зато и удобств в обращениии со звуком очень много, как и с куммутацией звука
- pulseaudio (pipewire) - аудиосервер (да-да тоже), обычно стоит из коробки в вашем любимом дистрибутиве!
PS. По хорошему, лучше с gstreamer работать не через gst-launch (что ничуть не умаляет его для потестировать или по-быстрому сделать пайплайн), а запилить маленькую программку, например на питоне с отловом ошибок шины gstreamer и перезапуском вслучае чего.