このページはRaspberry Pi 5やストリーミングの失敗方法です。メモで残しておきます。
gstreamerでストリーミング Raspi5未完
gstreamer インストール
sudo apt install gstreamer1.0-tools
sudo apt install gstreamer1.0-plugins-good
sudo apt install gstreamer1.0-plugins-bad
sudo apt install gstreamer1.0-plugins-ugly
sudo apt install libglib2.0-dev
sudo apt install libgstreamer1.0-dev
sudo apt install libgstreamer-plugins-base1.0-dev
sudo apt install libgstreamer-plugins-bad1.0-dev
sudo apt install libcgroup-dev
sudo apt install gobject-introspection libgirepository1.0-dev
$ gst-launch-1.0 --version
gst-launch-1.0 version 1.22.0
GStreamer 1.22.0
https://tracker.debian.org/pkg/gstreamer1.0
dpkg -l | grep gstreamer
ii gir1.2-gstreamer-1.0:arm64 1.22.0-2 arm64 GObject introspection data for the GStreamer library
ii gstreamer1.0-alsa:arm64 1.22.0-3+deb12u1 arm64 GStreamer plugin for ALSA
ii gstreamer1.0-libav:arm64 1.22.0-2 arm64 ffmpeg plugin for GStreamer
ii gstreamer1.0-plugins-bad:arm64 1.22.0-4+deb12u5 arm64 GStreamer plugins from the "bad" set
ii gstreamer1.0-plugins-base:arm64 1.22.0-3+deb12u1 arm64 GStreamer plugins from the "base" set
ii gstreamer1.0-plugins-good:arm64 1.22.0-5+rpt1+deb12u1 arm64 GStreamer plugins from the "good" set
ii gstreamer1.0-plugins-ugly:arm64 1.22.0-2+deb12u1 arm64 GStreamer plugins from the "ugly" set
ii gstreamer1.0-tools 1.22.0-2 arm64 Tools for use with GStreamer
ii gstreamer1.0-x:arm64 1.22.0-3+deb12u1 arm64 GStreamer plugins for X11 and Pango
ii libgstreamer-gl1.0-0:arm64 1.22.0-3+deb12u1 arm64 GStreamer GL libraries
ii libgstreamer-plugins-bad1.0-0:arm64 1.22.0-4+deb12u5 arm64 GStreamer libraries from the "bad" set
ii libgstreamer-plugins-base1.0-0:arm64 1.22.0-3+deb12u1 arm64 GStreamer libraries from the "base" set
ii libgstreamer-plugins-base1.0-dev 1.22.0-3+deb12u1 arm64 GStreamer development files for libraries from the "base" set
ii libgstreamer1.0-0:arm64 1.22.0-2 arm64 Core GStreamer libraries and elements
ii libgstreamer1.0-dev:arm64 1.22.0-2 arm64 GStreamer core development files
$ v4l2-ctl --list-devices
pispbe (platform:1000880000.pisp_be):
/dev/video20
/dev/video21
/dev/video22
/dev/video23
/dev/video24
/dev/video25
/dev/video26
/dev/video27
/dev/video28
/dev/video29
/dev/video30
/dev/video31
/dev/video32
/dev/video33
/dev/video34
/dev/video35
/dev/video36
/dev/video37
/dev/media1
/dev/media2
rp1-cfe (platform:1f00128000.csi):
/dev/video0
/dev/video1
/dev/video2
/dev/video3
/dev/video4
/dev/video5
/dev/video6
/dev/video7
/dev/media3
rpivid (platform:rpivid):
/dev/video19
/dev/media0
$ v4l2-ctl -d /dev/video19 --list-formats
ioctl: VIDIOC_ENUM_FMT
Type: Video Capture Multiplanar
[0]: 'NC12' (Y/CbCr 4:2:0 (128b cols))
[1]: 'NC30' (10-bit Y/CbCr 4:2:0 (128b cols))
バージョンを合わせる必要がある。1.22.0だろうと思う。
gst-rtsp-server インストール
インストールに必要なツールをインストール
sudo apt install meson ninja-build
wget https://gstreamer.freedesktop.org/src/gst-rtsp-server/gst-rtsp-server-1.22.0.tar.xz
tar -xf gst-rtsp-server-1.22.0.tar.xz
cd gst-rtsp-server-1.22.0
meson setup build/
ninja -C build/
cd build
sudo ninja install
動作確認
cd examples
./test-launch '( videotestsrc ! x264enc ! rtph264pay name=pay0 pt=96 )'
PCからRaspi5のIPアドレスでVLC「rtsp://192.168.31.53:8554/test」のようにアクセス
ここまでできたが、うまくストリーミングできなかった。
./test-launch '( v4l2src device=/dev/video19 ! video/x-h264,width=1280,height=720,framerate=10/1 ! h264parse ! rtph264pay name=pay0 pt=96 protocols=tcp )'
./test-launch '( v4l2src device=/dev/video19 ! image/jpeg,width=1280,height=720,framerate=10/1 ! jpegdec ! x264enc ! rtph264pay name=pay0 pt=96 protocols=tcp )'
VLCでアクセスするとエラーになる。
live555 error: Failed to connect with rtsp://192.168.31.53:8554/unicast
satip error: Failed to setup RTSP session
Webブラウザからストリーミング配信 失敗
ライブラリ インストール
sudo apt install libatlas-base-dev
sudo apt install libhdf5-dev
sudo apt install libqt5gui5 libqt5webkit5 libqt5test5
Raspi5(Debian bookworm)ではlibjasper-devが無い?ようなので失敗
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 12 (bookworm)
Release: 12
Codename: bookworm
Ubuntuでは↓このやりかたでlibjasper-devがインストールできるみたい。sudo apt-add-repository contrib non-free-firmwareすると最後のほうで「E: Failed to fetch http://security.ubuntu.com/ubuntu/dists/xenial-security/main/binary-armhf/Packages 404 Not Found [IP: 91.189.91.81 80]
E: Some index files failed to download. They have been ignored, or old ones used instead.」と出るので古いファイルは削除されているみたい。
sudo apt-add-repository contrib non-free-firmware
sudo apt update
sudo apt install libjasper1 libjasper-dev
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package libjasper1
E: Unable to locate package libjasper-dev
sources.list.dの中身を削除してリポジトリをもとに戻す
sudo rm /etc/apt/sources.list.d/*
mjpg_streamer ストリーミング
Raspi3Bや4Bではうまくいったmjpg_streamerですが、Raspi5ではmakeで失敗しました。未解決
どうやらRaspberry Pi 5は対応していないようです。
以下、古いRaspberry Pi 3・4の手順
カメラが認識されているか
$ vcgencmd get_camera
supported=1 detected=1, libcamera interfaces=0
supported=1 detected=1が「0」だと認識されていない。
古いラズパイは↓以下を実行、カメラを接続して以下の設定をしてリブート。必要!
$ sudo raspi-config 5 Interfacing Options > P1 Camera はい rebootする
mjpg_streamer インストール
sudo apt-get install cmake subversion libjpeg-dev imagemagick -y git clone https://github.com/jacksonliam/mjpg-streamer.git cd mjpg-streamer/mjpg-streamer-experimental make sudo make install
wwwを/home/go直下に置く
$ mv www ~
実行してみる
まだカメラ接続してない状態
$ mjpg_streamer -i "/usr/local/lib/mjpg-streamer/input_uvc.so -d /dev/video0 -y -r 320x240 -f 15" -o "/usr/local/lib/mjpg-streamer/output_http.so -p 8080 -w ./www" MJPG Streamer Version.: 2.0 i: Using V4L2 device.: (null) i: Desired Resolution: 320 x 240 i: Frames Per Second.: 15 i: Format............: YUYV i: JPEG Quality......: 80 i: TV-Norm...........: DEFAULT i: init_VideoIn failed
終了しない場合
[ctrl]+[c]を押してもなかなか終了しないので、別のコンソールからpkillする。
pkill mjpg_streamer
Jetson nano1280x720にする
$ v4l2-ctl --list-formats-ext ioctl: VIDIOC_ENUM_FMT Index : 0 Type : Video Capture Pixel Format: 'RG10' Name : 10-bit Bayer RGRG/GBGB Size: Discrete 3264x2464 Interval: Discrete 0.048s (21.000 fps) Size: Discrete 3264x1848 Interval: Discrete 0.036s (28.000 fps) Size: Discrete 1920x1080 Interval: Discrete 0.033s (30.000 fps) Size: Discrete 1640x1232 Interval: Discrete 0.033s (30.000 fps) Size: Discrete 1280x720 Interval: Discrete 0.017s (60.000 fps) Size: Discrete 1280x720 Interval: Discrete 0.017s (60.000 fps)
mjpg_streamer -i "/usr/local/lib/mjpg-streamer/input_uvc.so -d /dev/video0 -y -r 1280x720 -f 15" -o "/usr/local/lib/mjpg-streamer/output_http.so -p 8080 -w ./www" MJPG Streamer Version.: 2.0 i: Using V4L2 device.: /dev/video0 i: Desired Resolution: 1280 x 720 i: Frames Per Second.: 15 i: Format............: YUYV i: JPEG Quality......: 80 i: TV-Norm...........: DEFAULT Opening in BLOCKING MODE i: The specified resolution is unavailable, using: width 3264 height 2464 instead Unable to query that the FPS change is supported : Inappropriate ioctl for device o: www-folder-path......: ./www/ o: HTTP TCP port........: 8080 o: HTTP Listen Address..: (null) o: username:password....: disabled o: commands.............: enabled
表示されるけど画像、真っ白、もしくは緑、HDMIでディスプレイ接続したらちゃんと映像表示されるのでカメラはこわれてない。
オプションが違う?
video0が無かった Raspi
video0が無かったので、video10にしてみる。video11,video12もダメ、
$ mjpg_streamer -i "/usr/local/lib/mjpg-streamer/input_uvc.so -d /dev/video10 -y -r 320x240 -f 15" -o "/usr/local/lib/mjpg-streamer/output_http.so -p 8080 -w ./www" MJPG Streamer Version.: 2.0 i: Using V4L2 device.: /dev/video10 i: Desired Resolution: 320 x 240 i: Frames Per Second.: 15 i: Format............: YUYV i: JPEG Quality......: 80 i: TV-Norm...........: DEFAULT Error opening device /dev/video10: video capture not supported. Init v4L2 failed !! exit fatal i: init_VideoIn failed
video0が無いので以下を追加する。
$ sudo mknod /dev/video0 c 81 0 $ sudo chmod 660 /dev/video0 $ sudo chown root.video /dev/video0
でもUSB電源外したりすると、video0がなくなる場合がある。
これでmjpg_streamer実行してもエラーになる???
$ v4l2-ctl -d /dev/video0 --list-formats-ext ioctl: VIDIOC_ENUM_FMT Index : 0 Type : Video Capture Multiplanar Pixel Format: 'YU12' Name : Planar YUV 4:2:0 Index : 1 Type : Video Capture Multiplanar Pixel Format: 'YV12' Name : Planar YVU 4:2:0 Index : 2 Type : Video Capture Multiplanar Pixel Format: 'NV12' Name : Y/CbCr 4:2:0 Index : 3 Type : Video Capture Multiplanar Pixel Format: 'NV21' Name : Y/CrCb 4:2:0 Index : 4 Type : Video Capture Multiplanar Pixel Format: 'RGBP' Name : 16-bit RGB 5-6-5
再起動して再び実行するとこうなった。
$ mjpg_streamer -i "/usr/local/lib/mjpg-streamer/input_uvc.so -d /dev/video0 -y -r 320x240 -f 15" -o "/usr/local/lib/mjpg-streamer/output_http.so -p 8080 -w ./www" MJPG Streamer Version.: 2.0 i: Using V4L2 device.: /dev/video0 i: Desired Resolution: 320 x 240 i: Frames Per Second.: 15 i: Format............: YUYV i: JPEG Quality......: 80 i: TV-Norm...........: DEFAULT UVCIOC_CTRL_ADD - Error at Pan (relative): Inappropriate ioctl for device (25) UVCIOC_CTRL_ADD - Error at Tilt (relative): Inappropriate ioctl for device (25) UVCIOC_CTRL_ADD - Error at Pan Reset: Inappropriate ioctl for device (25) UVCIOC_CTRL_ADD - Error at Tilt Reset: Inappropriate ioctl for device (25) UVCIOC_CTRL_ADD - Error at Pan/tilt Reset: Inappropriate ioctl for device (25) UVCIOC_CTRL_ADD - Error at Focus (absolute): Inappropriate ioctl for device (25) UVCIOC_CTRL_MAP - Error at Pan (relative): Inappropriate ioctl for device (25) UVCIOC_CTRL_MAP - Error at Tilt (relative): Inappropriate ioctl for device (25) UVCIOC_CTRL_MAP - Error at Pan Reset: Inappropriate ioctl for device (25) UVCIOC_CTRL_MAP - Error at Tilt Reset: Inappropriate ioctl for device (25) UVCIOC_CTRL_MAP - Error at Pan/tilt Reset: Inappropriate ioctl for device (25) UVCIOC_CTRL_MAP - Error at Focus (absolute): Inappropriate ioctl for device (25) UVCIOC_CTRL_MAP - Error at LED1 Mode: Inappropriate ioctl for device (25) UVCIOC_CTRL_MAP - Error at LED1 Frequency: Inappropriate ioctl for device (25) UVCIOC_CTRL_MAP - Error at Disable video processing: Inappropriate ioctl for device (25) UVCIOC_CTRL_MAP - Error at Raw bits per pixel: Inappropriate ioctl for device (25) o: www-folder-path......: ./www/ o: HTTP TCP port........: 8080 o: HTTP Listen Address..: (null) o: username:password....: disabled o: commands.............: enabled
http://192.168.31.204:8080/にアクセスするとファイルがない。/home/pi/wwwが無い状態。
404: Not Found! Could not open file
trunk/mjpg-streamer-experimentalの中にあるwwwディレクトリを/home/pi/wwwに置く。実行すると以下のようになる。
$ mjpg_streamer -i "/usr/local/lib/mjpg-streamer/input_uvc.so -d /dev/video0 -y -r 320x240 -f 15" -o "/usr/local/lib/mjpg-streamer/output_http.so -p 8080 -w ./www" MJPG Streamer Version.: 2.0 i: Using V4L2 device.: /dev/video0 i: Desired Resolution: 320 x 240 i: Frames Per Second.: 15 i: Format............: YUYV i: JPEG Quality......: 80 i: TV-Norm...........: DEFAULT UVCIOC_CTRL_ADD - Error at Pan (relative): Inappropriate ioctl for device (25) UVCIOC_CTRL_ADD - Error at Tilt (relative): Inappropriate ioctl for device (25) UVCIOC_CTRL_ADD - Error at Pan Reset: Inappropriate ioctl for device (25) UVCIOC_CTRL_ADD - Error at Tilt Reset: Inappropriate ioctl for device (25) UVCIOC_CTRL_ADD - Error at Pan/tilt Reset: Inappropriate ioctl for device (25) UVCIOC_CTRL_ADD - Error at Focus (absolute): Inappropriate ioctl for device (25) UVCIOC_CTRL_MAP - Error at Pan (relative): Inappropriate ioctl for device (25) UVCIOC_CTRL_MAP - Error at Tilt (relative): Inappropriate ioctl for device (25) UVCIOC_CTRL_MAP - Error at Pan Reset: Inappropriate ioctl for device (25) UVCIOC_CTRL_MAP - Error at Tilt Reset: Inappropriate ioctl for device (25) UVCIOC_CTRL_MAP - Error at Pan/tilt Reset: Inappropriate ioctl for device (25) UVCIOC_CTRL_MAP - Error at Focus (absolute): Inappropriate ioctl for device (25) UVCIOC_CTRL_MAP - Error at LED1 Mode: Inappropriate ioctl for device (25) UVCIOC_CTRL_MAP - Error at LED1 Frequency: Inappropriate ioctl for device (25) UVCIOC_CTRL_MAP - Error at Disable video processing: Inappropriate ioctl for device (25) UVCIOC_CTRL_MAP - Error at Raw bits per pixel: Inappropriate ioctl for device (25) o: www-folder-path......: ./www/ o: HTTP TCP port........: 8080 o: HTTP Listen Address..: (null) o: username:password....: disabled o: commands.............: enabled
完成。
SHファイル
$vim /home/pi/script/streamer.sh #!/bin/sh PORT="8080" #ポート番号 #ID="xxxx" #IDは好きなもの #PW="xxxxxxxx" #パスワード SIZE="640x480" #画面サイズ FRAMERATE="20" #フレームレート LOT="180" #回転 export LD_LIBRARY_PATH=/usr/local/lib /usr/local/bin/mjpg_streamer \ -i "input_uvc.so -f $FRAMERATE -r $SIZE -rot $LOT -d /dev/video0 -y -n" \ -o "output_http.so -w /home/pi/www -p $PORT " #-o "output_http.so -w /usr/local/www -p $PORT -c $ID:$PW"
正常に起動する。
$ sh /home/pi/script/streamer.sh MJPG Streamer Version.: 2.0 i: Using V4L2 device.: /dev/video0 i: Desired Resolution: 640 x 480 i: Frames Per Second.: 20 i: Format............: YUYV i: JPEG Quality......: 80 i: TV-Norm...........: DEFAULT o: www-folder-path......: /home/pi/www/ o: HTTP TCP port........: 8080 o: HTTP Listen Address..: (null) o: username:password....: disabled o: commands.............: enabled
Cronで自動起動
$crontab -e #以下を追加 @reboot /bin/sh /home/pi/script/streamer.sh
/dev/video0が消える
Raspi3Bで何故か/dev/video0が消えてしまう。
$ sudo v4l2-ctl --list-devices bcm2835-codec (platform:bcm2835-codec): /dev/video10 /dev/video11 /dev/video12 Failed to open /dev/video0: No such file or directory
新しく作っても再起動で消える。
カメラのフラットケーブルが切れてる?ようだった。
カメラがちゃんと接続されていないと、/dev/video0が消えるみたい。
いや、ケーブルは折れてるけど違うカメラで普通に表示したので、カメラが壊れているみたい。
動くけどCPU90%消費!
-y をなくしたら軽くなった。けど動かない・・・-y=YUYVフォーマットを指定するか否か(MJPEGがウェブカメラでサポートされていない場合)
-y -nを削除するとCPU2%になった!
コメント