Я отримав Pi B + та Pi-камеру, і зараз я намагаюся знайти найбільш ефективну (низький процесор) та конфігурацію з найнижчою затримкою для передачі відео, закодованого H.264, з камери на домашній сервер.
Я читав наступне:
(Усі посилання використовують gstreamer-1.0 від deb http://vontaene.de/raspbian-updates/ . main
.)
Протягом останніх років було зроблено багато з цього приводу.
Спочатку нам довелося передати висновок raspivid
в gst-launch-1.0
(див. Посилання 1).
Тоді (посилання 2) був створений офіційний драйвер V4L2, який тепер є стандартним, і він дозволяє безпосередньо отримувати дані без труби, використовуючи просто gstreamer (див. Особливість повідомлення від towolf »Понеділок 07.12.2013 15:34 за посиланням 2):
Відправник (Pi): gst-launch-1.0 -e v4l2src do-timestamp=true ! video/x-h264,width=640,height=480,framerate=30/1 ! h264parse ! rtph264pay config-interval=1 ! gdppay ! udpsink host=192.168.178.20 port=5000
Одержувач: gst-launch-1.0 -v udpsrc port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! fpsdisplaysink sync=false text-overlay=false
Якщо я правильно розумію, обидва способи використовують графічний процесор для декодування H264, але останній трохи ефективніший, оскільки йому не потрібно проходити через ядро в інший раз, оскільки між процесами немає жодної труби.
Зараз у мене є питання з цього приводу.
Це останній все-таки останній спосіб ефективного отримання H264 з камери? Я читав про те
gst-omx
, що дозволяє набороти трубопроводи gstreamer... video/x-raw ! omxh264enc ! ...
. Це робить щось інше, ніж просто використанняvideo/x-h264
, чи може бути навіть більш ефективним? Яка різниця?Як дізнатися, який плагін для кодування gstreamer насправді використовується, коли я використовую
video/x-h264 ...
конвеєр? Це, здається, просто вказує потрібний мені формат порівняно з іншими частинами конвеєра, де я чітко називаю (код) компонент (якh264parse
абоfpsdisplaysink
).У цій відповіді на посилання 1 Мікаел Лепісте згадує "Я видалив один непотрібний фільтр із потокової сторони" , це означає, що він вирізав
gdppay
іgdpdepay
. Що вони роблять? Для чого вони потрібні? Чи можу я їх справді зняти?Він також зазначає, що, вказавши
caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96"
параметри дляudpsrc
приймальної сторони, він може запустити / відновити потокове передачу в середині потоку. Чого досягають ці шапки, чому ці конкретні варіанти, де я можу прочитати більше про них?Коли я роблю те, що пропонується у питаннях 3 та 4 (додаючи
caps
, відміняючиgdppay
таgdpdepay
), то моя затримка відео стає значно гіршою (і, здається, накопичується, затримка збільшується з часом, і через кілька хвилин відео припиняється)! Чому це могло бути? Я хотів би отримати затримку, яку я отримав оригінальною командою, але також маю особливість мати можливість приєднатися до потоку в будь-який час.Я читав, що RTSP + RTP зазвичай використовують комбінацію TCP та UDP: TCP для керуючих повідомлень та інших речей, які не повинні втрачатися, та UDP для фактичної передачі відеоданих. У налаштуваннях, наведених вище, я фактично це використовую, чи я просто використовую лише UDP? Для мене трохи непрозоро, чи дбає про це gstreamer чи ні.
Буду вдячний за будь-яку відповідь навіть на одне з цих питань!
cat file | grep ...
замість цього grep ... file
. Труба додає ще один шар копіювання до ядра та з нього, що легко виміряти, особливо на пристроях із низькою пропускною здатністю пам'яті. Якщо gstreamer може читати з файлу пристрою прямо, чому б не використати це? Щодо вашої raspivid | cvlc
пропозиції: я використовував це перед тим, як перейти на рішення на базі gstreamer, воно має до 3 секунд більше затримки, ніж gstreamer (не знаю чому).
cvlc
використовує ~ 45%, але просто пробіг по трубі при такій швидкості передачі даних (маючи на увазі, труба не сповільнює її ) ледве перемістить голку, я думаю. Як <5% Це не зовсім незначно, якщо ви хочете зробити це якомога ефективніше, звичайно ...
raspivid | cvlc
і це 40-50%. Люди можуть краще відповісти на питання, яке кидає виклик їм покращити конкретні показники. Зараз ви багато запитуєте, чому, не пояснюючи, чому кожен важливий.
|
створює будь-яку проблему в цьому контексті, - це неймовірний фрагмент BS. Ви пробували будь-якіraspivid | cvlc
методи? У мене не було камери дуже довго або багато часу, щоб грати з нею, але використання її для створення http-потоку (видно на Linux на іншому кінці w /vlc
), здається, працює нормально.