Jadi saya mendapat Kamera Raspberry hari ini dan masih berfungsi dengan baik.
Abadikan gambar dalam format JPEG:
raspistill -o image.jpg
Rekam video 5 detik dalam format H.264 :
raspivid -o video.h264
Saya tidak ingin menginstal aplikasi tambahan karena saya ingin memanfaatkan HTML5 yang sudah tersedia. Karena Chrome / Safari memiliki dekoder bawaan untuk H.264, saya hanya ingin mengarahkan browser saya ke URL dan menonton streaming.
Bagaimana saya bisa mencapai ini?
webcam
streaming-video
camera
Piotr Kula
sumber
sumber
Jawaban:
Streaming dengan HLS
Metode eksklusif Apple untuk streaming video langsung. Ini disebut HTTP Live Streaming (HLS) dan hanya didukung oleh teknologi Apple. Google (Chromium / YouTube) menggunakan implementasinya sendiri yang disebut dash mpeg dan semua orang bingung atau menggunakan H.264 yang dienkapsulasi dalam MP4 .
PROS
.m3u8
daftar putarKon
m3u8
.m3u8
hanyalah versi UTF-8 dari format M3U. (File .m3u dapat memiliki berbagai penyandian.) Beberapa orang mengklaim bahwa mengubah nama .m3u8 menjadi .m3u akan berfungsi seperti yang diharapkan di semua browser HTML5. Saya mencoba ini, dan itu tidak berhasil untuk saya.Konsep di balik streaming ini adalah bahwa segmen file pendek, setidaknya 5 detik (dalam contoh ini - mungkin cara baru tersedia untuk mempercepatnya) direkam dan disimpan ke file yang tepat. File daftar putar diperbarui dengan nama file baru dan klien selalu memilih daftar putar ini dan mengunduh file terbaru. Ada beberapa mekanisme yang terlibat untuk menggabungkan video dengan mulus pada klien. Inilah sebabnya mengapa pengembang lain tidak ingin menerapkan ini karena memerlukan banyak usaha dan tidak mematuhi standar HTML5 (meskipun tidak ada standar HTML5 yang tepat untuk streaming langsung ?? Ehh, desah ).
Menginstal
Anda perlu mengkompilasi
ffmpeg
- jangan gunakanapt-get install
untuk FFmpegHal ini dapat memakan waktu hingga 5 jam - Ini memiliki menjadi versi 1.1 atau lebih tinggi yang mendukung segmen mengalir. Anda dapat menggunakan ini untuk mengkloning dan mengkompilasinya.
/usr/share/nginx/www/
Buat file skrip Bash dengan nama seperti
video.sh
, terapkanchmod +x
padanya dan tempelkan ini. Ubah folder basis ke tempat server HTTP Anda tinggal. Saya menggunakannginx
,/usr/share/nginx/www/
Buat file HTML yang akan memuat daftar putar
Dukung
Referensi: http://www.raspberrypi.org/phpBB3/viewtopic.php?p=351392&sid=5b9a46f5eea2c7a0887d2efdfa7edade#p351392
Kode asli: https://github.com/AndyA/psips/blob/master/examples/hls.sh
sumber
-segment_wrap 10
sebagai argumen ke ffmpeg, ia akan menggunakan maksimal 10 file segmen.segments/
ketika menunjuk ke file segmen, jadi saya menjatuhkan folder segmen. Apakah saya salah paham akan sesuatu?UV4L MMAL
Terima kasih untuk komentar dari @mpromonet untuk pembaruan pada driver Linux-Projects V4L2 yang sekarang mengimplementasikan MMAL dengan sangat efisien - tetapi ini masih dalam proses.
Ikuti petunjuk ini untuk menginstal repositori proyek-linux dan instal driver UV4L dengan ekstra. Kemudian instal server dan mjpeg. Jika mau, Anda juga bisa bereksperimen dengan yang lain.
Setelah Anda menginstal semuanya, Anda dapat mengakses server HTTP pada port 8080. Anda juga harus memeriksa
/etc/uv4l/conf
file dan mengatur apakah Anda ingin mjpeg atau H.264 karena itu membuat perbedaan, tetapi Anda dapat menyesuaikan beberapa pengaturan melalui web bawaan. server.HTML 5
Inilah yang kami semua menunggu (disebut WebRTC ) dan berkat driver baru ini berfungsi dengan baik (pada Raspberry Pi 2).
Pertama, ikuti langkah-langkah ini, http://www.linux-projects.org/modules/sections/index.php?op=viewarticle&artid=14 :
Kemudian pada Raspberry Pi 2 Anda instal ini WebRTC (untuk Raspberry Pi 1, baca situs tertaut untuk opsi lain)
Nyalakan kembali semua driver dan buka
Sekarang Anda memiliki streaming video latensi rendah dan berkualitas tinggi langsung ke peramban modern seperti Chrome atau Firefox. (Mungkin Safari, tetapi saya tidak dapat memeriksa karena mereka tidak melakukan Winblows lagi dan Internet Explorer ... eh)
MJPEG
Secara default, ini digunakan
mjpeg
pada 1080p, dan itu sangat lamban. Saya mengubah ukurannya menjadi 800x600 bingkai dan menggunakan sesuatu seperti iSpy untuk memproses video. Untuk keamanan, saya mendapatkan sekitar 10 fps pada video yang jernih. Ini jauh lebih baik daripada 3 fps pada 640x480 sebelum driver ini. Ini bekerja di iPhone dengan Safari, Android Chrome dan hampir semua yang lainnya.http://raspberrypi:8080/stream/video.mjpeg
Ini juga berarti bahwa
motion
seharusnya (saya masih perlu menguji dan membandingkan) bekerja jauh lebih baik sekarang. Pastikan untuk mengatur konfigurasi yang akan digunakanv4l2_palette 8
atauv4l2_palette 2
H.264
Ini sekarang telah diperbaiki untuk "streaming", dan kita tidak perlu berusaha keras untuk menonton video H.264 melalui VLC media player . Alirannya masih berupa RAW H.264, jadi Anda harus melakukan demux atau transcode / encapsualte jika Anda memerlukannya untuk bekerja di tempat lain. Anda harus men-tweak
bitrate=xxxxxx
dalam file konfigurasi jika Anda streaming melalui Wi-Fi.Dalam pemutar media VLC, Anda harus memberi tahu bahwa Anda ingin menggunakan demuxer H.264. Jadi jika Anda menggunakan GUI, maka pastikan untuk menambahkan argumen
:demux=264
. Dari baris perintahvlc http.../video.h264 --demux h264
,. Jika tidak, Anda hanya akan melihat layar kosong meskipun LED kamera dihidupkan.http://raspberrypi:8080/stream/video.h264
Voila! Streaming HD dengan jarak jeda 500 ms (dengan penyesuaian, hingga 200 ms). Ini jelas jauh lebih mudah daripada menggunakan metode lama. Kualitas dan FPS luar biasa, tetapi Anda tidak dapat menanamkan ini dalam HTML5 tanpa transkode ke MP4 atau WebM . Saya harap ini akan diterapkan karena akan benar-benar menjadikan ini server mandiri yang hebat.
RTSP / RTMP / RTP
Tidak didukung / diimplementasikanhttp://www.linux-projects.org/uv4l/tutorials/rtsp-server/
HLS
Tidak didukung / diimplementasikan
Belum adavideo4linux
driver yang tersedia. Ini berarti bahwa kami tidak dapat menggunakan ffserver untuk mengalirkan data menggunakan/dev/video0
atau simlar seperti webcam USB.Itulah mengapa sangat sulit untuk menemukan streaming langsung yang tepat untuk browser HTML5.
Gstreamer
(bukan HTML5)<OBJECT ...
:) (tertunda)sumber
video4linux
driver driver V4L2 resmi bcm2835-v4l2 dan driver userspace V4L2 [ linux-projects.org/modules/sections/…--demux h264
flag. Kita masih perlu transkode ini untuk digunakan di ponsel atau menanamkan sebagai mp4 / webm di halaman web. Tetapi ini adalah langkah yang sangat bagus untuk maju secara efisien dan berkualitas. Jangan bingung dengan "driver lain" proyek non-proyek linux4L UV4 yang sampah./usr/bin/cvlc v4l2:///dev/video0 --v4l2-width 800 --v4l2-height 400 --v4l2-chroma h264 --sout '#standard{access=http,mux=ts,dst=0.0.0.0:8080}' :demux=264
Streaming dengan MJPEG
U4VL
Antarmuka kernel dengan server build in HTTP (S).
http://www.linux-projects.org/uv4l/tutorials/streaming-server/
Antarmuka Web Raspberry Pi Cam
Sebuah proyek yang bagus oleh silvanmelchior yang menyebarkan server web, seperti dvr, server streaming multi target. Perlu informasi lebih lanjut
https://github.com/silvanmelchior/RPi_Cam_Web_Interface
Metode warisan
Streaming dengan mjpg didukung oleh hampir semua browser, termasuk Internet Explorer 6. Banyak kamera yang digunakan sebelum H.264 menggunakan perangkat keras mjpg, yang pada dasarnya membuang file JPEG secepat mungkin ke dalam folder sementara mjpg membaca file ke dalam buffer dan dihapus mereka. Beberapa perangkat dapat mencapai hingga 25 fps dan bahkan jika Anda memiliki koneksi yang buruk, Anda akan mendapatkan setidaknya 1 fps.
Dukungan untuk mjpg dijatuhkan dalam kamera HD karena file JPEG terlalu besar untuk streaming melalui Internet dan H.264 adalah protokol kualitas yang jauh lebih cepat dan lebih baik.
Karena kita tidak memiliki cara untuk menyiarkan H.264 menggunakan modul kamera secara nativly ini sepertinya merupakan sebuah ...
Ini cukup instan, tetapi jangan berharap untuk mendapatkan lebih dari 1,5 fps. Ini
raspistill
menjadi sangat SLOOOW! Menggunakan fungsi time-lapse diatur ke 100 ms yang seharusnya memberi kita 10 fps tidak bekerja karenaraspistill
hanya tersedak dan memiliki masalah kinerja yang serius di dalam dirinya./tmp
untuk menggunakan RAM untuk/etc/default/tmpfs
perubahan kecepatanRAMTMP=yes
(Ini adalah upaya untuk meningkatkan fps, tetapi raspistill tidak dapat bertahan dengan sendirinya.)/usr/src
, mkdir mjpg-streamer, cd mjpg-streamer ...git clone https://github.com/engine12/mjpg-streamer.git
make USE_LIBV4L2=true clean all
sudo ln -s /usr/include/libv4l1-videodev.h /usr/include/linux/videodev.h
sudo ln -s /usr/include/lib4l2.h /usr/include/linux/lib4l2.h
mjpg_streamer
dan plugin-nyainput_*.so
danoutput_*.so
untuk/usr/local/bin
. Kalau tidak, jalankan langsung dari direktori src.mkdir /tmp/stream
raspistill -w 640 -h 480 -q 5 -o /tmp/stream/pic.jpg -tl 100 -t 9999999 -th 0:0:0 &
LD_LIBRARY_PATH=./ ./mjpg_streamer -i "input_file.so -f /tmp/stream" -o "output_http.so -w ./www"
(jalankan ini di mana biner dan plugin berada)http://<IP-address>:8080
Saya kesulitan mengompilasinya selama sekitar 5 jam ... huh , tapi saya pikir saya akan menggunakan ini karena saya bisa mengakses stream dari ponsel apa saja dan browser apa pun. Saya hanya harus menunggu sampai kita mendapatkan driver yang lebih baik ... Satu atau dua tahun lagi. :(
Tidak peduli kualitas apa yang saya coba, saya mendapatkan tidak lebih cepat atau tidak lebih lambat dari 1 fps menggunakan aliran. Saya menggunakan 720p dan 1080p dan hanya kualitas gambar yang lebih baik, tetapi fps tidak ada perbedaan pada LAN. Saya kira pengaturan yang lebih kecil akan membantu dengan WAN / 3G atau transmisi radio lainnya.
raspistill menulis gambar ke satu file. Ini bisa menjadi hambatan. Itu menulis file, mjpg strreamer membacanya dan menghapusnya menyebabkan I / O memblokir, sehingga raspistill tidak dapat menulis ke file.
Satu-satunya hal yang dapat saya pikirkan adalah menggunakan raspivid yang disalurkan ke FFmpeg yang akan membuat file JPEG untuk kita - saya perlu mencoba ini dan mungkin ini jauh lebih cepat daripada uspp raspistill. Saya berhasil mendapatkan 25 fps dengan kualitas yang mengejutkan, dan itu tertunda sekitar 10 detik ... Tweaking pengaturan membuat saya sekitar 3 fps, tetapi CPU 100%. Tidak ada perangkat keras yang digunakan untuk memproses aliran video ...
Saya juga membaca dan menemukan bahwa kita dapat menggunakan
%d
nama file keluaran raspistill. Saya bertanya-tanya apakah itu akan meningkatkan fps. Encoding JPG juga dipercepat perangkat keras di raspistill, jadi saya benar-benar berjuang untuk mencari tahu mengapa itu sangat lambat ...Saya mendapat 2 FPS mengejutkan menggunakan
%d
nama file. Untuk beberapa alasan, menulis file JPEG sangat lambat dari raspistill. Mendesah.sumber
Pada 2017 (atau mungkin sebelumnya)
raspivid
tidak lagi menjadi metode yang disukai, dengan Pi dev merekomendasikan orang menggunakan V4L2 sebagai gantinya.Jadi metode ini memungkinkan Anda untuk melakukan streaming H264 melalui RTP menggunakan V4L2 bukan
raspivid
. Saya perhatikan metode ini menghasilkan lebih sedikit dropout dan memungkinkan bitrate lebih tinggi:Skrip ini multicast video, dan dapat dilihat di komputer lain di LAN dengan perintah seperti ini:
-sync ext
menyebabkan video diputar secepat mungkin sehingga akan berjalan secara real time, sebagai lawan menjalankannya pada framerate tetap dan tertinggal jika Pi menangkap frame lebih cepat dari ini. Masih ada beberapa kelambatan dengan metode ini, tetapi tidak lebih buruk dariraspivid
metode lainnya .(Kiat: jika Anda dicolokkan ke router atau sakelar yang mendukung IGMP, pastikan
224.0.0.0/4
tidak di-firewall pada mesin Anda, jika tidak, router akan menanyakan PC Anda apakah menginginkan lalu lintas multicast yang tidak akan pernah direspon oleh PC dan Anda tidak akan pernah melihat video apa pun.)Merekam ke disk
Seperti yang saya sebutkan merekam dalam komentar di bawah, saya akan mengembangkannya di sini. Anda dapat menggunakan perintah seperti ini untuk merekam aliran jaringan ke disk:
Lihatlah
man strftime
arti dari%
simbol - simbol dalam nama file. Yang dalam contoh ini menggunakan nomor hari (0 = Minggu, 1 = Senin, dll.) Diikuti oleh aT
dan kemudian waktu. Ini memulai file baru setiap 15 menit.Hanya untuk memperjelas, perintah rekaman ini dimaksudkan untuk dijalankan pada PC jarak jauh (bukan pada Pi itu sendiri) meskipun mungkin akan bekerja pada Pi juga (belum diuji).
Karena Anda mendapatkan file baru setiap 15 menit dengan hari dan waktu dalam nama file, itu berarti bahwa setelah satu minggu Anda akan mulai mendapatkan nama file yang dihasilkan yang telah digunakan, menyebabkan file terlama ditimpa. Dengan kata lain, Anda akan berakhir dengan lingkaran berulang dari rekaman minggu sebelumnya. Ini sangat ideal untuk kamera keamanan di mana Anda jarang perlu kembali lebih dari seminggu.
Sebagai catatan tambahan ini menghasilkan file bernilai sekitar 500GB, jadi Anda mungkin ingin menyesuaikan bitrate, resolusi, atau menimpa file lebih cepat (katakanlah setiap 24 jam) jika Anda tidak ingin mereka mengambil begitu banyak ruang.
sumber
ffserver
atau sistem server lain jika Anda ingin lebih dari satu mesin menampilkan umpan. Kemudian setelah mungkin 2-3 klien (tergantung pada bitrate video) adaptor USB Ethernet Pi akan kehabisan bandwidth. Dengan multicast tidak perlu menjalankan server (mesin klien hanya memilih apakah akan mendengarkan lalu lintas atau mengabaikannya) sehingga Anda dapat memiliki ribuan mesin yang menampilkan video tanpa dampak pada Pi, yang hanya mengirim satu aliran video tunggal .Saya berhasil melakukan streaming dari Raspberry Pi saya ke server web dengan modul nginx-rtmp yang dikompilasi .
Untuk menghemat kerepotan
ffmpeg
, saya sarankan distribusi bergulir seperti Arch Linux Arm .Beberapa catatan:
Jadi atas dasar ini, saya pikir streaming langsung dari Raspberry Pi mungkin OK untuk siaran sementara, tetapi tidak untuk cam Web yang selalu aktif karena terlalu haus bandwidth. Anda tidak akan mendapatkan audio dan jika Anda melakukannya, itu akan menjadi misi untuk disinkronkan.
Anda dapat merekam audio secara lebih efisien secara terpisah pada saat bersamaan dengan merekam video. Kemudian nanti mungkin mux feed audio di kemudian dan mengubahnya ke WebM dan meletakkannya di httpd Anda sebagai file statis dengan tag video HTML. Alur kerjanya cukup canggung, meskipun itu yang terbaik yang bisa saya pikirkan untuk siaran yang efisien yang akan bekerja tanpa rasa sakit di seluruh browser.
sumber
UV4L sekarang mendukung Streaming Audio & Video langsung dengan WebRTC dan HTML5.
sumber
Jawaban Piotr Kula tampaknya berada di jalur yang benar tetapi sudah ketinggalan zaman karena raspberry.
Ada petunjuk yang diperbarui untuk uv4l pada peregangan Raspberry di
https://www.linux-projects.org/uv4l/installation/
Anda dapat tweek opsi uv4l melalui /etc/uv4l/uv4l-raspicam.conf dan kemudian restart layanan dengan
Dalam kasus saya hal-hal tidak berjalan di luar kotak (jika lupa menginstal server uv4l ...). Komentar berikut mungkin membantu Anda men-debug masalah yang sama.
Saya memeriksa apakah server berjalan dengan:
dan apakah itu mendengarkan
tetapi tidak ada entri untuk uv4l dalam daftar. Saya mengharapkan satu untuk port 8080
jadi saya mencoba perintah dari Cara mengkonfigurasi UV4L?
Tapi tetap saja server tidak memulai secara otomatis ...
lalu tunjukkan saya pilihan
jadi saya mencoba:
tapi masih tidak ada server yang berjalan di port 8080 atau di tempat lain. Jadi sepertinya saya lupa opsi "--foreground" yang menyatakan halaman manual diperlukan:
Nah, itu petunjuk yang jelas! Tampaknya belum ada server - jadi instal:
dan coba lagi:
Server sekarang tersedia di http: // pi: 8080 (ganti pi dengan ip atau nama host server Anda)
Setelah reboot itu bekerja tanpa memasukkan perintah lain.
sumber
UV4L sekarang mendukung siaran audio & video langsung ke Jitsi Meet Rooms melalui Web. Tidak diperlukan konfigurasi khusus. Semudah mengisi nama, ruang, dan mengklik Mulai .
sumber
webkitRTCPeerConnection is not defined
kesalahan. Saya biasanya menggunakan IceWeasel untuk WebRTC, tetapi itu tidak didukung untuk Jitsi.