SlideShare une entreprise Scribd logo
1  sur  31
Télécharger pour lire hors ligne
開発費0円でニコニコ生放送を作ってみたPC1台とオープンソースやら学割やらあらゆるものを駆使してニコニコ生放送と同じライブストリーミングサイトを作ります。 鳥居みゆっき
1 自己紹介 1994年11月28日生まれ 現在16歳 今年11月9日にドワンゴにて最年少エンジニアとしてバイト中 「ニコ生企画放送局」という無料でニコ生などをしに行く団体にも属している Twitterは@toriimiyukki
本日のアジェンダ 基本的なニコキャストの仕組みについて ストリーミングサーバについて 各種ストリーミングサーバとの比較 Red5の構成 プレーヤーについて Webについて 各コンポーネントの連携について まとめ 2
ニコキャストって何? 3
このプロ生も放送中! 4 http://live.nicocast.com/sp/pronama に、アクセス。Flashさえ入っていればすぐに見れます。
ニコキャストの仕組み 1 5 サーバサイド クライアント
ニコキャストの仕組み 2 6 CORESERVER(Web,PHP,MySQL) クライアント プレーヤーよりAPIにストリーミングサーバのアドレスやトークンを取得 視聴ページ・プレーヤー取得 ストリーミングサーバに接続 自宅サーバ(Red5)
ストリーミングサーバの比較 1(Protocol) 7
ストリーミングサーバの比較 2(RTMP) 8
Red5のインストール手順 9 この6コマンドでRed5は動く! ちなみに、ニコキャスト(β)はこの状態で動いていました。。。
Red5アプリケーションを作ろう 10 アプリケーションとはそもそも何? 配信、中継など仕事を分けることができる 配信サーバ 中継サーバ コメントサーバ 現在のニコキャストは、 配信サーバ、中継サーバ、コメントサーバを統一。
Red5アプリケーションの作り方 11 と、その前に。
Flashについて 12 制作は、FlashBuilder4(FlexSDK4)アカデミック版を使用。 大人の方は、頑張ってかってね♪ FlexSDK4が使える環境であれば、FlashDevelopでも可能です。 ニコキャストで使っているFlashは、プレーヤーと配信コンソールの2つ。
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へパラメータを送ることが可能。
Red5になぜパラメータを送る必要があるか 14 CORESERVER(Web,PHP,MySQL) クライアント MySQLにアクセス ストリーミングサーバに接続 このユーザーは配信が可能なのか。 映像視聴ができるユーザーなのか。 自宅サーバ(Red5)
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で開発、
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を参照せずにできる!
ニコキャストのユーザー認証の仕組み 1 17 もちろんここでもユーザーを認証 CORESERVER(Web,PHP,MySQL) クライアント 確認し、受け入れるか判断。 プレーヤーよりAPIにストリーミングサーバのアドレスやトークンを取得 ストリーミングサーバに接続 視聴ページ・プレーヤー取得 ここで、PHPがMySQLのユーザー情報を参考に、放送可能かのフラグと共にトークンを生成。 自宅サーバ(Red5)
ニコキャストのユーザー認証の仕組み 2 18 この仕組を用いることによって、安全性がより高まる。 ・ニコキャスト(β)では、SWFでしかユーザー認証を  行っていなかったため、ストリーミングサーバに直接  つないでしまえば無法地帯状態だった。 ・サーバ側ですべての認証を完結しるため、  SWFファイルに認証を施すと逆コンパイルされるが、  その可能性がない。
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); }
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の返り値で受け取ることができる。
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(); }
Red5の話はそろそろいいよ! 22 と、ここまでRed5の話を長々としてきましたが 昨日、ニコキャストは、 P2Pになりました! (^_^; といっても、Red5の活躍はまだ終わってなくて、 放送の録画(アーカイブ用)とかコメント送受信の コメントサーバや、回線が細い時は放送サーバ としてまだガンガン活躍。 このプロ生も回線が細いのでRed5経由です。
ニコキャストにおけるP2Pのメリット 23 ユーザー(視聴者/配信者) ・超高画質配信ができる! (従来だとRed5的に限界,自宅サーバの回線も限界) 運営者 ・Red5サーバ(自宅サーバ)に負荷が掛からない! ユーザー・運営者ともに WINWINな関係
ついでだからP2Pのお話も 24 FlashによるP2PはRTMFPという プロトコルによって話されます。 が、しかし、RTMFPをサポートしているストリーミングサーバ はFlashMediaServerのみ。 ここで60万の買い物をしてしまうのか・・・・・・・・。
と思うかもしれないけど 25 簡単な、RTMFPサーバならAdobeが無料で提供中! もちろん、自分で関数などを追加できたりしませんが 映像配信には十分です。 使い方も簡単で、今までのアドレスを RTMFPサーバに変えるだけ。 配信者のP2P用のID(NearId)だけが 視聴プレーヤーで必要になりますが、 その他は特に必要になるものはありません。
ニコキャストP2P配信のフロー 26
Web/PHP 27 開発はただのテキストエディタ 今後はフレームワークも使用予定
MySQL 28 特にタネも仕掛けもない MySQLです。 反抗期なので命名規則には 従わず、ProgramTableとか 名付けています。
運営グループについて 29 開発・協力者募集中!
ご清聴ありがとうございました 30

Contenu connexe

Tendances

ストリーミングのげんざい
ストリーミングのげんざいストリーミングのげんざい
ストリーミングのげんざいTetsuya Morimoto
 
Unityのasset bundle運用実例@lordofknights
Unityのasset bundle運用実例@lordofknightsUnityのasset bundle運用実例@lordofknights
Unityのasset bundle運用実例@lordofknightsKouji Hosoda
 
Perl で作るメディアストリーミングサーバー
Perl で作るメディアストリーミングサーバーPerl で作るメディアストリーミングサーバー
Perl で作るメディアストリーミングサーバーHideo Kimura
 
FreeWnn に patch が送られてきた、どうしよう
FreeWnn に patch が送られてきた、どうしようFreeWnn に patch が送られてきた、どうしよう
FreeWnn に patch が送られてきた、どうしようMitsutoshi Nakano
 
Unity での asset bundle による追加コンテンツの扱い方
Unity での asset bundle による追加コンテンツの扱い方Unity での asset bundle による追加コンテンツの扱い方
Unity での asset bundle による追加コンテンツの扱い方Kouji Hosoda
 
Vimを学びたい初心者のための5つの豆知識
Vimを学びたい初心者のための5つの豆知識Vimを学びたい初心者のための5つの豆知識
Vimを学びたい初心者のための5つの豆知識alwei
 
こんなに違う!Unityアプリケーション講座
こんなに違う!Unityアプリケーション講座こんなに違う!Unityアプリケーション講座
こんなに違う!Unityアプリケーション講座Unity Technologies Japan K.K.
 
サードパーティパッケージの歩き方
サードパーティパッケージの歩き方サードパーティパッケージの歩き方
サードパーティパッケージの歩き方Takesxi Sximada
 
211120 他人の書いたPythonスクリプトをステップ実行で理解する
211120 他人の書いたPythonスクリプトをステップ実行で理解する211120 他人の書いたPythonスクリプトをステップ実行で理解する
211120 他人の書いたPythonスクリプトをステップ実行で理解するTakuya Nishimoto
 
Python入門 コードリーディング - PyConJP2016
Python入門 コードリーディング - PyConJP2016Python入門 コードリーディング - PyConJP2016
Python入門 コードリーディング - PyConJP2016Shinya Okano
 
開発環境構築からはじめるPython VisualStudio Codeとpipenvで始めるpython
開発環境構築からはじめるPython VisualStudio Codeとpipenvで始めるpython開発環境構築からはじめるPython VisualStudio Codeとpipenvで始めるpython
開発環境構築からはじめるPython VisualStudio Codeとpipenvで始めるpythontomitomi3 tomitomi3
 
かなりすごい発表(かなり) at VimConf2014
かなりすごい発表(かなり) at VimConf2014かなりすごい発表(かなり) at VimConf2014
かなりすごい発表(かなり) at VimConf2014Sugoi Kanari
 
Firefox で快適 WordPress 生活
Firefox で快適 WordPress 生活Firefox で快適 WordPress 生活
Firefox で快適 WordPress 生活dynamis
 
210911 これから始める電子工作とMicroPython
210911 これから始める電子工作とMicroPython210911 これから始める電子工作とMicroPython
210911 これから始める電子工作とMicroPythonTakuya Nishimoto
 
究極のディストリビューションUbuntu
究極のディストリビューションUbuntu究極のディストリビューションUbuntu
究極のディストリビューションUbuntuKenichi Takahashi
 
たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016
たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016
たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016Kei IWASAKI
 
CrystalFantasiaを支えきった技術と技術だけではどうにもならなかった話
CrystalFantasiaを支えきった技術と技術だけではどうにもならなかった話CrystalFantasiaを支えきった技術と技術だけではどうにもならなかった話
CrystalFantasiaを支えきった技術と技術だけではどうにもならなかった話Keisuke Utsumi
 

Tendances (20)

ストリーミングのげんざい
ストリーミングのげんざいストリーミングのげんざい
ストリーミングのげんざい
 
Unityのasset bundle運用実例@lordofknights
Unityのasset bundle運用実例@lordofknightsUnityのasset bundle運用実例@lordofknights
Unityのasset bundle運用実例@lordofknights
 
Perl で作るメディアストリーミングサーバー
Perl で作るメディアストリーミングサーバーPerl で作るメディアストリーミングサーバー
Perl で作るメディアストリーミングサーバー
 
FreeWnn に patch が送られてきた、どうしよう
FreeWnn に patch が送られてきた、どうしようFreeWnn に patch が送られてきた、どうしよう
FreeWnn に patch が送られてきた、どうしよう
 
Unity での asset bundle による追加コンテンツの扱い方
Unity での asset bundle による追加コンテンツの扱い方Unity での asset bundle による追加コンテンツの扱い方
Unity での asset bundle による追加コンテンツの扱い方
 
Vimを学びたい初心者のための5つの豆知識
Vimを学びたい初心者のための5つの豆知識Vimを学びたい初心者のための5つの豆知識
Vimを学びたい初心者のための5つの豆知識
 
こんなに違う!Unityアプリケーション講座
こんなに違う!Unityアプリケーション講座こんなに違う!Unityアプリケーション講座
こんなに違う!Unityアプリケーション講座
 
サードパーティパッケージの歩き方
サードパーティパッケージの歩き方サードパーティパッケージの歩き方
サードパーティパッケージの歩き方
 
211120 他人の書いたPythonスクリプトをステップ実行で理解する
211120 他人の書いたPythonスクリプトをステップ実行で理解する211120 他人の書いたPythonスクリプトをステップ実行で理解する
211120 他人の書いたPythonスクリプトをステップ実行で理解する
 
Python入門 コードリーディング - PyConJP2016
Python入門 コードリーディング - PyConJP2016Python入門 コードリーディング - PyConJP2016
Python入門 コードリーディング - PyConJP2016
 
rucs_vim LT
rucs_vim LTrucs_vim LT
rucs_vim LT
 
210728 mpy
210728 mpy210728 mpy
210728 mpy
 
PHP With Windows binary
PHP With Windows binaryPHP With Windows binary
PHP With Windows binary
 
開発環境構築からはじめるPython VisualStudio Codeとpipenvで始めるpython
開発環境構築からはじめるPython VisualStudio Codeとpipenvで始めるpython開発環境構築からはじめるPython VisualStudio Codeとpipenvで始めるpython
開発環境構築からはじめるPython VisualStudio Codeとpipenvで始めるpython
 
かなりすごい発表(かなり) at VimConf2014
かなりすごい発表(かなり) at VimConf2014かなりすごい発表(かなり) at VimConf2014
かなりすごい発表(かなり) at VimConf2014
 
Firefox で快適 WordPress 生活
Firefox で快適 WordPress 生活Firefox で快適 WordPress 生活
Firefox で快適 WordPress 生活
 
210911 これから始める電子工作とMicroPython
210911 これから始める電子工作とMicroPython210911 これから始める電子工作とMicroPython
210911 これから始める電子工作とMicroPython
 
究極のディストリビューションUbuntu
究極のディストリビューションUbuntu究極のディストリビューションUbuntu
究極のディストリビューションUbuntu
 
たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016
たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016
たった一ファイルの python スクリプトから始めるOSS開発入門 / PyCon JP 2016
 
CrystalFantasiaを支えきった技術と技術だけではどうにもならなかった話
CrystalFantasiaを支えきった技術と技術だけではどうにもならなかった話CrystalFantasiaを支えきった技術と技術だけではどうにもならなかった話
CrystalFantasiaを支えきった技術と技術だけではどうにもならなかった話
 

Similaire à 開発費0円でニコニコ生放送を作ってみた

【2000年代後半編】平成生まれのためのUNIX&IT歴史講座
【2000年代後半編】平成生まれのためのUNIX&IT歴史講座【2000年代後半編】平成生まれのためのUNIX&IT歴史講座
【2000年代後半編】平成生まれのためのUNIX&IT歴史講座法林浩之
 
【1990年代後半/ssmjp編】平成生まれのためのUNIX&IT歴史講座
【1990年代後半/ssmjp編】平成生まれのためのUNIX&IT歴史講座【1990年代後半/ssmjp編】平成生まれのためのUNIX&IT歴史講座
【1990年代後半/ssmjp編】平成生まれのためのUNIX&IT歴史講座法林浩之
 
ニコニコアプリ開発
ニコニコアプリ開発ニコニコアプリ開発
ニコニコアプリ開発jz5 MATSUE
 
一年ツイッター
一年ツイッター一年ツイッター
一年ツイッターXMLProJ2014
 
【1980年代編】平成生まれのためのUNIX&IT歴史講座
【1980年代編】平成生まれのためのUNIX&IT歴史講座【1980年代編】平成生まれのためのUNIX&IT歴史講座
【1980年代編】平成生まれのためのUNIX&IT歴史講座法林浩之
 
UnityでVJする
UnityでVJするUnityでVJする
UnityでVJするToru Nayuki
 
コンテンツサンプルを楽しむ"超"初心者の為のNiagara
コンテンツサンプルを楽しむ"超"初心者の為のNiagaraコンテンツサンプルを楽しむ"超"初心者の為のNiagara
コンテンツサンプルを楽しむ"超"初心者の為のNiagarahistoria_Inc
 
【2022年5月】平成生まれのためのUNIX&IT歴史講座 / 20220528 unixhistory for young
【2022年5月】平成生まれのためのUNIX&IT歴史講座 / 20220528 unixhistory for young【2022年5月】平成生まれのためのUNIX&IT歴史講座 / 20220528 unixhistory for young
【2022年5月】平成生まれのためのUNIX&IT歴史講座 / 20220528 unixhistory for young法林浩之
 
ねるねるねるねを練ったわけ
ねるねるねるねを練ったわけねるねるねるねを練ったわけ
ねるねるねるねを練ったわけrerofumi
 
独学プログラマーのその後
独学プログラマーのその後独学プログラマーのその後
独学プログラマーのその後Takayuki Shimizukawa
 
5分で解るocp
5分で解るocp5分で解るocp
5分で解るocpKoichi Ise
 

Similaire à 開発費0円でニコニコ生放送を作ってみた (11)

【2000年代後半編】平成生まれのためのUNIX&IT歴史講座
【2000年代後半編】平成生まれのためのUNIX&IT歴史講座【2000年代後半編】平成生まれのためのUNIX&IT歴史講座
【2000年代後半編】平成生まれのためのUNIX&IT歴史講座
 
【1990年代後半/ssmjp編】平成生まれのためのUNIX&IT歴史講座
【1990年代後半/ssmjp編】平成生まれのためのUNIX&IT歴史講座【1990年代後半/ssmjp編】平成生まれのためのUNIX&IT歴史講座
【1990年代後半/ssmjp編】平成生まれのためのUNIX&IT歴史講座
 
ニコニコアプリ開発
ニコニコアプリ開発ニコニコアプリ開発
ニコニコアプリ開発
 
一年ツイッター
一年ツイッター一年ツイッター
一年ツイッター
 
【1980年代編】平成生まれのためのUNIX&IT歴史講座
【1980年代編】平成生まれのためのUNIX&IT歴史講座【1980年代編】平成生まれのためのUNIX&IT歴史講座
【1980年代編】平成生まれのためのUNIX&IT歴史講座
 
UnityでVJする
UnityでVJするUnityでVJする
UnityでVJする
 
コンテンツサンプルを楽しむ"超"初心者の為のNiagara
コンテンツサンプルを楽しむ"超"初心者の為のNiagaraコンテンツサンプルを楽しむ"超"初心者の為のNiagara
コンテンツサンプルを楽しむ"超"初心者の為のNiagara
 
【2022年5月】平成生まれのためのUNIX&IT歴史講座 / 20220528 unixhistory for young
【2022年5月】平成生まれのためのUNIX&IT歴史講座 / 20220528 unixhistory for young【2022年5月】平成生まれのためのUNIX&IT歴史講座 / 20220528 unixhistory for young
【2022年5月】平成生まれのためのUNIX&IT歴史講座 / 20220528 unixhistory for young
 
ねるねるねるねを練ったわけ
ねるねるねるねを練ったわけねるねるねるねを練ったわけ
ねるねるねるねを練ったわけ
 
独学プログラマーのその後
独学プログラマーのその後独学プログラマーのその後
独学プログラマーのその後
 
5分で解るocp
5分で解るocp5分で解るocp
5分で解るocp
 

Dernier

プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 

Dernier (7)

プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 

開発費0円でニコニコ生放送を作ってみた