Comments
Description
Transcript
FlashMediaServerを用いた 簡単動画投稿サイト
FxUG@北陸 第一回勉強会 FlashMediaServerを用いた 簡単動画投稿サイト 2009.2.16 株式会社Dooga 西村 誠 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 アジェンダ ・自己紹介 ・FMSの紹介 ・動画投稿サイトの概要 ・FMS周辺の詳細 ・FFmpegについて ・苦労した点 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 自己紹介 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 ブログ:眠るシーラカンスと新米プログラマー サイト:シーラカンスのまどろみ Twitter:coelacanth 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 プログラマ歴3年 Flash歴2年 Flex歴1年 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 チーズケーキ作成歴5年!! 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 こんなんとか こんなのを売ってました こんなお店で・・・ 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 FMSの紹介 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 FlashMediaServerとは ・Flash間の相互通信を簡単に実現でき ・動画のDRM付き配信や ストリーミング配信を可能にし ・P2Pなんかも可能にするかもしれない いまとってもHot(自分の中では)なサーバー製品です 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 FlashMediaServerとは(その2) ・お値段は614.250円ととってもリーズナブル ・今はFlashMediaServerですが昔は FlashCommunicationServerという名前でした もちろん、コードの中にFCSという昔の呼び名の単語がいっぱいだっ たり、移行途中にFCSなのかFMSなのか等の呼称で混乱したりはして いませんよ・・・いませんとも・・・ ・言語はサーバーサイドAS 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 FlashMediaServerとは(その3) それではFMSを用いると何ができるのか? 【代表例】ustream,ニコニコ動画 ビデオカメラやWebカメラを用いたライブ配信 や、動画配信サイトが作れます 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 動画投稿サイトの概要 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 まずはデモ 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 材料 【サーバー側】 ・FreeBSD(OS) ・FFmpeg(おまけ) ・Apache(Webサーバー) ・MySQL(データベース) ・PHP(サーバー側言語) ・FlashMediaServer 【クライアント側】 ・Flash(録画用、再生用各1つ) ・Silverlight(おまけ) 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 サーバー側は一般のレンタルサーバーなどでは 実現し難い構成ですが、FMSを使えるレンタルサー バー(ヘテムル)などを利用すれば同様のものを作成 可能です。 ※材料のFFmpegはSilverlight再生用なので無くても可です 【ヘテムル(月額1500円)】 2009年2月23日月曜日 http://heteml.jp/ FxUG@北陸 第一回勉強会 処理の流れ 録画用FlashでFMSサーバーに接続 FMSで映像を録画、DBに情報を保存 FFmpegでSilverlight用のWMVファイルを作成 クライアントで動画一覧表示&動画再生 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 FMS周辺の詳細 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 AS3コード ドメイン:hoge.com アプリ名:hogeApp に接続するswfコードは・・・ var nc:NetConnection = new NetConnection(); nc.objectEncoding = ObjectEncoding.AMF3; nc.addEventListener(NetStatusEvent.NET_STATUS, netStatuEventHandler); nc.connect(“rtmp://hoge.com/hogeApp”); 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 ポイント!! nc.objectEncoding = ObjectEncoding.AMF3; FlashMediaServer2以前のサーバー製品 に接続する場合はAMF0!! var nc:NetConnection = new NetConnection(); nc.objectEncoding = ObjectEncoding.AMF3; nc.addEventListener(NetStatusEvent.NET_STATUS, netStatuEventHandler); nc.connect(“rtmp://hoge.com/hogeApp”); 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 ポイント2!! nc.addEventListener(NetStatusEvent.NET_STATUS, netStatuEventHandler); FlashMediaServerとの接続状態の変更 を通知してくれるイベント var nc:NetConnection = new NetConnection(); nc.objectEncoding = ObjectEncoding.AMF3; nc.addEventListener(NetStatusEvent.NET_STATUS, netStatuEventHandler); nc.connect(“rtmp://hoge.com/hogeApp”); 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 代表的なサーバー接続状態を示すNET_STATUSイベント ・NetConnection.Connect.Success サーバーとの接続成功 ・NetConnection.Connect.Rejected サーバーは動いているがなんらかの理由で 接続を拒否された。 ・NetConnection.Connect.Failed サーバーとの接続に失敗 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 動画の配信&録画&再生 ・サーバーへの接続はNetConnectionクラス ・サーバーへの映像配信や受信するために ストリームを作成するのはNetStreamクラス 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 NetStreamを用いたコード public function netStatuEventHandler(e:NetStatusEvent):void { // 先ほどのNET_STATUSイベントの値をチェック switch() { case “NetConnection.Connect.Success”: // e.targe = NetConnectionクラス var ns:NetStream = new NetStream(e.target); // 動画の情報取得用のクライアントクラス ns.client = new NetStreamClient(); // 動画を再生 ns.play(“動画ファイル名”); break // その他のNET_STATUSイベントの処理を書く } } 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 ポイント!! ns.client = new NetStreamClient(); 動画のサイズ等の情報を取得できる。 class NetStreamClient { public function onMetaData(info:Object):void { trace("metadata: duration=" + info.duration + " width=" + info.width + " height=" + info.height + " framerate=" + info.framerate); } public function onCuePoint(info:Object):void { trace("cuepoint: time=" + info.time + " name=" + info.name + " type=" + info.type); } } 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 ポイント2!! ns.play(“動画ファイル名”); ・再生する場合はplay(“動画orストリーム名”) ・配信する場合はpublicsh(“ストリーム名”) ・録画する場合はpublicsh(“ストリーム名”, “record”) 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 Swf, FMSの全コードはサイトに公開します シーラカンスのまどろみ http://coelacanth.heteml.jp/site/flash_fms/index 間に合えば・・・ 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 おまけ FFmpegについて 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 FFmpegとは? ・動画をいろいな形式に変換可能 flv→wmv=Silverlighで再生 mpeg→flv=Flashで再生 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 FFmpegとは? ・コマンドラインから操作可能 サーバーサイドスクリプトから利用できる 今回はPHPからFFmpegを用いて 動画を変換しました 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 FFmpegとは? ・動画から画像も切り出し可能 動画のサムネイルを作成するのにいいです 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 サンプルコード PHPからコマンドラインを操作する system(”コマンド”); 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 コマンドライン 実際に実行されたコード // 画像を生成 /usr/home/mac/ffmpeg/ffmpeg -y -i /usr/home/mac/RecordMovie_Red5_Streams/5.flv -f image2 -s 320*240 -ss 3 -t 0:0:0.001 -r 1 -an /usr/home/mac/public_html/recordMovie/image/5.jpg // 動画を生成 /usr/home/mac/ffmpeg/ffmpeg -y -i /usr/home/mac/RecordMovie_Red5_Streams/5.flv -f asf -acodec wmav1 -vcodec wmv2 -b 4096k -ab 128k /usr/home/mac/public_html/recordMovie/movie/5.wmv 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 参考書籍 FFmpegのコマンドオプ ション等は左書籍を参考に しました。 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 苦労した点 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 トラブル1 映像録画の際に音が無いと、音無のflvが作成され、 FFmpegでエラーになった swfは音声が一定レベル以下だと データ送信量削減のため無音にしてしまう。 Microphone.setSilenceLevel(0, 0); で、無音flvを生成しないように修正。 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 トラブル2 カメラ映像の品質を高くしすぎたために、録画さ れたファイルがとびとびになった カメラの品質を落とした Camera.camera.setQuality(0, 65); 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 トラブル3 FFmpegがflvの音声コーデック(Nellymoser) に対応していなかった subversionから最新のコミットをDLしてコンパイル 最新のFFmpegでもマイクのHzによっては変換できないものがあるらしいので、 対応していない場合警告を出すように修正 Microphone.rateでチェック 2009年2月23日月曜日 FxUG@北陸 第一回勉強会 最後に 2009年2月23日月曜日 FlashMediaServerの 魅力を実感していただけたでしょうか? 2009年2月23日月曜日 とかいいながら、 今回のデモにはFlashMdiaServerを使っていないのは Adobeさんには内緒です 2009年2月23日月曜日 映像変換+サムネイル作成を用いれば FMSによる録画ではなく、 動画ファイルをアップするような サイトも作れますね 2009年2月23日月曜日 FMSとか、勉強会とか この後の懇親会で色々お話しましょう!! FMS3.5の最新機能も非常に魅力的ですよー とかお話しましょう 2009年2月23日月曜日 ご清聴ありがとうございました 2009年2月23日月曜日