Вместо себя в конференции крутим видео или показываем статическую фотографию
Не всегда хочется включать камеру во время конференции, придумалось поискать как можно показывать видео или статическую картинку. Средствами ОС или браузера из коробки это не делается. Нашёл статью и, собственно, модуль ядра для создания виртуальной камеры, которая браузером определяется как обычная камера 😄 Ниже представлен скрипт с подробными комментариями. Единственным аргументом к нему служит путь к файлу или изображению, которое должно транслироваться в потоке.
#!/usr/bin/env sh
set -e
# label for the new webcam as it will be seen in browserLABEL="VirtualCam #0"# module insertion in case if it was not inserted during this bootif ! lsmod | grep -qE '^v4l2loopback';then# camera is being created during the module loading sudo modprobe v4l2loopback devices=1exclusive_caps=1max_buffers=2card_label="$LABEL"# wait for a while to finish module initialization sleep 1fi# path to media fileF="${1:?File is not passed}"# getting path to newly created camera deviceDEV="$(v4l2-ctl --list-devices 2>/dev/null | grep -A1 "$LABEL"| grep -oE '/dev/video[0-9]+')"if[ ! -f "$F"];then# check in case if media file path does not existsecho"error: file $F does not exists" >&2exit1fi# get file type and use proper streaming commandcase"$(file --mime-type --brief "$F"| cut -d/ -f1)" in
video)# in case if file is video ffmpeg -re -i "$F" -f v4l2 -vcodec rawvideo -pix_fmt yuv420p "$DEV";; image)# in case if file is picture ffmpeg -loop 1 -re -i "$F" -f v4l2 -vcodec rawvideo -pix_fmt yuv420p "$DEV";; *)# in case if file is something elseecho'error: unknown mime type' >&2exit2;;esac
Как итог, получилось стримить Rick Ashley - Never Gonna Give You Up.
Из недостатков стоит упомянуть потребление почти целого ядра ffmpeg-ом. Также, мы, понятное дело, передаём только картинку, без звука.