WebRTCのgetUserMediaの映像をサーバに保存する
WebRTCのgetUserMediaでWebカメラの画像をとって、
TomcatのJavaServletに送信して保存してみました。
Java 1.7.0_21
Tomcat 7.0
Chrome 28.0.1500.44 beta-m
で動かしました。
記事書いてて気づいたのですが、突貫工事だったためにコードぼろぼろです。
突貫じゃなくても知識浅いので、間違ってたり無駄があったら教えてくれたら嬉しいです。
動かしたとこ
ブラウザ
コンソール
画像を保存したディレクトリ
ソース
html
WebCameraの映像を出すvideo要素と、サーバに送信するコマを取り出すcanvas要素を用意します。
js
video要素にWebCameraの映像を表示します。
canvas要素と、canvasの描画API にアクセスするオブジェクトを取得します。
video要素の画像をcanvas要素に取り出し、
toDataURL()でpng画像としてBase64エンコードします。
今回はpng画像しか扱わないので、エンコード後のデータの頭の"data:image/png;base64,"は不要なので取っちゃいます。
サーバサイド
受け取ったパラメータをBase64デコードして、
FileOutputStreamクラスのwriteで書き出します。
Base64のデコードには、org.apache.commons.codec.binary.Base64を使ってます。
ちょっと気になったこと
Chromeの場合、WebCameraの画像を取ろうとすると、
~がカメラへのアクセスを求めています。[許可][拒否]って出ますよね。
あれで許可するとこのプログラム動いちゃいます。
そんなことする人いないでしょうけど、他のサンプルに見せかけてこっそりユーザの画像撮れちゃうなと思ったのがちょっと気になりました。
参考にしたリンク
http://www.atmarkit.co.jp/fjava/javatips/106jakarta018.html
http://www.programmingmat.jp/webhtml_lab/canvas_image.html
http://www.ilovex.co.jp/blog/system/industrysystem/javabase64.html
http://www.html5.jp/canvas/ref/HTMLCanvasElement/toDataURL.html
http://codezine.jp/article/detail/1070
http://osima.jp/blog/howto_servlet_path.html
http://ja.wikipedia.org/wiki/Base64
http://javascript.g.hatena.ne.jp/edvakf/20100527/1274993628
http://blog.livedoor.jp/imaya_js/archives/4883165.html
http://d.hatena.ne.jp/a020265/20091123/1258969996