Cara streaming video dari kamera Raspberry Pi dan menontonnya langsung

93

Saya baru mengenal Raspberry Pi dan bahkan baru di kamera Raspberry Pi. Saya telah melihat banyak tutorial online untuk kamera Raspberry Pi tetapi belum menemukan yang memungkinkan saya melakukan streaming langsung dari kamera Raspberry Pi seperti yang Anda bisa dengan webcam (menggunakan SimpleCV atau OpenCV). Berharap seseorang bisa mengarahkan saya ke arah yang benar.

Insinyur Pemula
sumber
Apakah Anda mencoba mjpgstreamer? Apakah saya memposting solusinya?
jaromrax
3
Orang yang mulai mencari solusi nol latensi harus memeriksa raspberrypi.stackexchange.com/a/32521/30681
igaurav
Jika Anda memiliki ssh dan mpv: ssh raspberrypi raspivid -o - -t 0 -fps 25 -w 640 -h 360 | mpv - --speed 2 --fps 25("--speed 2" mencegahnya terlalu banyak).
Metamorphic

Jawaban:

81

Solusi yang disarankan oleh Diego bagus kecuali bahwa itu cukup lambat dan memiliki penundaan video yang sangat besar karena vlc di sana mengalirkan kembali aliran yang terurai. Sejak 12/2013 ada driver v4l2 resmi yang tersedia: http://www.ics.com/blog/raspberry-pi-camera-module#.VJFhbyvF-b8 Ini membuat streaming ulang yang disebutkan tadi menjadi usang. Cukup muat modul dan gunakan:

sudo modprobe bcm2835-v4l2
cvlc v4l2:///dev/video0 --v4l2-width 1920 --v4l2-height 1080 --v4l2-chroma h264 --sout '#standard{access=http,mux=ts,dst=0.0.0.0:12345}'

Ini menciptakan aliran http di port 12345, Anda juga dapat menggunakan format lain, seperti rtcp dari jawaban Diego. Baca lebih lanjut di sini: https://web.archive.org/web/20151012014829/http://www.videolan.org:80/doc/streaming-howto/en/ch03.html

Lao
sumber
2
Dalam hal ini jawaban , disarankan untuk menambahkan :demux=264ke cvlc karena sungai adalah h264 RAW dan Anda perlu mengatur demuxer yang: cvlc v4l2:///dev/video0 --v4l2-width 1920 --v4l2-height 1080 --v4l2-chroma h264 --sout '#standard{access=http,mux=ts,dst=0.0.0.0:12345}' :demux=264. Itu memungkinkan untuk menonton streaming di VLC untuk Android, misalnya.
Jaime M.
8
Dalam tautan yang disediakan, alih-alih autoreconf -vfiAnda sekarang harus menggunakan./bootstrap.sh
JuJoDi
1
Apakah ada cara yang memungkinkan saya untuk melakukan streaming video dan juga menyimpannya di kartu SD RPi?
Atau Weinberger
4
Saya pikir mungkin perlu dicatat / dikonfirmasikan bahwa metode ini tidak bekerja di lingkungan tanpa kepala. Saya mendapatkan kesalahan, salah satunya berbicara tentang X11
Nick
41

Ada beberapa opsi yang dapat Anda pilih. Di tempat kerja saya, kami menggunakan VLC untuk melakukan streaming video yang ditangkap oleh Raspberry Pi Camera dari ruang server kami ke kantor. Satu kelemahan dari ini adalah ada sekitar 5 detik keterlambatan dan saya belum menemukan solusi untuk ini. Berikut ini adalah pengaturan kami:

  1. Instal raspbian dan perbarui serta pastikan kamera Anda diaktifkan (Anda mengaktifkan ini dengan menjalankan sudo raspi-config dan memilih Aktifkan Kamera)

    sudo apt-get update
    sudo apt-get upgrade
    
  2. Instal vlc

    sudo apt-get install vlc
    
  3. Buat skrip untuk memulai streaming dengan konten berikut, atau jalankan perintah (Anda tidak dapat melakukan hal lain jika Anda hanya menjalankan perintah).

    sudo nano myscript.sh
    raspivid -o - -t 0 -hf -w 640 -h 360 -fps 25 | cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554}' :demux=h264
    
  4. Jadikan skrip dapat dijalankan

    sudo chmod +x myscript.sh
    
  5. Jika Anda ingin memulai streaming secara otomatis, Anda harus menambahkan skrip ke crontab. Untuk membuat ini berfungsi, saya harus membuat skrip lain dijalankan oleh cron (OBS! VLC tidak dapat dijalankan sebagai sudo jadi pastikan Anda berada di cron yang tepat). sudo nano myscript2.sh:

    #!/bin/bash
    /path/to/myscript.sh
    

    Kemudian:

    sudo chmod +x myscript2.sh
    crontab -e
    @reboot /path/to/myscript2.sh
    
  6. Untuk menonton videostream, buka VLC di komputer di jaringan yang sama dengan pi raspberry yang Anda gunakan untuk streaming. Tekan Media -> Buka Networkstream dan rekatkan yang berikut di bidang:

    rtsp://[IP].[TO].[THE].[PI]:8554/
    

Jika Anda tidak peduli dengan FPS (bingkai per detik) dan tidak ingin ada penundaan, Anda bisa menggunakan MJPEG. Anda dapat membaca lebih lanjut tentang ini DI SINI

Tonton wiki INI tentang Modul Kamera Raspberry Pi. Semoga Anda menemukan apa yang Anda cari.

Diego
sumber
Adakah ide mengapa saya akan mendapatkan yang berikut ini di VLC di Windows? Input Anda tidak dapat dibuka: VLC tidak dapat membuka MRL 'rtsp: //192.168.1.78: 8554'. Periksa log untuk rincian. Sisi Pi tampaknya ok - tidak ada kesalahan dan tampaknya bereaksi terhadap klien yang terhubung?
monojohnny
@monojohnny Apakah raspberry pi mengalir? Periksa apakah video benar-benar berfungsi dengan cara menghubungkannya dengan layar. Jika video berfungsi, Anda akan melihat aliran di layar terhubung ke pi raspberry.
Diego
@monojohnny Terima kasih atas penulisan Diego ... berfungsi sempurna pada percobaan pertama! monojohnny ... Anda harus meletakkan trailing "/" jika tidak, vlc mengeluh. Coba ini: rtsp: //192.168.1.78: 8554 /
Sujay Phadke
Terima kasih @Diego ini bekerja dengan baik untuk saya, tetapi bagaimana saya keluar dari aliran saya?
Denoteone
Saya memiliki masalah yang sama pada windows dan saya tidak dapat melakukan streaming video dari pi saya. diberikan saya melihat streaming video dari kamera pi pada layar yang terhubung ke pi tetapi tidak melalui VLC diinstal pada windows 10 pc saya.
Mostafa
23

Saya mencoba beberapa opsi. Namun, saya menemukan hasil terbaik menggunakan proyek itu: RPi-Cam-Web-Interface dari komunitas eLinux

alirannya memiliki penundaan hampir nol.

semoga berhasil :)

pengguna2998302
sumber
4
Orang yang mencari nol latensi, periksa ini pasti. Alat peraga ke @ user2998302. Saya tidak percaya, selama satu tahun ini tidak ada upvotes (pengakuan) tentang ini.
igaurav
Walaupun ini adalah pengaturan yang cepat dan mudah, perangkat lunaknya masih jauh dari optimal, jadi walaupun latensi rendahnya (tidak ada yang disebut latensi nol), antarmuka sangat cerewet, dan menggunakan beberapa siklus CPU tambahan. Tidak masalah jika Anda tidak menjalankan apa pun, tetapi bisa juga jika Anda melakukannya, terutama pada Pi 1.
Nick
Ini luar biasa!
Hamza Ouaghad
Streaming video web tercepat sejauh ini di antara yang telah saya uji (juga driver v4l2 asli yang dialirkan melalui vlc), hampir nol latensi. Tidak ada gunanya mengeluh tentang pengoptimalan sementara setiap sumber daya di internet mengenai masalah ini tidak akan memberi Anda hasil yang lebih baik daripada aplikasi ini.
Gabber
woah, saya harus mengakui batu yang satu ini!
L.Trabacchin
18

Cara termudah yang saya temukan, untuk mendapatkan video langsung dari pi raspberry tanpa kepala, dengan kamera raspberry pi.

Solusi ini berfungsi langsung, tanpa menginstal perangkat lunak tambahan pada PI.

Tentang PI:

raspivid -t 0 -l -o tcp://0.0.0.0:3333

Di Komputer, seseorang dapat streaming dengan VLC:

vlc tcp/h264://192.168.66.154:3333

(dengan asumsi 192.168.66.154 adalah alamat IP PI)

Per Hansen
sumber
Selamat datang di Raspberry Pi! Kami biasanya tidak menganjurkan menyalin jawaban Anda secara verbal dari satu pertanyaan ke pertanyaan lain — setelah Anda mencapai 15 rep, Anda akan dapat menandai pertanyaan yang identik dengan 'duplikat' sehingga hanya ada satu salinan jawaban Anda. Terima kasih telah membagikan jawaban Anda untuk masalah ini!
Aurora0001
@ Per Hansen Tidak bekerja untuk saya ... Mungkin ada hal lain yang perlu dilakukan selain menetapkan port.
Amit Ray
Ini sangat bagus! Menggunakan RPi3B + dan Raspbian 9.4 (stretch) tanpa kepala.
dparkar
5

Saya memposting solusi yang mungkin di forum raspberry menggunakan server RTSP ringan berdasarkan live555 yang diumpankan dengan driver V4L2 yang mendukung penangkapan H264:

sudo modprobe -v bcm2835-v4l2
git clone https://github.com/mpromonet/v4l2rtspserver.git
cd v4l2rtspserver
cmake .
make install
v4l2rtspserver -H <height> -W <width> -F <fps>

Selanjutnya Anda harus dapat mengakses aliran RTSP menggunakan:

vlc rtsp://<raspberry>:8554/unicast
mpromonet
sumber
bagaimana dengan jeda waktu?
kuhajeyan
lebih pendek dari cvlc.
mpromonet
cmake mengeluh tentang "TIDAK BISA menemukan ALSA (hilang: ALSA_LIBRARY ALSA_INCLUDE_DIR)", sampai saya menambahkan beberapa paket lagi untuk proyek saya. Solusinya ada di dalam ini: "sudo apt-get install libopus-dev libexpat1-dev libasound2-dev libudev-dev libavahi-client-dev" (tebakan saya mungkin cukup di sini).
MoonCactus
oh, dan itu bekerja dengan cukup baik (solusi ringan), terima kasih. Jeda waktu cukup baik, sekitar 2 detik dibandingkan dengan solusi lain.
MoonCactus
@MoonCactus: Saya rasa saya memperbaiki instalasi ALSA (hanya perlu libasound2-dev). Kelambatannya harus di bawah satu detik, jika Anda menggunakan vlc, Anda dapat mengurangi buffering jaringan menggunakan --network-caching 300
mpromonet
4

UV4L (juga) mendukung video HTML5 standar dan streaming audio tanpa konfigurasi yang diperlukan. Opsi lain juga dimungkinkan, seperti MJPEG melalui http.

Memperbarui:

UV4L sekarang juga mendukung penyiaran audio & video langsung ke Jitsi Meet Rooms melalui Web. Tidak diperlukan konfigurasi khusus. Semudah mengisi nama, ruang, dan mengklik Mulai .

Pembaruan ke-2:

UV4L sekarang mendukung video yang dikodekan perangkat keras H264 juga, pada full fps, HD dan mungkin Full HD di masa depan.

prinxis
sumber
1
Satu-satunya hal adalah, Anda hanya bisa mendapatkan aliran unsur yang hampir semuanya tidak mengerti. Sayangnya, tidak banyak digunakan. Anda perlu sesuatu untuk memancarkan WebRTC (Yang jika Anda punya Pi2 dan kemudian, Anda bisa dengan UV4L. Jika Anda membutuhkan (karena kendala ukuran / daya) nol untuk melakukan ini, SOL Anda.
Svartalf
3

Keduanya mjpeg_streamerdan motiontampaknya memiliki latensi yang lebih baik daripada cvlc.

Menggunakan mjpg_streamer

mjpeg_streamer membutuhkan kompilasi tetapi instruksi pada github sangat mudah.

Setelah kompilasi, ia dapat dijalankan dengan meluncurkan start.shdari dir proyek, atau dengan menjalankan langsung (dalam dir proyek):

./mjpg_streamer -i "./input_uvc.so -rot 180" -o "./output_http.so -w ./www -p 8090"

dimana 8090port TCP. Jika tidak ditentukan, maka port 8080akan digunakan secara default. The start.shScript berisi beberapa contoh penggunaan dengan opsi tambahan.

Menggunakan motion

Motion termasuk layanan systemd yang membuatnya mudah untuk memulai kembali saat boot, berhenti atau restart.

Untuk menggunakannya dalam mode webcam IP, pengaturan berikut harus ditetapkan /etc/motion/motion.conf:

daemon on
stream_localhost off
output_pictures off
ffmpeg_output_movies off
stream_maxrate 24
framerate 24
width 640
height 480

Berikutnya, di /etc/default/motionset:

start_motion_daemon=yes

Untuk membuat layanan autostart saat boot:

systemctl enable motion

Gunakan systemctl start/stop/restart motionuntuk tindakan yang sesuai.

Port streaming default adalah 8081. Port diatur stream_portdi bawah /etc/motion/motion.conf.

ccpizza
sumber
1

Saya tidak tahu apakah Anda mencari perangkat lunak pengintai, tetapi saya telah berhasil menginstal dan menjalankan motion, sebuah detektor gerak perangkat lunak. Anda harus melihat di panduan resmi .

Morgan Courbet
sumber
Motion hanya berlaku untuk kamera USB
geneorama
3
Gerakan @geneorama menggunakan antarmuka video4linux yang tidak terbatas pada kamera USB, modul bcm2835-v4l2 memberikan akses ke papan kamera melalui antarmuka ini.
mpromonet
1

Saya sudah bisa melakukan streaming video menggunakan uv4l WebRTC di Raspberry Pi 2. Ini sangat mudah. Ikuti saja tutorial ini . Saya harap ini membantu.

bdsys
sumber
Harap sertakan bagian yang relevan dari tutorial di sini, untuk mencegah pembusukan tautan.
Bex
Hanya berlaku pada Pi2 ke atas. Tidak bekerja dengan 1A / 1A + / Zero. Tidak sepenuhnya yakin mengapa dia tidak bisa karena orang tampaknya bisa melakukannya, tapi hei ...
Svartalf
1

Saya mengalami kesulitan mendapatkan streaming video di windows 7. Ada banyak solusi linux, tidak saya tidak bisa meniru mereka di windows sampai sekarang. Saya mendapat solusi yang cukup cepat pada akhirnya:

  1. dapatkan versi windows dari netcat: http://joncraton.org/files/nc111nt.zip , unzip dan tambahkan ke path
  2. dapatkan versi baru mpc-hc, yang dapat dibaca dari stdin: https://mpc-hc.org/downloads/ instal dan tambahkan path-nya ke path juga (milik saya 64-bit, tapi diharapkan 32-bit akan melakukan demikian juga)

Pada raspberry pi:

raspivid -t 0 -w 1024 -h 768 -fps 20 -b 1000000 -o - | nc your.receiver.ip.address 5001

Pada mesin windows:

nc -l -p 5001 | mpc-hc64 -

Jadi, saya anggap, tidak ada yang dibungkus ulang atau direstreaming, remuxed atau apa pun. Aliran biner dari raspvid dimasukkan ke dalam mpc dan ditampilkan. Raspberry saya beroperasi melalui wifi, jadi pada awalnya saya mendapatkan penundaan yang adil, yang dalam waktu setengah menit dikurangi menjadi penundaan 0,2-0,3 detik.

Sayangnya, saya tidak bisa menggunakan vlc dengan cara yang sama, karena nc -l -p 5001 | vlc -hanya membuka jendela vlc tanpa video.

Grigory Makeev
sumber
1

Saya menggunakan Nginx dengan dukungan RTMP untuk streaming ke dunia, bersama dengan avconv untuk memproses input kamera. Kode tersedia di Github .

TTT
sumber
Bagus, maukah Anda berbagi tentang jeda waktu pengalaman video?
kuhajeyan
2
Ya, ada jeda sekitar 5 detik.
TTT
0

Sementara kode Peter Hansen sangat mungkin bekerja dengan baik pada LAN, demi kelengkapan: TCP adalah tentang integritas data dibandingkan dengan waktu nyata. Dalam aliran waktu-nyata, beberapa kehilangan data mungkin dapat diterima demi tampilan yang tepat waktu. Dalam hal ini UDP mungkin lebih baik. Saya belum menguji kode itu.

Jika ini adalah kamera keamanan, multicasting dapat dipertimbangkan. Router modern dapat melakukannya bahkan dengan model $ 100.

Tagihan
sumber
0

Saya telah menginstal solusi ONVIF dari https://github.com/BreeeZe/rpos pada pi saya, mengikuti instruksi pada README.md .

Satu-satunya perbedaan adalah bahwa saya telah menginstal node v8.4.0. Ini memungkinkan saya melihat output kamera saya di NVR yang terhubung di jaringan yang sama. Selain itu, kamera dapat langsung diputar melalui aliran jaringan pemutar VLC menggunakan alamatrtsp://192.168.1.3:8554/h264

KrIsHnA
sumber
0

Beberapa saat yang lalu mengalami masalah serupa dengan ini:

https://www.npmjs.com/package/ws-avc-player

Ini lebih barebone daripada solusi yang diusulkan lainnya, tapi saya pikir itu berfungsi dengan baik jika latensi rendah di web adalah prioritas.

Bekerja pada sebagian besar browser (bahkan ponsel pada 480p) tanpa plugin apa pun yang diperlukan pada browser.

MatijaG
sumber
Saya tidak menulis dekoder itu sendiri, ini adalah proyek terpisah github.com/mbebenita/Broadway Namun secara mengejutkan dioptimalkan dengan baik, dan seperti yang saya katakan dalam jawaban, ia dapat dengan mudah menangani 480p pada droid. Alasan saya menggunakan Brodway adalah karena tidak ada vp8 / 9 hardware encoder pada rpi sehingga h264 adalah satu-satunya pilihan yang layak. Tetapi jika Anda ingin menggunakan decoder asli H264 di browser Anda bisa melupakan latensi rendah.
MatijaG
Kedengarannya luar biasa sehingga saya harus mencobanya.
kwasmich
Setiap umpan balik akan sangat disambut :)
MatijaG
Baru sekarang aku punya waktu luang. Saya kesulitan mendapatkan contoh untuk dijalankan dengan raspividumpan kamera. Dengan ffmpegdi sisi lain saya hanya mendapatkan sepersepuluh frame per detik. Saya menggunakan Raspbian bersih dan Pi Zero. Apakah Anda punya beberapa petunjuk untuk saya?
kwasmich
Ya dengan ffmpeg akan menjadi jalan karena kurangnya akselerasi perangkat keras. Coba jalankan contoh dengan: node example/index.js raspividIni seharusnya bekerja di luar kotak jika Anda memiliki masalah coba jalankan adil node example/index.jsdan terpisah /opt/vc/bin/raspivid -pf baseline -ih -t 0 -w 640 -h 480 -hf -fps 15 -g 30 -o - | nc localhost 5000dan lihat apakah Anda mendapatkan kesalahan dari raspivid
MatijaG