Rapiro でライブ映像の配信
を参考に実践
今後、いろいろな機能をつけたときに使えそうな予感
Ustream みたいに世界中に配信するのではなく
ローカルで使う予定なので
これは使えそう
この機能に必要なのが
MPEG-streamer
sudo apt-get install subversion libjpeg-dev imagemagick
でバージョン管理ソフト subversion を入れている
次に subversion を使い
MPEG-streamer を取得
svn co https://svn.code.sf.net/p/mjpg-streamer/code/mjpg-streamer mjpg-streamer
そして make でコンパイルして
make install でインストールする
cd mjpg-streamer make sudo make install
これでインストール完了
これからやるほうほうだと
定期的に撮影した写真を連続で送りつづける
というものになるらしい
なので、これに使う一時保存フォルダを作成
mkdir /tmp/stream
次に raspstill で定期的に写真を撮影し
mjpg-stream で配信開始となる
次にスクリプトで配信開始する
vim stream_start.sh
でファイルを作り
#!/bin/sh raspistill -w 640 -h 480 -rot 180 -q 5 -o /tmp/stream/pic.jpg -tl 100 -t 9999999 -th 0:0:0 & export LD_LIBRARY_PATH=/usr/local/lib mjpg_streamer -i "input_file.so -f /tmp/stream" -o "output_http.so -w /usr/local/www -p 8080" &
が内容になる
raspistill -w 640 -h 480 -rot 180 -q 5 -o /tmp/stream/pic.jpg -tl 100 -t 9999999 -th 0:0:0 &
で写真撮影
-rot 180
で写真を反対にして rapiro に合わせている
これをやらないと逆さになる
-q 5
でpjeg のクオリティを0~100のうち
5にしてファイルを軽くしている
-o /tmp/stream/pic.jpg
はファイルの出力先
-tl 100
で撮影間隔を指定
これはミリ秒
つまり 100 ミリ秒間隔で撮影
これだとフレームレートが 10fps になる
-t 9999999
は撮影時間の指定
これはそこまで撮影しなくて途中で修了してもOK
最大時間と考えるといいかも
-th 0:0:0
はサムネイルに燗する設定だけど
今回はなしでやるので 0:0:0
&をつけるのは linux おなじみのバックグランド動作
2行めの
export LD_LIBRARY_PATH=/usr/local/lib
はライブラリのパスの指定
これが MJPG-streamer の共有ライブラリへの参照設定
これをしないと mjpg_streamer が使えない
そして
mjpg_streamer -i "input_file.so -f /tmp/stream" -o "output_http.so -w /usr/local/www -p 8080" &
が実際に配信開始するところ
-i “input_file.so -f /tmp/stream”
が
/tmp/stream
の中の画像が更新されるたびに配信する仕組み
らしい
-o “output_http.so -w /usr/local/www -p 8080”
は配信の出力先
今回なら webサーバーのIPアドレスになる
そして
-p 8080
なので
8080ポートを使う
次に停止するスクリプトも作っておく
vim stream_stop.sh
これは killall コマンドで動作を停止する
を参考にするとわかりやすい
今回、バックグランドで動いている
撮影のための raspistill
配信のための mjpg_streamer
を停止したいので
killall raspistill killall mjpg_streamer
となる
これでみれるかをテストするので
まずはスクリプトに実行権限を付与する
chmod 755 stream_start.sh chmod 755 stream_stop.sh
これで
./stream_start.sh
で実行
そして
サーバーIP:8080
でアクセスするとカメラ画像をみることができます
Stream のところで動画をみることができます
ただし、負荷がかかり過ぎるとダウンします
電源が落とした場合
/tmp 以下が消えていたので
再度
mkdir /tmp/stream
で一時保存ディレクトリを作成
これをやらないとエラー
なお、この状態だと
誰でも見れるという状態なので
パスワードつきで配信をするのなら
オプションを追加して
-c ユーザ名:パスワード
とします
もし
ユーザ名 pi
パスワード raspberry
とするなら
export LD_LIBRARY_PATH=/usr/local/lib mjpg_streamer -i "input_file.so -f /tmp/stream" -o "output_http.so -w /usr/local/www -p 8080 -c pi:raspberry"&
というようにすれば
パスワードつきで配信可能になります
もし今後公開するなどしてメンテする必要があるのなら
変数にするとより使いやすくなります
例えば
ポート
ユーザ名
パスワードを変数にすると
#!/bin/sh PORT="8080" ID="pi" PW="raspberry" raspistill -w 640 -h 480 -rot 180 -q 5 -o /tmp/stream/pic.jpg -tl 100 -t 9999999 -th 0:0:0 & export LD_LIBRARY_PATH=/usr/local/lib mjpg_streamer -i "input_file.so -f /tmp/stream" -o "output_http.so -w /usr/local/www -p $PORT -c $ID:$PW"&
というようにしても同じように動きます
なお、Ustream などのネットへ公開するには
mmfpeg を使用
インストール方法は
sudo apt-get install ffmpeg
個人的には Ustream の無料枠だと制限がつくので
Linux でストリーミングサーバーを構築してみようと思います