У меня есть 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-сервер для просмотра в реальном времени.
В конечном счете, результат выглядит в основном так:
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 делает что-то интересное ... в результате видеофайла, похоже, выпало много кадров за время, когда камера была в темноте ... поэтому, когда она снова светится, видео впереди звука несколько секунд.
Привет, Марк, вы уверены в этом? Отчет о проблеме относится к потокам H264, а не к mjpeg. Можете ли вы предоставить ссылку на патч? Я не вижу здесь ничего важного: https://github.com/GStreamer/gst-plugins-bad/commits/1.12/sys/uvch264/gstuvch264_mjpgdemux.c – Adam
Определенный вопрос о проблеме и местоположении - несмотря на то, что он говорит mjpeg_demux.c он обрабатывает все потоки камеры. Нужно дважды проверить, прибыло ли это. Будет ли исправлять патч здесь, если нет, но лучше, если он поступит через команду Gstreamer. – Markw63
https: // github.com/GStreamer/gst-plugins-bad/tree/master/sys/uvch264/gstuvch264_mjpgdemux.c имеет патч - если вы посмотрите на строки 662 примерно на 30 строк, вы увидите эффект на h264. Не уверен, что ваше зеркало обновлено с главной ветвью (совершите 7 дней назад). – Markw63