Как исправить проблемы с записью видео с веб-камеры в Gstreamer?

Всем привет!
Я использую старую веб камеру, чтобы сделать видеонаблюдение за входной дверью. Камера с микрофоном подключена к Raspberry Pi по USB, на котором пишеться видео со звуком с помощью следующего pipeline Gstreamer:
gst-launch-1.0 -e v4l2src do-timestamp=true \
	! video/x-raw,format=YV12,width=640,height=480,framerate=5/1 \
	! videoconvert ! queue ! videorate ! videoflip method=clockwise \
	! clockoverlay halignment=left valignment=bottom time-format="%Y/%m/%d %H:%M:%S" font-desc="Sans 24" \
	! omxh264enc target-bitrate=400000 control-rate=variable \
	! video/x-h264,stream-format=byte-stream,framerate=5/1 ! h264parse \
	! queue ! mux. alsasrc device=plughw:0,0 do-timestamp=true \
	! lamemp3enc target=0 bitrate=128 mono=true \
	! queue leaky=2 max-size-buffers=0 max-size-time=0 max-size-bytes=0 \
	! mux. matroskamux name=mux ! queue \
	! filesink location=camera`date -Iseconds`.mkv >> recorder.log 2>&1

Использую Gstreamer из-за аппаратного кодирования (omxh264enc), чтобы не перегружать процессор малины. В Gstreamer только начал разбираться, советы по pipeline-у приветствуются. Pipeline запущен в бесконечном цикле, по крону перезапускаю его раз в час, чтобы начать новый файл. Всё работает, но есть следующие проблемы, по которым и хочу спросить совета.
Проблемы с контейнерами. Я так и не смог выбрать подходящий контейнер для видео. Сейчас видео сохраняется в mkv, проблема в том, что первый кадр всегда зелёный, и зелень продолжается первые 10 секунд видео, ЧЯДНТ? Также видео довольно туго проигрывается, при перемотке на середину файла сначала включается звук, а потом видео "догоняет" через несколько секунд. Как это исправить? Наверное, это как-то связно с ключевыми кадрами, но я в этом плохо разбираюсь.
Пробовал писать в mp4, но в этом контейнере индекс в конце файла, то есть при аварийном завершении записи получаем поврежденный файл, который не проигрывается.
Ещё пробовал писать в avi, но опять же есть проблема с первым кадром (изображение как бы смещено на половину вверх) и присутствует сильная рассинхронизация аудио и видео, после окончания часового видео, остаётся секунд 20 звука, который воспроизводиться на застывшем последнем кадре. Я не придумал как это исправить.
Периодическое шипение вместо звука. На записях периодически есть шипение перекрывающее звук, которое само пропадает через случайные промежутки времени, и нормальный звук возвращается. Как это исправить? Это из-за leaky queue?
Странные ошибки в dmesg. Появляются в разных комбинациях при записи, очень много повторяются cannot get freq at ep 0x86. Не смог понять из-за чего они, и связаны ли они с вышеуказанными проблемами.
usb 1-1.5: 1:1: cannot get freq at ep 0x5
usb 1-1.5: 1:1: cannot set freq 48000 to ep 0x5
usb 1-1.5: 2:1: cannot get freq at ep 0x86
usb 1-1.5: 2:1: cannot set freq 48000 to ep 0x86
uvcvideo: Failed to resubmit video URB (-1).

PS: GStreamer 1.4.4 из репозиториев, Raspbian Jessie.
PPS: пытался использовать motion и писать только при обнаружении движения, но на Raspberry Pi приемлемый фреймрейт получается только при низком разрешении, и в добавок Raspberry Pi перегревается при длительных периодах с движением.
  • Вопрос задан
  • 858 просмотров
Пригласить эксперта
Ответы на вопрос 1
@kgbplus
Первый кадр каким образом зеленый? Просто зеленое поле или нормальное изображение, но с сильной примесью зелени? Если второе - то это камера не успевает настроится, первый кадры обязательно необходимо отбрасывать. Контейнер тут не причем. raspistill со встроенной камерой вообще по умолчанию дает на настройку камере 5 секунд, причем я экспериментировал - за 3 секунды камера действительно в некоторых условиях настроиться не успевает и дает как раз зеленую картинку.
Ошибка в dmesg легко гуглится.
This is a known bug, unfortunately not fully resolved.
For more details and possible workarounds see
https://bugs.launchpad.net/ubuntu/+source/linux/+b...
https://bugs.launchpad.net/ubuntu/+source/linux/+b...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы