カテゴリー: スマートフォン
参照数: 16756

 

ダウンロード

 Windows Native バージョン

実験段階ですが、仮想キャプチャデバイスとして動作するドライバも含めました。受信した動画をWindowsのキャプチャデバイスとして使用することができます。 下の方に説明がありますので・・

但し、コーデックは、WebMとSILKのみですが、軽いです。

使用条件
Microsoft Visual C++ 2010 再頒布可能パッケージ
Windows版(Setup版) Download 2012/4/29 Update!!

Windows版 Download 2012/4/29 Update!!

 Source code Download

 

Android バージョン

コーデックは、WebMとSILKのみで、送受信できます。

使用条件

ダウンロードは、Androidマーケットから、DWCameraで検索すれば見つかりますので、よろしくお願い致します。

DWCameraの使い方

 

 

.NetFramework バージョン
使用条件
.Net Framework 2.0 ~ 3.5
上記のいずれかが必要です。

Windows版 Download 2011/06/17 Update!!

 

WindowsMobile バージョン

使用条件

WindowsMobile 5以上
WindowsMobile版 Download 2011/05/06 Update!!

 

・.NetFramework バージョン(初期実験アプリ)

ffmpegなり、x264等を調査しながら、適当に開発をしていたら、おもしろい物が完成しましたので、公開します。
動画と音声を、UDPにてリアルタイム転送するソフトウェアです。
UDPのポートは、1つしか使っていません。 RTPとは異なる方法でストリーミングします。
簡単な、会議や生中継(ライブ配信)なんかに使えると思います。
元々の目的は、リアルタイム動画配信が実現可能かを実験していましたが、興味本位でどんどん拡張してこんな形になりました。
ビューワ側は、DirectShowを使わずにGDIで表示しているので、少々重い場合があるかもしれません。
かなり細い帯域でも、なんとかなるようで、Willcom回線で実験した結果、ビットフレーム:96 フレームレート:20 程度ならWebMで、それなりにストリーミングできるようでした。
送信先は、UDP(5555)なので、ブロードキャスト(192.168.0.255等)すれば、ネットワーク全体に配信もできます。
WebMことVP8とx264ですが、開発中の最新の物をGitにてダウンロードしてMingwでコンパイルしたものを使用しています。
2011/5/22にて、最新のx264とlibvpxをビルドしてみたところ、双方とも、さらに進化しているように感じます。
x264は、最速の方法を行うと画質が格段に落ちてしまうのですが、帯域が太く高解像度の画質では、とても美しい出力ができるようです。
libvpxは、高速エンコードにもかかわらず、美しい結果が出力されています。 なんとなく、libvpxが一歩リードしてきたかなぁと感じます。
両方とも、パケットロスで崩れてしまうことがあると思いますが、x264は、周期的にキーフレームを送信してフル画像を転送するようで復活します。libvpxも、キーフレームを送信するようにしたので、復活するようになりました。
最近、Celtという音声コーデックを知ったので、実装してみました。 まだまだ、発展途上らしく、サンプリングレートを切り替えられません。 Athron64では、なぜかノイズが入ります。 Core2では発生しませんでした。 今後の修正で改善されるとは思いますが・・・
それと、Skypeで有名なSILKも実装しました。 高いサンプリングレートはできませんが、低遅延性と品質のバランスが良く、使い安い音声コーデックだと感じました。
IPv6に対応しました。 これで、Freenet6等を使って、グローバルアドレスで接続できるようになりました。

ScreenShot
DWMedia起動画面

・使い方
メディアキャプチャ
カメラデバイスからキャプチャして、送信するソフト
DWMediaCaptX.exe
起動して、キャプチャデバイスと解像度を選択して、開始を押せば、送信しつづけます。
音声も同時に配信します。

入力値
[送信先]  メディアキャッチャーが起動しているIPアドレスや名前を入力します。
[MTU] 最大パケットサイズを指定します。 大きい値を入れると、一回に送信する容量が増えますが、UDP送信なので、全てのサイズを届けられる保障がありません。 確実に送信できるサイズを指定して下さい。 送信すべきパケットが大きくなっても、自動的にこのサイズに分割します。
[送信間隔] UDP送信する間隔(ミリ秒)です。 0にすると、ウエイト無しで、送信しつづけます。 送信帯域が小さい回線を使用する場合、ある程度の待機が必要になります。
-----映像設定 -----
開始ボタンの上にあるVideoのチェックを入れることで、ビデオ送信を行います。
[映像-ビットレート] おおよその圧縮サイズを指定します。 エンコーダに圧縮サイズを指定する値です。 少なければ、小さいサイズに圧縮できますが、画質が劣化します。 大きければ、画質が向上しますが、大きいサイズになってしまいます。
[映像-フレームレート] 1秒間にビデオキャプチャする画像コマ数を指定します。 
[映像-強制送信間隔] 貯まっているパケットを強制的に送信する間隔(ミリ秒)です。 リアルタイム送信する場合、0に指定することで、Framerateに合わせて送信します。 MTUに貯めて送信したい場合、大きい値にすることで、効率の良い帯域を使用した送信ができます。
[エンコーダタブ] 選択したタブにより、エンコードを切り替えます。 H.264を選択した場合、x264でエンコードします。 WebMを選択した場合、libvpxでエンコードします。
----- 音声設定 -----
開始ボタンの上にあるVoiceのチェックを入れることで、音声送信を行います。
[音声-エンコーダ] エンコードするエンコーダを選択します。 Speex..会話等に適したエンコーダ Vorbis..音楽、音声に適したエンコーダ AAC..音楽、音声に適したエンコーダ Celt..発展途上のエンコーダ SILK..Skypeにて使用されているエンコーダ
[音声-サンプリングレート] 1秒間に符号化するサンプル数です。 会話程度:6000-11000 音楽:22000-48000
[音声-強制送信間隔] 貯まっているパケットを強制的に送信する間隔(ミリ秒)です。 
[音声-チャンネル数] 音声トラック数を指定します。 1..モノラル 2以上..ステレオ
[音声-品質] 各エンコーダの音質を指定します。 少なければ、小さいサイズに圧縮できますが、音質が劣化します。 大きければ、音質が向上しますが、大きいサイズになってしまいます。
----- 送信チャンネル -----
送信チャンネルとは、送信するパケットに対して、チャンネルを設定することで、受信した時に指定のチャンネルだけを受信といった用途で使います。
一つのチャンネルに、ビデオと音声をまとめて送信します。
チャンネルは、最大で10チャンネルまで使用できます。
送信側で、チャンネル2で送信すれば、受信側のチャンネル2にパケットが貯まります。 別々の送信者が、それぞれのチャンネルで送信すれば、受信側は、同時に2つのチャンネルを受信することができます。
---- 送信と停止 ----
キャプチャデバイスを選択します。 キャプチャデバイスとは、Webカメラ等の画像入力装置としてWindowsにインストールされているカメラ機器です。
キャプチャデバイスを選択すると、右のリストに解像度が表示されるので、送信する解像度を選択します。
映像有効と音声有効のチェックを切り替えることで、映像のみ音声のみ、両方を選択できます。
開始ボタンを押下することで、送信開始します。
停止ボタンを押下することで、送信停止します。
送信中にストリーム設定とフィルタ設定を行うことができます。
ストリーム設定は、キャプチャデバイスのドライバが提供する設定用ダイアログが起動します。 設定できる場合と、できない場合があるようです。
フィルタ設定は、カメラの絞りや、色相等を変更することができます。

メディアキャッチャー
配信データを受信し、表示再生するソフト
DWMediaCatch.exe 
メディアキャプチャで送信されるパケットを受信し、表示再生するソフトウェアです。
起動し、受信し始めると、受信したチャンネルが表示されます。
「1-」のような表示が真ん中左に表示されていれば、受信バッファに貯まっていることがわかります。
ビューワ起動ボタンの左の数字に受信したいチャンネルを指定してビューワ起動ボタンを押下することで、新しいWindowが開いて再生を始めます。
起動すると音声が再生されます。 H.264で送信されている場合、X264タブに表示します。 WebMで送信されている場合、VP8タブに表示します。
複数チャンネル受信したい場合、同じ操作を繰り返すことで、1と2チャンネルの同時表示も可能です。

 

Windows Native バージョン(仮想キャプチャデバイス付き)

どうも、GUIアプリケーションは不得意で、MFCで、ごりごりなんて、最悪に手間がかかるので別の方法は無いものかと探していたら、Qtライブラリが良いとのことで、Qt版を作ってみました。

噂通り、効率良く開発が出来るようですね。 まだまだ、初心者でしょぼいGUIしか作れませんが、今後は、Qt版を中心に発展させていく予定です。

Qtは、クロスプラットフォームでもあるようなので、Android版も目指す予定です。 (完成しました・・・Qtは使ってないです)

いまのところ、Qt版は、SILKとVP8のみですが、それほど、高級な用途は無いでしょうから、コーデックを増やす予定はありません。

Qt版のみの機能として、送信先アドレスを複数指定することでできます。

最終設定も記録できるようにしましたので、使い勝手も向上しているかと思います。

これで、LAN上でストリーミングラジオのような使い方も出来るかと思いますよ。

Android版を作成したので、何か便利な利用方法は無いかと考えていたところ、ひらめいたので、作ってみました。

受信した動画をキャプチャデバイスとして利用することで利便性と拡張性が上がるのではないかと思い作ってみました。

WDK(Windows Driver Kit)をダウンロードして、探っていると仮想キャプチャデバイスがあったので、画像をユーザプログラムから叩き込む方法を考え出して、作ってみました。ドライバは、普段作らないのですが、過去に仕事でやっていた時期があるので、なんとか完成しました。しかし、まだまだ、実験段階の状態ですよ。

仮想キャプチャデバイスのドライバは、Qt版を解凍するとフォルダが作成されますので、インストールして下さい。

※Setup版は、ドライバもインストールするようにしています。

インストールは、capturedriverの中のx86かx64(64Bit用)にinstall.exeがあるので、これを実行すればインストールできます。但し、管理者権限(Administrator)で実行して下さい。

次に、dwmedia.exeを立ち上げて、これにDWCamera(Androidアプリ)や上のアプリ等の動画を受信させると、RecieveChannel Listにチャンネルが表示されるので、右クリックでViewを選択すれば、動画表示のウインドウを表示します。

ウインドウ上部のON AIRボタンを押すと、仮想キャプチャデバイスに動画を流し込み始めます。

後は、このキャプチャデバイスを何かのアプリケーション(VLC等)で使うことができます。

にしても、ドライバの名前とかが、WDKのサンプルのまんまではかっこ悪いので、暇をみてちゃんとした物に作り直す予定です。

 

 

 

・Android バージョン

アンドロイド版がやっと完成しました。

動画と音声を送受信出来るようになりました。

ヤフオクで手に入れた L-04C用に作成したので、Android 2.2以上用となります。

Android 2.3以上だと、がっつり使ったAndroidのネイティブライブラリのインターフェース不一致が発生してしまっていましたが、2バージョンをパッケージに含めることで、対応しました。

2バージョンのライブラリを含める方法が、結構、難しかったのですが、なんとか出来ましたので、いつか、やり方を記載する予定です。

初めて作ったのですが、案外、早く出来上がりました。 Androidの開発環境が成熟しているんだと思います。

NDKをフル活用して作成したのですが、元々、C系のエンジニアなので、すんなり開発できたのが良かったのかなと思います。

作ってみた印象ですが、Android開発は、楽しいですね。 まだ、受信に対応していないので、開発を継続していきます。

使用しているコーデックは、WebMとSILKです。 Qt版で閲覧出来るように作りました。


・実験
H.264は、x264でエンコードし、ffmpegでデコードしています。
WebMは、libvpxでエンコードし、libvpxでデコードしています。
H.264の方が、画質、速度ともに幅広い設定ができます。 WebMは、低帯域によった傾向があるようです。
実力は、応用の幅がきくH.264かと思いますが、WebMの実力は、既に相当なレベルに達しています。
ビデオチャット等への応用は、WebMの方が上をいっているかもしれません。

WindowsMobile バージョン
WindowsMobile版が、なんとか形になりました。 但し、キャプチャ専用です。
ビデオは、libvpxで、音声は、SILKで実装してみました。
適当な実装なので、怪しい動き満載です。 動作は、WindowsMobile5以上です。
初代、ZERO3こと、WS003SHとWS020SH、EM-ONEで動作確認しました。
Arm用のアセンブラソースが、正しくコンパイルできないソースがあるので、最高速度のパフォーマンスは出ていません。
使い方は、Cabをセットアップして、Program Files/WM5TEST/WM5TEST.exeを動作させて下さい。
下のメニューのOKボタンを押下して、必要なパラメータを入力してから、OKボタンで開始します。
終了は、HELPボタンから、Exitを選択して下さい。