トップ回答者
スカイプのようなビデオ会話アプリが作りたい

質問
-
すみません、スレ違いな質問だとは思うのですが、カテゴリーが無いのでここに書き込ませて頂きました。
もしわかる方がいましたら、教えて頂けないでしょうか。Shilverlightでスカイプのようなビデオ会話アプリが作りたいのですが、これは可能でしょうか。
古い技術だとは分かっているのですが、業務でSilverlight アプリケーションを利用していまして、
そのアプリにWebカメラを利用したビデオ会話機能を付けられないかと相談されました。リアルタイムの動画配信に関してはリアルタイムエンコードをするために専用のソフトとPC、配信用のストリーミングサーバーが必要という情報までは調べまして、
ShilverlightからのWEBカメラの利用方法はわかったのですが、取得した画像情報、それを通信でどうこうするというのがまったく分かりません。Silverlight のWEBカメラから記録した画像を、何らかの通信で相手に送る等、物理的にSilverlight とWFCサービスだけでは作れない物なのでしょうか?
回答
-
質問をするときは最低限のマナーとして、開発環境やターゲット環境のバージョンくらい書きましょう。
自前アプリケーションにビデオ会話機能を組み込まなければいけない理由(SkypeなどではNGな理由)は何でしょうか? また、映像だけでなく音声も双方向にやりとりしたいのだと思われますが、音声入力には各端末のマイクを使うのでしょうか?
言及されている「SilverlightからのWebカメラの利用方法」というのが何なのか、具体的な説明がありませんが、おそらく下記のSystem.Windows.Mediaを利用する方法のことを指しているのだと推測します。
VideoSink.OnSample()をオーバーライドすることでビデオフレーム(SilverlightではPixelFormatType.Format32bppArgbのみサポートらしい)を取得でき、またAudioSink.OnSamples()をオーバーライドすることで音声フレーム(SilverlightではWaveFormatType.Pcmのみサポートらしい)を取得できます(いわゆるRawデータ)。いずれも本来は録画・録音用途を想定した機能だと思われます。もしネットワークで送受信する場合、送信側はこれらを使ってデバイスから取得したデータをなんらかの手段で通信相手に送信するだけですが、受信側はデータを解析して再生する必要があります。
なお、CaptureSource.CaptureImageAsync()とCaptureImageCompletedEventArgs.Resultを使えば、ビデオフレームをより高レベルなWriteableBitmapの形で取得できます。
単純に映像や音声をパケット化して端末間で双方向にやりとりするだけであれば、任意の通信プロトコルや通信APIを使って地道にゴリゴリ実装する方法でも可能だとは思います。ただ、非圧縮のデータを直接通信で送ろうとすると帯域がかさんでパンクするでしょう。フレームレートや解像度にもよりますが、リアルタイムかつ安定した品質の映像・音声配信機能を実装するのはかなりハードルが高く、またセキュリティ面への配慮など諸々を加味していくと、結局Cisco WebExなどの既存サービスを利用したほうが安上がりなうえに安心、という可能性もあります。
ちなみに「WFCサービス」というのが何なのか分かりませんが、WCFの間違いではないですか? WCFは高度に抽象化された通信フレームワークですが、大容量データのリアルタイムストリーミング配信に関してはパフォーマンス上問題が出る可能性もあります。
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2017年11月16日 7:58
- 回答としてマーク tata_ko 2017年11月20日 5:32
すべての返信
-
質問をするときは最低限のマナーとして、開発環境やターゲット環境のバージョンくらい書きましょう。
自前アプリケーションにビデオ会話機能を組み込まなければいけない理由(SkypeなどではNGな理由)は何でしょうか? また、映像だけでなく音声も双方向にやりとりしたいのだと思われますが、音声入力には各端末のマイクを使うのでしょうか?
言及されている「SilverlightからのWebカメラの利用方法」というのが何なのか、具体的な説明がありませんが、おそらく下記のSystem.Windows.Mediaを利用する方法のことを指しているのだと推測します。
VideoSink.OnSample()をオーバーライドすることでビデオフレーム(SilverlightではPixelFormatType.Format32bppArgbのみサポートらしい)を取得でき、またAudioSink.OnSamples()をオーバーライドすることで音声フレーム(SilverlightではWaveFormatType.Pcmのみサポートらしい)を取得できます(いわゆるRawデータ)。いずれも本来は録画・録音用途を想定した機能だと思われます。もしネットワークで送受信する場合、送信側はこれらを使ってデバイスから取得したデータをなんらかの手段で通信相手に送信するだけですが、受信側はデータを解析して再生する必要があります。
なお、CaptureSource.CaptureImageAsync()とCaptureImageCompletedEventArgs.Resultを使えば、ビデオフレームをより高レベルなWriteableBitmapの形で取得できます。
単純に映像や音声をパケット化して端末間で双方向にやりとりするだけであれば、任意の通信プロトコルや通信APIを使って地道にゴリゴリ実装する方法でも可能だとは思います。ただ、非圧縮のデータを直接通信で送ろうとすると帯域がかさんでパンクするでしょう。フレームレートや解像度にもよりますが、リアルタイムかつ安定した品質の映像・音声配信機能を実装するのはかなりハードルが高く、またセキュリティ面への配慮など諸々を加味していくと、結局Cisco WebExなどの既存サービスを利用したほうが安上がりなうえに安心、という可能性もあります。
ちなみに「WFCサービス」というのが何なのか分かりませんが、WCFの間違いではないですか? WCFは高度に抽象化された通信フレームワークですが、大容量データのリアルタイムストリーミング配信に関してはパフォーマンス上問題が出る可能性もあります。
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2017年11月16日 7:58
- 回答としてマーク tata_ko 2017年11月20日 5:32
-
マルチポストはやめてください。大変失礼な行為です。
https://ja.stackoverflow.com/questions/39563/silverlight%e3%81%a7%e3%82%b9%e3%82%ab%e3%82%a4%e3%83%97%e3%81%ae%e3%82%88%e3%81%86%e3%81%aa%e3%83%93%e3%83%87%e3%82%aa%e4%bc%9a%e8%a9%b1%e3%82%a2%e3%83%97%e3%83%aa%e3%81%8c%e4%bd%9c%e3%82%8a%e3%81%9f%e3%81%84
-
こんにちは、tata_ko さん
フォーラム オペレーターの立花楓です。当フォーラムに投稿いただいた内容ですが、外部サイトでも同じ主旨のスレッドを立てられているようですね。
円滑に情報を共有するという観点から、複数個所で質問されますと情報の分散を招く可能性がありますので、恐れ入りますが、いずれかの掲示板、或いはフォーラムに絞って投稿いただきますようお願い致します。また、以下のお知らせに TechNet フォーラムのご利用方法について記載していますので、ご確認いただけますと幸いです。
・フォーラムのご利用方法、ヘルプ、回答のガイドラインに関するお知らせ
https://social.msdn.microsoft.com/Forums/ja-JP/93915a1e-22bc-4a23-83b1-f1ff47dccc82?forum=suggestja
よろしくお願いいたします。MSDN/TechNet Community Support 立花楓