私は簡単なビデオフォン(学習用)を作成しており、ネットワーク上のウェブカメラから画像をキャプチャして送信するために使用するAPIを知っています。ネットワーク内のウェブカメラから画像をキャプチャして送信する最も効率的な方法
p.s.私はOpenCVのような複雑なライブラリを使用しません。
私は簡単なビデオフォン(学習用)を作成しており、ネットワーク上のウェブカメラから画像をキャプチャして送信するために使用するAPIを知っています。ネットワーク内のウェブカメラから画像をキャプチャして送信する最も効率的な方法
p.s.私はOpenCVのような複雑なライブラリを使用しません。
Windows Image Acquisition (WIA)または/およびDirectShowを使用できます。別の良い選択肢はMicrosoft Media Foundation(capturing videoの章)です。
これは面倒なことですが、これは簡単な作業ではありません。OpenCVを使用すると、よりうまくいく可能性があります。
ネットワーク部分に関しては、それはあなたのデザインと好みに左右されます。
私も同様の作業を完了しています。私は様々なツールやライブラリを見ていました。
DirectShowはWindowsのデフォルトAPIですが、単純なタスクでは複雑です。 OpenCVはデバイスサポートに遅れており、videoInput(プラグイン/アドオン)はOpenCVを改善しています。
私はシンプルな表示起動して実行することができました:videoInputライブラリとOpenCVのを使用して
http://www.aishack.in/2010/03/capturing-images-with-directx/
を:
http://muonics.net/school/spring05/videoInput/
OpenCVのは、しかし最初として、複雑に見えるかもしれリンクはコードの唯一のページを示します:
#include "stdafx.h"
#include "videoInput.h"
#include "cv.h"
#include "highgui.h"
int main()
{
videoInput VI;
int numDevices = VI.listDevices();
int device1= 0;
VI.setupDevice(device1);
int width = VI.getWidth(device1);
int height = VI.getHeight(device1);
IplImage* image= cvCreateImage(cvSize(width, height), 8, 3);
unsigned char* yourBuffer = new unsigned char[VI.getSize(device1)];
cvNamedWindow("test");
while(1)
{
VI.getPixels(device1, yourBuffer, false, false);
image->imageData = (char*)yourBuffer;
cvConvertImage(image, image, CV_CVTIMG_FLIP);
cvShowImage("test", image);
if(cvWaitKey(15)==27) break;
}
VI.stopDevice(device1);
cvDestroyWindow("test");
cvReleaseImage(&image);
return 0;
}
videoInput.hは、起動して実行するために必要なドキュメントです。そこから、より高度な機能についてOpenCVのドキュメントを読むことができます。上の例では、 "イメージ"を取り出して、何とかネットワーク経由でパイプしたいと思うでしょう。どちらがあなたの通信プロトコルにかなっています。 Windows用
典型的なアプローチ:多分live555 libraryの助けを借りて、リアルタイムのストリーミングのために、カムからビデオをキャプチャRTP protocol(UDP上で)使用するDirectShowを使用しています。
DirectShowの方法: ネットワークにオーディオ/ビデオをストリームするレンダラーフィルタと、ネットワークからオーディオ/ビデオを受信するソースフィルタを実装します。データフロー:
web-cam source filter -> your renderer filter -> [network] -> your source filter -> video renderer filter
-> audio renderer filter
Skypeは、キャプチャにDirectShowを使用し、描画にDirectXを使用します。彼らはセキュリティのための独自のネットワークプロトコルを使用する(私はあなたがこのような何かを疑う)を疑う。
私はOpenCVを使用することをお勧めしますか?あなたの意見では、どのメトスがMSNやSkypeのようなプログラムを使用していますか?ありがとう:) – xRobot
ほとんどの人は、それらを直接使用するのではなく、[GIPS](http://)のようなapisのこの種の醜い側面を隠すラッパーライブラリの形で、独自に開発した、 gipscorp.com/)、Googleが現在取得しています。 Yahooメッセンジャー、例えば。 GIPSを使用しました。 GIPSもネットワーキングの部分を扱うことができました。 :-) – Shinnok