Streaming H264 dengan Logitech C920

13

Saya memiliki webcam C920 logitech. Ini memiliki kemampuan untuk langsung menyandikan video dalam H264.

Saya ingin mereproduksi apa yang dilakukan dengan Beaglebone, tetapi menggunakan Raspberry Pi: kirim aliran H264 ke jaringan . Raspberry Pi kemudian hanya di sini untuk mengemas aliran dalam RTP, kompresi video dilakukan oleh webcam itu sendiri. Mode H264 diberlakukan menggunakan video4linux.

Sejauh ini, dan jika saya menggunakan komputer biasa dengan versi terbaru Ubuntu, ia berfungsi menggunakan VLC sebagai server atau GStreamer. Sebagai contoh, jika saya menjalankan Raspberry Pi server VLC menggunakan perintah:

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

... dan kemudian jika saya membaca aliran dengan VLC di komputer lain, semuanya benar.

Namun, jika saya menggunakan raspberry Pi untuk mengirim streaming video, hasilnya cukup buruk. Banyak sampah di gambar segera setelah sesuatu bergerak. Tombol gambar diterima dengan baik setiap 10 detik, tetapi sementara itu, itu tidak cukup baik dibandingkan dengan aliran dari komputer biasa.

Saya juga mencoba metode yang dijelaskan untuk beaglebone dengan utilitas "tangkap" yang disediakan : ok jika saya streaming dari komputer nyata, masalah sampah yang sama jika saya streaming dari Raspberry Pi.

Ini bukan masalah jaringan: Saya melakukan beberapa pengecekan jaringan dengan Wireshark dan statistik VLC, saya tidak punya paket loss. Saya mencoba dengan Raspbian, dan Arch Linux untuk Raspi (gstreamer 0.10 di raspbian, gstreamer 1.0 di Arch Linux).

Saya tidak tahu apakah itu relevan atau tidak, tetapi saya juga menguji dengan versi dukungan soft float dari Raspbian. Pembaruan harus dilakukan terlebih dahulu untuk menggunakan kernel 3.2; tetapi masalah yang sama, video memiliki beberapa sampah.

Adakah yang bisa saya lakukan untuk meningkatkan kualitas video?

Vincent Hiribarren
sumber
Coba kurangi frame rate. CPU dari rPi sangat buruk, jadi saya rasa mentransmisikan gambar 800x600 pada 30FPS terlalu banyak. Hanya papan kamera rPI baru yang terhubung melalui konektor MIPI / CIS (bukan USB) yang mengalirkan 1080p pada 15-30 FPS.
Matthias
Ini bukan FPS. Pi dapat menangani HD pada 60FPS tanpa masalah menggunakan modul Kamera Pi. Jika kamera Logitech mengirim video H264 yang sudah dikodekan dan Pi perlu kembali paket-paket .. yang sepenuhnya mampu dilakukan. Bahkan itu bisa siaran ulang hingga 6 HD @ 25FPS stream sebelum maksimal. Itu pasti driver V4L yang merusak paket
Piotr Kula
Saya tahu ini adalah utas lama, tetapi apakah Anda akhirnya menemukan sesuatu yang berfungsi? Saya mencoba melakukan sesuatu yang serupa dan macet
Ajith
Saya menggunakan Beaglebone dan bekerja lebih baik. Masalahnya adalah karena driver USB yang buruk untuk RaspberryPi di Raspbian. Sejauh yang saya ingat, saya kemudian menguji sistem yang sama dengan versi Raspbian kemudian dan saya memiliki lebih sedikit sampah. Saya mungkin melakukan pembaruan-rpi (seperti yang dikatakan dalam salah satu jawaban), tetapi saya tidak ingat dengan baik. Tetapi yang pasti kinerjanya lebih baik setelah menggunakan firmware / sistem operasi yang diperbarui.
Vincent Hiribarren
Vincent, saya mendapatkan kesalahan 'tidak dapat membuka url v4l2'. Apakah perintah ini sudah ketinggalan zaman?
dalanmiller

Jawaban:

5

Saya memiliki masalah yang sama, menemukan utas ini saat mencari encoder perangkat keras, bukan untuk masalah c920.

Namun demikian, jalankan pembaruan firmware untuk raspberry pi dan sampahnya harus hilang

$> sudo rpi-perbarui

Saya sendiri menemukan solusinya di sini: http://wiki.matthiasbock.net/index.php/Logitech_C920,_streaming_H.264#Raspberry_Pi

Steffen
sumber
Untuk menutup pertanyaan ini, saya menerima jawaban itu. Masalahnya adalah karena driver USB yang rusak, ada beberapa paket yang hilang dalam komunikasi USB. Sistem / firmware yang diperbarui harus melakukan trik.
Vincent Hiribarren
2

Anda dapat mencoba dan menggunakan FFMPEG. Tetapi masalahnya adalah tidak menggunakan versi repositori karena sudah ketinggalan jaman. Ada versi bercabang yang berfungsi sangat baik.

Anda harus mengompilasinya yang membutuhkan waktu sekitar 5 jam atau mengunduh biner yang telah dikompilasi.

Anda kemudian dapat menyalurkan data dari driver V4L ke FFMPEG dengan pengaturan ini. Di mana -i "fifo"seharusnya hanya -iuntuk memotong aliran pipa dan -fAnda akan perlu memeriksa bagaimana cara outputnya H264. FLV mengemasnya menjadi FLV yang dapat dimainkan dengan pemutar HTML.

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

atau exmaple saya menemukan bahwa menargetkan V4L secara langsung tetapi oyu harus memiliki kamera di /dev/video* mana * berada 1atau lebih ...

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

yang -fmenunjukkan format untuk output masuk. Ini tidak berarti itu akan transcode seperti H264 ke FLV hanya akan dibungkus dalam format FLV. kemudian ubah alamat ke pemutar VLC klien Anda. sebagai contoh-f mpegts udp:192.168.1.19:1234

VLC sepertinya tidak bekerja dengan baik pada Pi. Saya sangat sedikit berhasil mendorong modul Pi cmaera ke PC saya menggunakan UDP. Itu bekerja tetapi tidak stabil.

Anda juga dapat melihat menginstal nginx dengan modul rtmp yang berfungsi dengan baik. Lihatlah panduan ini tetapi Anda harus sedikit mengubah pengaturan. Anda kemudian menghubungkan pemutar VLC Anda ke aliran nginx-rtmp dan itu akan bekerja seperti pesona.

Piotr Kula
sumber
1
Versi bercabang mana yang berfungsi dengan baik?
Brian
1

Ini sepertinya bekerja untuk saya @ setidaknya ... 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

Philippe Gachoud
sumber
0

Coba dengan buffer yang lebih besar pada klien yang menampilkan video. Bagi saya ada perbedaan dramatis antara 1000ms buffer dan 200ms buffer. Buffer 5000ms terlihat lebih baik daripada buffer 1000 ms.

: caching jaringan = 2000

Odie
sumber
Ini harus bekerja dengan 0 caching dengan jittering aneh pada LAN. Saya punya modul kamera Pi untuk bekerja seperti itu tanpa masalah.
Piotr Kula
0

Saya memposting solusi yang mungkin di forum raspberry menggunakan server RTSP ringan berdasarkan live555 yang menangkap H264 dari driver V4L2. Ini tersedia dari github h264_v4l2_rtspserver

Ini dilakukan untuk kamera raspicamera, tetapi harus bekerja dengan perangkat V4L2 yang menyediakan H264.

mpromonet
sumber
-1

Jika saya memahami situasi Anda dengan baik, Anda ingin Raspberry melakukan transcode video ke H264? Saya pikir itu sebabnya Anda mendapatkan kinerja yang buruk, karena VLC menggunakan pengodean perangkat lunak dan Raspberry tidak kuat untuk tugas itu.

Saya menyarankan untuk mencoba dengan Gstreamer dan gst-omxplugin . Ada elemen untuk pengkodean video perangkat keras yang akan membuat server yang baik dari Raspberry Anda.

10robinho
sumber
1
Seperti yang dia katakan, kamera Logitech sudah menyediakan H.264. Jadi rPi hanya mengangkut frame tetapi tidak melakukan pengkodean apa pun.
Matthias
Dia bukan transcoding. Hanya menyiarkan ulang data. Seperti di dalamnya menggunakan stream secara langsung.
Piotr Kula