Mais conteúdo relacionado
Semelhante a 開発費0円でニコニコ生放送を作ってみた (11)
開発費0円でニコニコ生放送を作ってみた
- 7. ニコキャストの仕組み 2 6 CORESERVER(Web,PHP,MySQL) クライアント プレーヤーよりAPIにストリーミングサーバのアドレスやトークンを取得 視聴ページ・プレーヤー取得 ストリーミングサーバに接続 自宅サーバ(Red5)
- 14. FlashのRTMPの扱い方 13 Adobeが開発したRTMPというお陰もあり、扱いがすごい楽。 varnc:NetConnection = new NetConnection(); nc.connect(“rtmp://host/app”); これだけで、RTMPに接続できる! しかし、これだけでは映像は受け取れない。 varns:NetStream = new NetStream(nc); ns.play(StreamName); video.attachNetStream(ns); と、映像を受け取っても最短5行で書くことができます。 ちなみに、 varnc:NetConnection = new NetConnection(); nc.connect(“rtmp://host/app”, “hoge”, “hoge2”); とすることによって、Red5へパラメータを送ることが可能。
- 16. Red5アプリケーションの作り方 1 15 基本的なJavaの知識があれば書ける。 適切な時に下記のイベントなどが呼ばれるのでそのタイミングで、 やりたいことを書く。 appStart, roomStart, appStop, roomStop, appConnect, roomConnect, appJoin, roomJoin, appDisconnect, roomDisconnect, appLeave, roomLeave 例1)接続してきた人を全部無条件で切断。(importは省略) package jp.package; public class Application extends ApplicationAdapter { public booleanappConnect( IConnectionconn , Object[] params){ rejectClient("Invalid Name”); return true; } } ※ちなみにeclipseで開発、
- 17. Red5アプリケーションの作り方 2 16 例2)接続してきて、パラメータにhogeが入ってた人のみ接続可能。 (importは省略) package jp.package; public class Application extends ApplicationAdapter { public booleanappConnect( IConnectionconn , Object[] params){ String username = (String)params[0]; if(!username.equals(“hoge”)){ rejectClient("Invalid Name”); } return true; } } これを使うと、ユーザー認証が DBを参照せずにできる!
- 18. ニコキャストのユーザー認証の仕組み 1 17 もちろんここでもユーザーを認証 CORESERVER(Web,PHP,MySQL) クライアント 確認し、受け入れるか判断。 プレーヤーよりAPIにストリーミングサーバのアドレスやトークンを取得 ストリーミングサーバに接続 視聴ページ・プレーヤー取得 ここで、PHPがMySQLのユーザー情報を参考に、放送可能かのフラグと共にトークンを生成。 自宅サーバ(Red5)
- 19. ニコキャストのユーザー認証の仕組み 2 18 この仕組を用いることによって、安全性がより高まる。 ・ニコキャスト(β)では、SWFでしかユーザー認証を 行っていなかったため、ストリーミングサーバに直接 つないでしまえば無法地帯状態だった。 ・サーバ側ですべての認証を完結しるため、 SWFファイルに認証を施すと逆コンパイルされるが、 その可能性がない。
- 20. Red5アプリケーションの作り方 3 19 例3)Red5君がFlash学年の関数組のA子ちゃんを急に呼びたくなった package jp.package; public class Application extends ApplicationAdapter { public void sendMessage( IConnectionconn ){ IServiceCapableConnection sc = (IServiceCapableConnection)conn; sc.invoke("recieveMessage", new Object[]{“I love you.”}); } } Flash側の関数名 関数に渡す引数 Flash側 private function recieveMessage(text:String):void{ trace(text); }
- 21. Red5アプリケーションの作り方 4 20 例4Flash組のA子ちゃんがRed5を急に呼びたくなった private function sendMessage(text:String):void{ nc.call('recieveMessage', null , “I hate you.”); } Red5側の関数名 関数に渡す引数 Red5側 public void recieveMessage( IConnectionconn, String text ){ log.info(text); //return false; } ちなみに、ここでreturnをすれば、Flash側 のcallの返り値で受け取ることができる。
- 22. Red5アプリケーションの作り方 5 21 簡単なアプリを作ってみる。接続して人数を返すだけ。(import省略) Red5側 package jp.package; public class Application extends ApplicationAdapter { public intgetRealtimeCount(IConnectionconn) { return Red5.getConnectionLocal().getScope().getClients().size(); } } Flash側 private function click_button():void{ textlabel.text = nc.call(‘getRealtimeCount', null ).toString(); }