Потокове H264 за допомогою Logitech C920


13

У мене веб-камера Logitech C920. Він має можливість безпосередньо кодувати відео в H264.

Я хочу відтворити те, що було зроблено з Beaglebone, але використовуючи Raspberry Pi: надіслати потік H264 в мережу . Raspberry Pi є лише тут, щоб пакетувати потік в RTP, стиснення відео робиться самою веб-камерою. Режим H264 застосовується за допомогою video4linux.

Поки, і якщо я використовую звичайний комп'ютер з останньою версією Ubuntu, він працює з використанням VLC в якості сервера або GStreamer. Наприклад, якщо я запускаю на Raspberry Pi сервер VLC за допомогою команди:

cvlc --sout=#rtp{sdp=rtsp://:8554/test} 'v4l2:///dev/video0:chroma=H264:width=800:height=600:fps=30'

... і тоді, якщо я прочитаю потік з VLC на іншому комп'ютері, все в порядку.

Однак якщо я використовую малину Pi для надсилання відеопотоку, результат буде досить поганим. Багато сміття на зображенні, як тільки щось рухається. Клавіші зображення добре приймаються кожні 10 секунд, але тим часом це недостатньо добре, порівняно з потоком із звичайного комп’ютера.

Я також спробував описаний метод для beaglebone з наданою утилітою "захоплення" : нормально, якщо я перетікаю з реального комп'ютера, таку ж проблему зі сміттям, якщо я надходжу з Raspberry Pi.

Це не мережева проблема: я робив кілька перевірок у мережі за допомогою Wireshark та статистики VLC, втрати пакетів у мене немає. Я намагався з Raspbian і Arch Linux для Raspi (gstreamer 0.10 в raspbian, gstreamer 1.0 в Arch Linux).

Я не знаю, чи це доречно чи ні, але я також перевірив версію Raspbian для підтримки soft float. Спочатку слід оновити, щоб використовувати ядро ​​3.2; але та сама проблема, у відео є сміття.

Будь-яка ідея, що я можу зробити для підвищення якості відео?


Спробуйте зменшити частоту кадрів. Процесор процесора rPi дуже поганий, тому я гадаю, що передавати зображення 800х600 при 30FPS - це занадто багато. Лише нова плата камери rPI, яка підключена через роз'єм MIPI / CIS (замість USB), передає 1080p зі швидкістю 15-30 FPS.
Маттіас

Це не FPS. Pi може обробляти HD з частотою 60 кадрів в секунду без проблем за допомогою модуля Pi Camera. Якщо камера Logitech надішле відео H264, воно вже закодовано, і Pi потрібно повторно передавати пакети .., на що вона цілком здатна. Насправді він може ретрансляцію до 6 потоків HD @ 25FPS, перш ніж він збільшиться. Це повинен бути драйвер V4L, що псує пакети
Piotr Kula

Я знаю, що це стара нитка, але ти нарешті знайшов щось, що працює? Я намагаюся зробити щось подібне і застряг
Айфіт

Я використовував Біглбон, і він працював краще. Проблема була через поганий драйвер USB для RaspberryPi в Raspbian. Наскільки я пам’ятаю, пізніше я тестував ту саму систему з пізнішою версією Raspbian, і у мене було менше сміття. Я, можливо, зробив rpi-оновлення (як сказано в одній з відповідей), але я не пам’ятаю добре. Але що впевнене, що ефективність була кращою після використання оновленої прошивки / операційної системи.
Вінсент Хірібаррен

Вінсент, я отримую помилку "не вдається відкрити v4l2 url". Ця команда зараз застаріла?
даланміллер

Відповіді:


6

У мене була така ж проблема, я знайшов цю тему під час пошуку апаратного кодера, а не для проблем c920.

Тим не менш, виконайте оновлення прошивки для малинового пі, і сміття не повинно бути

$> sudo rpi-update

Я сам знайшов рішення тут: http://wiki.matthiasbock.net/index.php/Logitech_C920,_streaming_H.264#Raspberry_Pi


Щоб закрити це питання, я приймаю цю відповідь. Проблема полягала в тому, що через пошкоджений драйвер USB виникла певна втрата пакету в USB-комунікації. Оновлена ​​система / мікропрограмне забезпечення повинно зробити це.
Вінсент Хірібаррен

2

Ви можете спробувати використовувати FFMPEG. Але проблема полягає не у використанні версії сховищ, оскільки вона застаріла. Є роздвоєна версія, яка працює дуже добре.

Вам доведеться скласти його, який займає 5 або більше годин, або завантажити попередньо складений двійковий файл.

Потім ви можете передавати дані з драйвера V4L на FFMPEG з цими налаштуваннями. Де -i "fifo"слід просто -iкапутувати трубопровідний потік, і -fвам потрібно буде двічі перевірити, як вивести його H264. FLV перепаковує його в FLV, який можна грати з HTML-програвачами.

ffmpeg -y \  
  -f h264 \  
  -i "$fifo" \  
  -c:v copy \  
  -map 0:0 \  
  -f flv "$urllocal"   

або, наприклад, я виявив, що V4L націлює безпосередньо, але у вас має бути камера, /dev/video* де * є 1або більше ...

ffmpeg -f video4linux2 -r 25 -s 640x480 -i /dev/video0 out.avi

-fпозначає формат для виводу. Це не означає , що вона буде перекодувати його як H264 в FLV просто отримує загорнутий в форматі FLV. потім змініть адресу клієнта VLC-програвача. наприклад-f mpegts udp:192.168.1.19:1234

Здається, VLC не дуже добре працює на Pi. У мене дуже мало успіху, натиснувши модуль Pi cmaera на свій ПК за допомогою UDP. Це працювало, але воно не було стабільним.

Ви також можете подивитися встановити nginx за допомогою модуля rtmp, який працює частуванням. Подивіться цей посібник, але вам потрібно буде трохи змінити налаштування. Потім ви підключите плеєр VLC до потоку nginx-rtmp, і він буде працювати як шарм.


1
Яка роздвоєна версія є тією, яка добре працює?
Брайан

1

Це, здається, працює для мене щонайменше ... cvlc v4l2:// :v4l2-dev=/dev/video0 :v4l2-width=640 :v4l2-height=480 --sout="#transcode{vcodec=h264,vb=800,scale=1,acodec=mp4a,ab=128,channels=2,samplerate=44100}:rtp{sdp=rtsp://:8554/live.ts}" -I dummy


0

Спробуйте з більшим буфером для клієнта, який відображає відео. Для мене різка різниця між буфером 1000 мс і буфером 200 мс. Буфер 5000 мс виглядає краще, ніж буфер 1000 мс.

: мережеве кешування = 2000


Він повинен працювати з кешуванням 0 з незвичайним тремтінням в LAN.Я змусив модуль камери Pi працювати таким чином без проблем.
Piotr Kula

0

Я розмістив можливе рішення на малиновому форумі, використовуючи легкий RTSP-сервер на базі live555, який захоплює H264 з драйвера V4L2. Він доступний від github h264_v4l2_rtspserver

Це було зроблено для розпікамери, але вона повинна працювати з будь-яким пристроєм V4L2, який забезпечує H264.


-1

Якщо я добре зрозумів вашу ситуацію, ви хочете, щоб Raspberry перекодував відео на H264? Я думаю, що тому ви отримуєте погану ефективність, оскільки VLC використовує програмне кодування, а Raspberryis не є потужним для цього завдання.

Я б запропонував спробувати з Gstreamer та gst-omxплагінами . Є елемент для апаратного кодування відео, який би зробив гарний сервер з вашої Raspberry.


1
За його словами, камера Logitech вже забезпечує H.264. Отже, rPi транспортує лише кадри, але не виконує кодування.
Маттіас

Він не перекодує. Просто ретрансляція даних. Так як в ньому використовується потік безпосередньо.
Пьотр Кула
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.