2017-11-28 4 views
0

私はCGIコマンドを使用して長い間ビデオを表示するために、IPカメラを使用してc#2013、Windowsフォームを使用してプロジェクトを作成しています。 私が知った記事から、IPカメラのストリーミングビデオの復帰は連続した複数の部分からなるストリームであることがわかります。私はこのようなビデオを表示するサンプルをいくつか見つけましたWriting an IP Camera Viewer in C# 5.0 IPカメラ連続スナップショット対ビデオ

単一の画像を表す単一の部分を抽出して表示するコードがたくさんあります。 また、次のコードを使用してカメラからスナップショットを連続して撮ろうとしました。

HttpWebRequest req=(HttpWebRequest)WebRequest.Create("http://192.168.1.200/snap1080"); 
    HttpWebResponse res = (HttpWebResponse)req.GetResponse(); 

    Stream strm = res.GetResponseStream(); 
    image.Image = Image.FromStream(strm); 
とこのコードを1秒間ループして繰り返し、このコードを繰り返します。 1秒間に撮影されたスナップショット数は88〜114枚/秒です

IMHOビデオを表示する最初の例は、マルチパートレスポンスの単一部分を抽出するための多くの処理を行い、それは連続スナップショットを撮る他の方法ほど遅いかもしれません。 ビデオを表示する2つの方法に違いがある場合は、この問題で他の開発者の経験を求めます。また、メモリ上で連続した複数の部分からなるストリームを受信することの効果を知りたい場合は、それが安全か、メモリ不足エラーが発生します。 ありがとうございます。

答えて

0

イメージとストリームを正しく処分している限り、メモリに問題はないはずです。私は過去にIPカメラで同様のことをしました。スナップショットとして撮ったすべての画像をffmpegを使ってビデオに変換しても(私はそうだったと思います)。

+0

スナップショットを実行してビデオとして再生する場合のメモリの問題は心配していません。あなたが言ったように、イメージを破棄することができます。ストリームを処理しなかった場合、ストリームはイメージバイト。私は2番目のケースではメモリが心配です。私はこの場合メモリストリームを処理できないと思います。 – Ahmed

+0

Image.FromStream()を呼び出すと、ストリームが再び使用されないようにデータをコピーしています。ビデオを一定の返送データで使用している場合は、HttpResponseストリームを閉じずに、送信されたバイトを使用して画像を作成します。これは、MemoryStreamを使用して行うことができ、メモリストリームはImageが作成された後に破棄することができます。 – netniV

+0

netniV、ご協力いただきありがとうございます。あなたは別のストリームに1つの画像を作成するバイトを取り、これを処分することができますが、HttpResponseストリーム自体についてはどうなりますか(それは私が心配していることです) – Ahmed

1

1秒間に1つ以上のJPEGを撮影している場合、H264ビデオストリームをよりよくキャプチャすると、帯域幅とCPUが少なくなります。

通常、mjpegストリームは同じh264ストリームの10-20倍です。だから毎秒80枚のスナップショットが本当に大量です。

+0

VLCを使ってH264ビデオストリームを再生しようとしましたが、前に述べた2つの方法よりも遅延が悪いです。 H264がこれのようになるのは普通ですか? – Ahmed

関連する問題