--- title: Raspberry Pi 3 の標準カメラで撮影した動画をブラウザに配信する方法まとめ tags: RaspberryPi Raspberrypi3 H264 picamera author: okaxaki slide: false --- # はじめに 最近、Raspberry Pi 3 と CSI 接続の標準カメラモジュールを入手しました。 せっかくカメラも入手したので、カメラで撮影した動画をリアルタイムで、できれば遅延を減らして高fpsでブラウザから閲覧したいなと思って色々方法を試してみたので、まとめてみます。 なお Raspberry Pi 3 の OS は Raspbian Jessie が前提となります。 ```shell-session $ uname -a Linux raspberrypi 4.4.45-v7+ #954 SMP Fri Jan 27 19:06:40 GMT 2017 armv7l GNU/Linux ``` [mjpg-streamer]:http://sourceforge.net/projects/mjpg-streamer/ [h264-live-player]:https://github.com/131/h264-live-player [uv4l-raspicam]:http://www.linux-projects.org/documentation/uv4l-raspicam/ [gstreamer]: https://gstreamer.freedesktop.org/ # 配信方法1 - mjpg-streamer この方法は motion jpeg で配信します。いろんなところで紹介されている標準的な方法だと思います。 ### インストール ```shell-session $ sudo apt-get install -y cmake libv4l-dev libjpeg-dev imagemagick $ git clone https://github.com/jacksonliam/mjpg-streamer.git $ cd mjpg-streamer/mjpg-streamer-experimental $ make ``` ### 動画の配信 ```shell-session $ ./mjpg_streamer -o "./output_http.so -w ./www" -i "./input_raspicam.so -x 640 -y 480 -fps 30 -q 10" ``` -q は jpeg の画質指定で、1が最小100が最大です。こいつを小さくすると高レートで配信できます。↑の例だと 10 なので画質は無茶苦茶粗いですが、fps はけっこう出ます。遅延は回線によりますが、LAN内なら WiFi とかでもほぼリアルタイムで見られました。 ### 動画の受信 ブラウザで http://[ラズパイのIP]:8080/ を開くだけです。 # 配信方法2 - uv4l-raspicam mjpg-streamer と同じく、 motion jpeg での配信となります。デーモンとして動作するので、ちゃんと使うおうとするとちょっと設定が手間かも。 ### インストール linux-projects.org のリポジトリを参照しますので、まずは apt-key で鍵を登録します。 ```shell-session $ curl http://www.linux-projects.org/listing/uv4l_repo/lrkey.asc | sudo apt-key add - ``` 登録できたら、`/etc/apt/sources.list` に以下を追加します。 ``` deb http://www.linux-projects.org/listing/uv4l_repo/raspbian/ jessie main ``` その後、 ```shell-session $ sudo apt-get update $ sudo apt-get install uv4l-webrtc uv4l-raspicam-extras ``` でインストール完了です。インストール完了後 uv4l_raspicam サービスが勝手に起動します。 ### 動画の配信 本来は /etc/uv4l_raspicam/ 以下の設定を書き換えてサービスを起動すべきなのですが、説明が長くなるので端折ります。まずは、uv4l_raspicam サービスを止めます。 ```shell-session $ sudo service uv4l_raspicam stop ``` 次にコマンドラインから uv4l を直接起動します。 ```shell-session $ uv4l --auto-video_nr --driver raspicam --encoding mjpeg --width 640 --height 480 --quality 15 --server-option '--port=9000' ``` ### 動画の受信 ブラウザで http://[ラズパイのIP]:9000/stream/video.mjpeg を開くとストリームが見られます。 # 配信方法3 - gstreamer で h264動画 を [HLS][] (MPEG-2 TS) 形式にして配信 gstreamer の tcpserversink 経由で動画ストリームをそのままブラウザに渡す(HTML5