Webカメラで撮影した映像をサーバからクライアントに送りたい
こんばんは、現在、Qtでプログラミング中の学生です。
今、パソコンのWebカメラで撮影した映像をサーバー側プログラムとクライアント側プログラムで
やり取りするコードを書いているのですが、まったくうまくいきません。
クライアントに送信はできるのですが、クライアント側で映像を再構築するとなぜか映像が切れ切れ(テレビの調子が悪い時のあの感じです。)になります。
そこで、UDP送信でカメラ映像をサーバ・クライアント側でやり取りするプログラムのヒントをいただけないでしょうか?
私の方法を簡単に書いておきます。問題点を指摘していただくだけでも構いません。
「サーバ側」
Webカメラで動画撮影→OpenCVの関数でキャプチャー→QByteArrayに変換→QByteArrayのメンバ関数appendで画像の縦、横情報をつける→UDPのwriteDatagramでクライアントに送信
「クライアント側」
UDPのreadDatagramで情報取得→QByteArrayのメンバ関数indexOfで画像の縦、横の情報を探して取得(送る前にタグつけてるので、それを探させます)→QByteArrayのdata()関数でデータ型をcharに変更→ネットから拾ってきた関数(1)を使ってcharをQImageのデータ型に→QImageをQPixmapに→QPixmapをラベルに張り付ける
関数(1)
QImage* MainWindow::char2QImage(char *cdata)
{
int channels = 3;
QImage *qimg = new QImage(width_data, height_data, QImage::Format_ARGB32);
char *data = cdata;
for (int y = 0; y < height_data; y++, data += width_data * channels)
{
for (int x = 0; x < width_data; x++)
{
char r, g, b, a = 0;
if (channels == 1)
{
r = data[x * channels];
g = data[x * channels];
b = data[x * channels];
}
else if (channels == 3 || channels == 4)
{
b = data[x * channels];
g = data[x * channels + 1];
r = data[x * channels + 2];
}
if (channels == 4)
{
a = data[x * channels + 3];
qimg->setPixel(x, y, qRgba(r, g, b, a));
}
else
{
qimg->setPixel(x, y, qRgb(r, g, b));
}
}
}
return qimg;
}