P2P接続で動画ストリーミング
自宅内のWiFi環境でロボカメラ映像のストリーミングに成功したので、次は屋外を想定してP2P接続を検討。
ラズパイを設定変更してWiFiとP2Pを同時稼働したりWiFi-direct接続する事例が参考になったが、WiFiとP2Pを切替えて使用という要求にピッタリ一致しない。
そんなときAndroid5.0以降はWiFi-direct対応済との情報に触れ、スマホをアクセスポイントにすることを思いつく。そこから更に、テザリングでイケそうな気がしてきた。
SIM無しで眠っていたスマホは単体のインターネット接続不可なので、テザリング即ちアクセスポイント化になりそうだ。うまくいけばラズパイもスマホも追加ソフトや設定変更が無くてすむ。そこで実験...
- スマホのテザリングをONし、そのパスワードを確認しておく
- ラズパイのデスクトップ画面でタスクバーのWiFiアイコン【画像1】をクリックしアクセスポイント・リストを表示
- 表示されたリストからスマホを選択しパスワード設定
これだけであっさり接続した!(祝)
mjpg_streamerの引数を再調整
喜んだのもつかの間、WiF経由に比べ表示遅延が酷い。テザリングでスマホの負荷増大したのか?
処理データ量削減のため画素数(-x,-y)とフレーム数(-fps)低減を試しつつ、ラズパイの余力も気になり画質(-quality)も落とす。
ついでに画像縦横比を16:9にしてスマホ画面に合わせる。【リスト1】
まだ画質や遅延に不満だが、ひとまず此処迄。
WiFiとP2Pの切替え自動化
自宅内WiFiとP2Pが自動的に切り替わると便利だ。
スマホのテザリングをONにするとP2P接続に切り替わり、テザリングOFF時はWiFi接続して欲しい。屋外は一択でP2P接続に。
Configファイルにpriorityパラメータ設定して解決【リスト2】
自宅のWiFiは所謂ステルスモードなのでラズパイのアクセスポイント・リストに表示されないが、priority高いスマホのテザリングOFF後しばらくすると自動的にWiFiへ切り替わる。
ロボ操縦との整合
ロボ視界が欲しいのは操縦時で、その操縦時に別途ラズパイに起動コマンド入力するのは実際的でない。
mjpg-streamerはバックグラウンド実行を指定(-b)でき、早い話がdaemonモードである。常時稼働のdaemonにすると、多分カメラを常時専有してしまい他用途に使えないが、その点は一時保留。それよりも常時監視(笑)動画がダダ洩れしないようユーザー/パスワード指定(-c)をする。
- /etc/rc.localファイル末尾のexit文の直前に【リスト3】を挿入
- ラズパイを再起動する
|
画像1:WiFiアイコン

〇内がWiFiアイコン
リスト1:mjpg_streamer再起動!
rz2> LD_LIBRARY_PATH=/usr/local/lib
rz2> mjpg_streamer \
-i "input_raspicam.so -x 240 -y 136 -rot 180 -quarity 20" \
-o "output_http.so -w /usr/local/share/mjpg-streamer/www -p 8080"
リスト2:/etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP
network={
ssid="My-WiFi-SSID" #灰色箇所はWiFi環境毎に異なる
scan_ssid=1 #所謂ステルスモードに対応
psk="WiFi_password"
key_mgmt=WPA-PSK
priority=3
}
network={
ssid="My-Sumaho-SSID"
psk="Sumaho_password"
key_mgmt=WPA-PSK
priority=5
}
リスト3:/etc/rc.local に書き加える
export LD_LIBRARY_PATH=/usr/local/lib
mjpg_streamer -b \
-i "input_raspicam.so -x 240 -y 136 -rot 180 -quarity 20" \
-o "output_http.so -w /usr/local/share/mjpg-streamer/www -p 8080
-c uname:passwd"
|