入力で RGB ストリームを受け取り、ストリームを圧縮してディスクに保存する C# アプリケーションを作成しました。私のテストでは、ビデオをストリーミングするサーバー(同じPC上)として機能するアプリケーションを実行しています。
私のクライアント アプリケーションのコアは次のとおりです。
void client_ColorFrameReady(object sender, ColorFrameReadyEventArgs e)
{
if (writer != null)
{
count++;
if (count % 2 == 0)
writer.WriteVideoFrame(ResizeBitmap(BitmapImage2Bitmap(e.ColorFrame.BitmapImage), 320, 240));
}
else
{
writer.Close();
}
}
}
の型writer
はライブラリVideoFileWriter
からのものです。aforge.net
アプリケーションは正常に動作しますが、RAM の使用量に関連する問題があります。
私のアプリケーションがフレームを取得するとき、サーバー アプリケーション (ビデオをストリーミングするアプリケーション) から使用される RAM は、時間とともに直線的に増加します。実行時のみ RAM が解放さwriter.Close()
れます。
メソッドBitmapImage2Bitmap
と ResieBitmap を以下に示します。
private Bitmap BitmapImage2Bitmap(BitmapImage bitmapImage)
{
// BitmapImage bitmapImage = new BitmapImage(new Uri("../Images/test.png", UriKind.Relative));
using (MemoryStream outStream = new MemoryStream())
{
BitmapEncoder enc = new BmpBitmapEncoder();
enc.Frames.Add(BitmapFrame.Create(bitmapImage));
enc.Save(outStream);
System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(outStream);
// return bitmap; <-- leads to problems, stream is closed/closing ...
return new Bitmap(bitmap);
}
}
private static Bitmap ResizeBitmap(Bitmap sourceBMP, int width, int height)
{
Bitmap result = new Bitmap(width, height);
using (Graphics g = Graphics.FromImage(result))
g.DrawImage(sourceBMP, 0, 0, width, height);
return result;
}
アプリケーションで RAM の使用を制限できますか?