スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

相互配信アプリ

Twitterばっかりに書いてるとログがすぐに吹っ飛んでいくので、たまにはブログもかく!

今は相互配信アプリ(名称未定)というものを作成中です。
相互配信という言葉がそもそもあるのかわかりませんが、要するにグループビデオチャットツールです。
デスクトップからカメラまで相互に配信でき、音声ももちろん可能です。
お手軽かつ低遅延(1秒以下)なので、

オンラインゲームの居場所を互いに確認しあったり、
オフラインゲームを身内でやる際に進捗を伝え合うのに使ったり、
または、普通にテレビ電話のように使う


といった使い方ができます。
あくまでも身内で使うコミュニケーションツールで、不特定多数に配信するためのツールではありません。

iPhoneのリモートを作って、そろそろ飽きてきていたころに友人より依頼されたアプリです。
これまで培ってきたリモート関連のテクを総動員して作られているために、
なにやら配信アプリにしてはやたらと軽量だったりするそうです。


■アプリ概要
・最大32人で相互に配信できます。
 ・ひとつのウィンドウ内にグループ参加者の配信映像が流れます。

・映像、音声の配信ができます。
 ・映像ソースはスクリーンキャプチャ、webカメラから選択可能。
 ・音声ソースは各入力デバイス、Vista以降の場合は出力デバイスも選択可能です。
 ・ラグ1秒以下の低遅延配信

・高い接続性
 ・グループ内の誰か一人がポートを開放できる環境である必要があります。
 ・他の参加者に特に制限はなく、接続ができればグループ全員に配信ができます。


■簡単な技術情報
・映像、音声のエンコード、デコードにはかの有名なlibavcodec(FFMPEG)を使用しています。
・映像フォーマットは低遅延低ビットレート向けとして有名(?)なWMVを採用しています。
 ・映像ビットレートは100~520kbps、解像度はQVGAです。
 ・フレームレートは1~60の間で選択可能。
・音声フォーマットはかの有名なAACを利用します。
 ・音声ビットレートは64~192kbps、ステレオのみ。
 ・WindowsVista以降ではWASAPIを利用した低遅延再生、再生デバイスからのループバック録音が可能です。
 ・WindowsXPではWaveXx APIを利用して再生や録音がされます。
 ・各配信の音量は専用ボリュームコントロールを用いて独立に調整できます。
 ・入力は2系統選択できます。各音量は独立で調整できます。
・映像、音声の配信設定は配信中に瞬時に変更可能。(配信を止める必要はありません。)
・映像、音声ともに遅延は1秒を大きく下回ります。
・DirectShowを利用したWebカメラからの直接取り込みができます。(キャプチャーボード等は現状非対応)
・選択範囲を指定してのキャプチャ、ウィンドウを指定してのキャプチャができます。
 ・選択範囲をウィンドウに追従させることもできます。
 ・デスクトップをドラッグ操作によってキャプチャ範囲を指定できます。
 ・マルチディスプレイ環境に対応しています。
・Windows7以降のAero環境下でも高速にキャプチャーすることができます。
・DirectXを利用した低負荷再生。(配信を見るだけならば、Core2Duoで負荷5%以下、配信時で30%以下。)
・通信にはUDPを利用します。
 ・使用ポートはひとつです。
 ・一人がサーバーとなる必要があり、そこに各クライアントが接続します。
 ・サーバーはSTUNサーバーの役割をし、各クライアントが直接通信可能な場合はそちらを利用します。
 ・直接通信できない場合はサーバー経由で配信されます。
 ・サーバーは他のクライアントよりも大きな上り帯域を必要とします。(光回線推奨)
 ・サーバー以外はポートが開く環境である必要はありません。


現状サーバーがそこそこ大きな上り帯域が必要、という点が弱点ですね。
各クライアント同士で直接の接続が不可能であった場合は、サーバーはすべての動画データを中継することになります。たとえば10人参加のネットワークの場合、配信に必要な上り帯域は配信ビットレートだいたい10x10=100倍にまで膨れ上がります。320kbpsの場合は32Mbpsも使うという計算ですね。
最低設定の100kbpsにしたとしても10Mbpsも使うことになります。

逆に全員が相互に接続可能である場合は、各クライアントは自分の動画を全員に配信する分だけしかアップロードが発生しないために、配信ビットレートの約10倍(正確には9倍)の帯域1Mbpsで配信することができます。

STUNを利用して各クライアント間の相互接続を試みますが、いろいろ厳しくて、市販のルーターなんかであっても、現状ポートの開いている環境間くらいでしか接続することができません。(ポートが開いていれば、そのクライアントは他の全クライアントと直接通信が可能です。)
ここをどう解決していくかが今後の課題ですね。。。

今のとこ5人程度で集まって配信したりして遊んでいますが、
その場合は320kbpsの設定でもADSL環境でサーバーをこなせるので、通常はあまり気にしなくていいのかもしれません。
10人集まって使うなんて、それこそオンラインゲームなどの用途くらい。
スポンサーサイト
Go To 物置。
プロフィール

書いてる人:つん

まったりのんびり。書いてる人の息抜きブログです。

多分連絡先↓
metal_tsun@yahoo.co.jp

カテゴリー
リンク
月別アーカイブ
バロメーター
Java歴:2005年2月から今まで。
3DCG歴:2005年8月から数年。
C歴:2006年4月から今まで。
VB歴:2007年3月からちょっと。
Delphi歴:2007年3月からちょっと。
PIC歴:2007年5月から数年。
イラスト歴:2007年12月から今まで。
DTM歴2008年2月からちょっと。
PHP歴2008年4月からちょっと。
C++歴2008年4月から今まで。
C#歴2009年1月から今まで。
Objective-C歴2009年4月から今まで。
CSS歴2012年5月から今まで。

ブログ開始日2005/10/11


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。