Rapiro でライブ映像の配信

Rapiro でライブ映像の配信

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 コマンドで動作を停止する

この 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 のところで動画をみることができます

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"&

というようにすれば
パスワードつきで配信可能になります

stream2

もし今後公開するなどしてメンテする必要があるのなら
変数にするとより使いやすくなります
例えば
ポート
ユーザ名
パスワードを変数にすると

#!/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 でストリーミングサーバーを構築してみようと思います

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です