人気記事

RaspberryPi

ラズパイ動画ストリーミング

更新日:

ラズベリーパイにカメラを接続し、スマホやパソコンで動画が見れるようにした際に3つの手段をクライアントからの使いやすさ、サーバー(ラズパイ側の)準備の手軽さ、映像の低遅延で比較した結果を整理します。

 

環境


・ラズベリーパイ Pi 3 (固定IP:192.168.100.90とします)

・クライアントPC Mac 

 

試した内容


1.RTSPストリーミング

2.GstreamerによるHTTPストリーミング

3.mjpeg-streamer

 

1.RTSPストリーミング


RTSPとは

「Real Time Streaming Protocol」という名前のプロトコルで、「映像・音声のリアルタイムなストリーミング配信を制御」を目的としています。

ネットワークカメラでよく使われる方法のようです。

 

1-1. 動画配信側(ラズパイ)の設定

カメラ動作は確認済みとします。

/etc/modulesの末尾にbcm2835-v4l2を追記します。

v4l2rtspserverをインストール

ラズパイからのRTSPで動画を配信します。

 

1-2. クライアント側の設定

VLCプレイヤーを使用します。

ファイル>ネットワークを開く

ラズパイのIPアドレスが「192.168.100.90」の場合、

rtsp://192.168.100.90:8554/unicast

と設定します。

成功すると動画を見ることができます。

体感としては1~2秒の遅延といった所でした。

手軽ですが、VLCプレイヤーから毎回動かすのが面倒というデメリットがあります。

 

2.GstreamerによるHTTPストリーミング


Webアプリで埋め込んで使うにはRTSPは敷居が高そうだったのでHTTPで配信する方法(HLS)も試してみました。

HLSとは

HTTP Live StreamingというAppleが実装したHTTPベースのメディアストリーミングプロトコルのこと。

m3u8という形式のセグメントファイルの場所、再生時間、再生順序などを記述したメタデータファイルとtsという形式のセグメントファイル(細切れの動画ファイル)から構成されます。

 

2-1. 動画配信側(ラズパイ)の設定

GStreamerをインストールします。

 

GStereamerで作ったストリーミング動画を配信するためのサーバーを用意します。

nodeのインストールを確認します。

動画配信の置き場を作成します。

app.jsの内容は以下とします。

サーバーを起動します。

サーバーから動画配信するための video.jsファイルを下記の構成で設置します。

使用するファイルは下記のgithubからダウンロードします。

https://github.com/zgw426/GStreamerSample/tree/master/sample01

streamtest.htmlの中身はラズパイのIPアドレスに応じて変更します。

最後にGStreamerを動作させます。

2-2. クライアント側の設定

ブラウザから

http://192.168.100.90:3001/streamtest.html

と打ち込むと、動画が閲覧できます。

ブラウザから見れるのでWebアプリへの埋め込みはvideoタグで一発でできて容易そうですが、私の環境では10秒以上の遅延がありました。

DURATIONの設定等で遅延を減らせるかもしれませんが、一旦ここまで。

 

3.mjpeg-streamer


3-1. 動画配信側(ラズパイ)の設定

mjpeg-streamerをインストールします。

mjpeg-streamerを起動します

 

 

 

3-2. クライアント側の設定

ブラウザから

http://192.168.100.90:8090

にアクセスするとロゴ入りのページに飛びます。

映像だけ見たい場合には

http://192.168.100.90:8090/javascript_simple.html

からアクセスします。

クライアントPCのWebアプリからの使用を想定して下記のHTMLで動作確認しても問題なく動作しました。

 

 

遅延が1~2秒と少なく、セットアップが簡単でした。

 

結論


ラズベリーパイのカメラで動画をWebブラウザから見たい場合には、

mjpeg-streamerがセットアップが簡単で遅延も少なかったです。

 

項目 RTSP Gstreamer(HLS) mjpeg-streamer
クライアントからの使いやすさ
サーバー(ラズパイ)の準備の手軽さ
映像の低遅延 ×

 

追記


気付いたらmjpeg-streamerが落ちてる時があったので、cronで監視して落ちてたら起動させます。

~/mjpg-streamer/mjpg-streamer-experimental 配下に

mjpg_check.sh

mjpg_reboot.sh

というシェルスクリプトを作成し以下を記述します。

cronで1分毎にmjpg_check.shを動作させます。

cron自体が起動しているかは以下で確認。

Active: active (running)となっていれば起動しています。もし起動していなかったら $ /etc/init.d/cron start で起動させます。

 

参考にしたサイト


・RTSP

 https://qiita.com/zono_0/items/43fc89876977738de402

・GStreamer

 https://qiita.com/suo-takefumi/items/aba3db7d639a8b1a8981

・mjpeg-streamer

 https://note.com/agw/n/ne767158e323d

-RaspberryPi
-, , , ,

Copyright© ITエンジニアへの転身 , 2021 All Rights Reserved Powered by STINGER.