WebRTCのgetUserMediaの映像をサーバに保存する

WebRTCのgetUserMediaでWebカメラの画像をとって、

TomcatのJavaServletに送信して保存してみました。

f:id:MoggFanatic:20130616235240p:plain

 

Java 1.7.0_21

Tomcat 7.0

Chrome 28.0.1500.44 beta-m

で動かしました。 

 

記事書いてて気づいたのですが、突貫工事だったためにコードぼろぼろです。

突貫じゃなくても知識浅いので、間違ってたり無駄があったら教えてくれたら嬉しいです。

 

動かしたとこ

ブラウザf:id:MoggFanatic:20130616235240p:plain

 

コンソールf:id:MoggFanatic:20130616235013p:plain

 

画像を保存したディレクトリf:id:MoggFanatic:20130616235016p:plain

 

ソース

 

html

WebCameraの映像を出すvideo要素と、サーバに送信するコマを取り出すcanvas要素を用意します。

 

js

video要素にWebCameraの映像を表示します。 

canvas要素と、canvasの描画API にアクセスするオブジェクトを取得します。

video要素の画像をcanvas要素に取り出し、

toDataURL()でpng画像としてBase64エンコードします。

今回はpng画像しか扱わないので、エンコード後のデータの頭の"data:image/png;base64,"は不要なので取っちゃいます。

エンコードした画像データをServletにpostします。

 

サーバサイド 

受け取ったパラメータをBase64デコードして、

FileOutputStreamクラスのwriteで書き出します。

Base64のデコードには、org.apache.commons.codec.binary.Base64を使ってます。

 

ちょっと気になったこと

Chromeの場合、WebCameraの画像を取ろうとすると、

~がカメラへのアクセスを求めています。[許可][拒否]って出ますよね。

あれで許可するとこのプログラム動いちゃいます。

そんなことする人いないでしょうけど、他のサンプルに見せかけてこっそりユーザの画像撮れちゃうなと思ったのがちょっと気になりました。

 

参考にしたリンク

http://i26.jp/html5dev/%E3%80%90html5%E3%80%91getusermedia%E3%81%A7%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%81%8B%E3%82%89%E3%82%AB%E3%83%A1%E3%83%A9%E3%82%92%E8%B5%B7%E5%8B%95%E3%81%99%E3%82%8B/

http://yuriponx.com/2012/04/04/webrtc%E3%81%A7%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%83%88%E3%82%A4%E3%82%AB%E3%83%A1%E3%83%A9/

http://www.atmarkit.co.jp/fjava/javatips/106jakarta018.html

http://www.programmingmat.jp/webhtml_lab/canvas_image.html

http://javascript.go-th.net/%E3%80%90graphics%E3%80%91canvas/canvas%E7%94%BB%E5%83%8F%E3%82%92%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89%E3%81%99%E3%82%8B%E3%80%82

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://akai0ringo.blog.shinobi.jp/java/%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%82%92%E3%83%90%E3%82%A4%E3%83%88%E5%88%97%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%97%E3%81%A6%E3%81%BE%E3%81%9F%E6%88%BB%E3%81%99

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