2016-11-19 5 views
1

У меня есть GStreamer трубопровод - работает на этой среде:uvch264src глохнет при захвате от Logitech C920 в темноте

  • Raspberry Pi 3
  • Класс 10 С SANDISK 8GB SDCARD
  • Raspbian Jessie, все обновленный
  • Logitech C920 USB 2 webcam
  • Gstreamer 1.8 скомпилирован из источника
  • Нет дополнительных периферийных устройств или устройств USB
  • 2A Apple USB Power Supply (IPad зарядное устройство)
  • Испытан как с и без концентратора USB для подключения C920

Он захватывает H264 кадры ([email protected]). Мой конвейер берет на выходе код C9220 с кодировкой H264, и его тройники. Он также захватывает (alsa) аудио C920, сжимает его до AAC, а tee - это. Одна нога обоих тройников идет прямо в мультиплексор FLV, а затем на диск для резервного копирования. Вторая часть тройника получает декодирование (с использованием OpenMax), затем пересчитывается с более низким битрейтом (опять же, OpenMax) и, наконец, FLV мультиплексируется и переносится на RTMP-сервер для просмотра в реальном времени.

В конечном счете, результат выглядит в основном так:

enter image description here

CPU находится на уровне около 50% из 400% (четырехъядерный помню :))

Теперь самое интересное .. .

У меня было все это - отлично. Затем я закрыл все, и получил награду. Я вернулся к нему вечером, загрузил код ... и он длился около 10 секунд, затем трубопровод застопорился. Он не останавливался, не останавливался или не заблуждался - он просто застопорился - пакеты перестали записываться на диск и поток.

Были некоторые предупреждения и ошибки, но я видел это раньше, и они не имели никакого влияния на результирующий поток, но теперь, по какой-то причине - они были терминал для здоровья трубопровода:

0:01:31.219560984 4075 0x1445400 WARN   audiobasesrc gstaudiobasesrc.c:864:gst_audio_base_src_create:<alsasrc0> create DISCONT of 708160 samples at sample 2904320 
0:01:31.219736087 4075 0x1445400 WARN   audiobasesrc gstaudiobasesrc.c:869:gst_audio_base_src_create:<alsasrc0> warning: Can't record audio fast enough 
0:01:31.219774941 4075 0x1445400 WARN   audiobasesrc gstaudiobasesrc.c:869:gst_audio_base_src_create:<alsasrc0> warning: Dropped 708160 samples. This is most likely because downstream can't keep up and is consuming samples too slowly. 
WARNING: from element /GstPipeline:pipeline0/GstAlsaSrc:alsasrc0: Can't record audio fast enough 
Additional debug info: 
gstaudiobasesrc.c(869): gst_audio_base_src_create(): /GstPipeline:pipeline0/GstAlsaSrc:alsasrc0: 
Dropped 708160 samples. This is most likely because downstream can't keep up and is consuming samples too slowly. 

Итак, вытащив оставшиеся волосы, я собрал их и назвал ночь. Сегодня утром я снова схватил его, готовый начать заново. Я загружаю код и ... он снова работает ... нет икоты! Что тут происходит???

Единственное, что изменилось между тем, что оно работает, а не работает, а затем снова работает - было время суток!

Тогда у меня возникла идея. Я запустил код на несколько минут. Никаких икота, все хорошо ... тогда я положил камеру в сумку для ноутбука, чтобы она ничего не увидела. Через 10 секунд трубопровод застопорился !!!

Я упростил по трубопроводу только файлы (удалили элементы tee, OMX и rtmpsink) и повторно выполнил тесты. На этот раз он не полностью остановился, но я получил предупреждения «Can not record audio достаточно быстро», и в результате у файла были значительные отключения звука.

Так что, похоже, что Logitech C920, когда в затемненной окружающей среде, как-будто задыхается.

Что-то еще, что я заметил, не уверен, что это связано ... но в моих записях у меня всегда был некоторый колебательный высокочастотный шум (около 16 кГц). Если я держу камеру за ухо, я могу услышать тот же самый тон, который испускает камера. Если я закрываю объектив на камере, звук останавливается. Если я отключу автофокус на камере, и установите абсолютный уровень фокусировки на «0», тогда шум почти тоже уйдет. Я знаю, что это не пустая камера, потому что у меня около 6 из них, и все они ведут себя одинаково. Я также знаю, что это не плохой Raspberry Pi, потому что я попробовал это на все эти

  • 3 * Raspberry Pi 3
  • 1 * Raspberry Pi 2 B +
  • 2 * Raspberry Pi B +

Может ли кто-нибудь пролить свет на это?

=====================================

Дополнительные примечания:

  • Захват mjpeg (не активирует кодер h264 на камере) предотвращает слышимый шум, исходящий от камеры. Указывает, что шум вызван DSP камеры.
  • Захват mpjeg делает что-то интересное ... в результате видеофайла, похоже, выпало много кадров за время, когда камера была в темноте ... поэтому, когда она снова светится, видео впереди звука несколько секунд.

ответ

0

У меня возникли аналогичные проблемы с Logitech C920 с использованием GStreamer и uvch264src.

Проблема, по-видимому, в частоте кадров. Когда будет темно, камера снизит частоту кадров и удлинит экспозицию. Это приводит к лучшему освещению кадров, но изменение действительно смущает GStreamer. Я попытался установить fixed-framerate = true и framerate = 30/1, но это не помогло. Единственное, что работало, это отключить функцию автоматической экспозиции камеры.

v4l2-CTL -d/DEV/video0 -c exposure_auto_priority = 0

Это не идеально (особенно если вы имеете дело с переменными условиями освещения), но, по крайней мере, поток не виснет и аудио и видео синхронизируется.

2

Существует исправление для этой версии до последней версии 1.12 Gstreamer, которая заставляет кадры в буфер, даже когда камера находится на очень длинных (черных) экспозициях. У нас была аналогичная проблема, и был предложен патч. См. Сайт Gstreamer freedesktop. Возможно, вам придется перекомпилировать gstreamer-plugins-bad из источника или подождать, пока процесс debian экспериментальной упаковки не обработает его. Файл, который вы хотите, - libgstuvch264.so, а uograde - mjpeg_demux.c в подпапке sys/uvch264src. Примечание. Исправление составляет всего 5-6 дней.

+0

Привет, Марк, вы уверены в этом? Отчет о проблеме относится к потокам H264, а не к mjpeg. Можете ли вы предоставить ссылку на патч? Я не вижу здесь ничего важного: https://github.com/GStreamer/gst-plugins-bad/commits/1.12/sys/uvch264/gstuvch264_mjpgdemux.c – Adam

+0

Определенный вопрос о проблеме и местоположении - несмотря на то, что он говорит mjpeg_demux.c он обрабатывает все потоки камеры. Нужно дважды проверить, прибыло ли это. Будет ли исправлять патч здесь, если нет, но лучше, если он поступит через команду Gstreamer. – Markw63

+0

https: // github.com/GStreamer/gst-plugins-bad/tree/master/sys/uvch264/gstuvch264_mjpgdemux.c имеет патч - если вы посмотрите на строки 662 примерно на 30 строк, вы увидите эффект на h264. Не уверен, что ваше зеркало обновлено с главной ветвью (совершите 7 дней назад). – Markw63