FlashでWEBカメラを使ってビデオ録画、音声録音はできるのか?

flexやairつまりFlashで、WEBカメラの入力を録画したり音声を録音したりできるのかどうか調べてみた。

結論としては、専用のサーバーがあれば可能だが、クライアントサイドのみでは恐らく不可能だという事がわかった。


1.Flash Media Server(FMS)を使う

最も一般的な方法のようだ。そもそもFlashのAPIはこのFMSを使用する事を前提として設計されている。

恐らくWEBカメラの入力を録画録音するには「Flash Media Interactive Server 3.5」が必要だと思うが60万円程度と高価で、もしもう少し安い「Flash Media Streaming Server 3.5」で可能だとしても12万円程度だ。ただ、試すだけなら無償のディベロッパー版がある。

サーバーが用意でき、金を払う気があるなら、この選択肢が最も苦労しない方法だろう。しかし、GAEで動くのかなぁ。

実際のクライアントサイドのコーディングについては下記のAdobe Developper Connectionの記事が詳しい。
Exploring Flash Player support for high-definition H.264 video and AAC audio


2.RED5を使う

オープンソースのFMSといったもののようだ。Adobeの独自プロトコルであるRTMP(Real Time Messaging Protocol)を解析して開発されたという話も。

FMSの安い方で可能なのであれば、機能性、安定性を考えてもAdobeに仁義を通すためにも買った方がいいような気がするが。

RED5を使って音声の録音をされている方がいた。「Flexで音声保存(RED5)

さてGAEで動くだろうか。RTMPをHTTPでトンネリングするRTMPTもしゃべれるようだし、ダウンロードしてみたらwarになっていてtomcatでも動くようだから可能性はある。

ただGAEではBlazeDS動作テストでストリーミング関連が難しいという事がわかっているため、そのあたりで難しいかも知れない。


3.WEBカメラ入力をBitmapDataにキャプチャーして独自FLVエンコーダーを使う

WEBカメラの入力を定期的にBitmapDataにキャプチャーして、そのフレームを独自実装のFLVエンコーダーを使ってFLVを生成するという強者もいた。

How to build your own video recorder using Flex and AIR

ただこの方法はいくつか問題がある。一つはFileクラスを使っているようなので、airで動いてもflexでは、少なくともそのままでは動かなそうだということ。もう一つは明らかに音声のキャプチャーは無理だということだ。


4.あきらめきれずにAPIを詳しく調査

ここまでで、どうやらWEBカメラのビデオ録画、音声録音はサーバーがないと無理そうだと言う事がわかった。

しかしあきらめきれず、本当にどうにかならないのか?と思い、APIをより詳しく調べることにした。結論としては、やはり無理そうだ。

まずWEBカメラの入力を取得するにはflash.net.NetStreamクラスしかなさそうだということ。attachCamera()やattachAudio()というメソッドは他のクラスには見当たらなかった。

NetStreamを使うためにはflash.net.NetConnectionクラスが必要だ。NetConnectionは基本的にはFMSに接続する場合に使用するが、FMSでないURLを指定したり、ローカル接続ならconnect(null)でも大丈夫のようだ。ただ、このクラスで映像や音声データを取得する事はできない。

NetStreamに例えば、record()やgetEncodedByteArray()などのようなメソッドがあればいいのだが、そのようなことをするメソッドは見当たらなかった。


5.結論

FMSかRED5を使うのが良いでしょう。クライアントサイドのみでは多分無理。

とりあえず、RED5がGAEで動くのかどうか試してみる価値はある。でも、通信の問題が解決できても、GAEではファイルシステムが使えないのでやはり難しいかも・・・

ファイルシステムだけの問題ならオープンソースの利点を生かしてGAEアダプターみたいなものを作れる可能性もあるが、相当苦労が伴うだろう。

しかし、YouTubeでは最近、WEBカメラの入力をアップロードする「ウェブカメラから動画を録画」機能があるわけで・・・ちゃんとできてるもんなぁ〜・・・やはりバックエンドではFMSやRED5を使っているのだろうか・・・

コメント

このブログの人気の投稿

レオナルド・ダ・ビンチはなぜノートを「鏡文字」で書いたのか?

macでsmb(samba)共有サーバーに別名で接続(別アカウント名で接続)する方法

Google DriveにCURLでアップロードするには?