MJPEG ストリームを作成しようとしています。一連の jpeg をストリームにまとめて、ユーザーが URL をクリックして mjpeg ストリームを取得できるようにしたいと考えています。私はここ数日、これを機能させるために努力してきましたが、それは不可能かもしれません。私はエーテルを育て、ネットのどこかで軸カメラからのパケットを聞いて、それを模倣しようとしました。私はもともとWCFを使用して「ストリーム」を返そうとしましたが、後でそのストリームにコンテンツタイプを設定する必要があることがわかったので、WCF REST APIを試しましたが、同じ問題に苦しんでいます。そのため、必要最小限の HTTPListener を使用してイベントを処理しています。私は WCF を使用したいと思っていますが、適切なコンテンツ タイプのストリームを返すことができるかどうかはわかりません。だからここに」
リスナーのコールバックのハンドラーに次のように記述します。
HttpListenerResponse response = context.Response;
response.ProtocolVersion = new System.Version(1, 0);
response.StatusCode = 200;
response.StatusDescription = "OK";
response.ContentType = "multipart/x-mixed-replace;boundary=" + BOUNDARY + "\r\n";
System.IO.Stream output = response.OutputStream;
Render(output);
Render メソッドは次のようになります
var writer = new StreamWriter(st);
writer.Write("--" + BOUNDARY + "\r\n");
while (true)
{
for (int i = 0; i < imageset.Length; i++)
{
var resource = Properties.Resources.ResourceManager.GetObject(imageset[i]) as Bitmap;
var memStream = new MemoryStream();
resource.Save(memStream,ImageFormat.Jpeg);
byte[] imgBinaryData = memStream.ToArray();
string s = Convert.ToBase64String(imgBinaryData);
writer.Write("Content-type: image/jpeg\r\n");
foreach (var s1 in imgBinaryData)
{
writer.Write((char)s1);
}
writer.Write("\n--" + BOUNDARY + "\n");
writer.Flush();
Thread.Sleep(500);
}
}
この時点で、いくつかの jpeg 画像を dll のプロパティとして追加し、それらを反復処理しています。最終的にこれらは動的画像になりますが、今のところは機能させたいだけです。
MJPEG(仕様)について私が理解していることから、コンテンツは multipart/x-mixed-replace および境界セットに設定する必要があるということです。次に、ストリーム内の jpeg を境界で区切ります。
これは、私が作っているよりも簡単なはずですが、どこが間違っているのか疑問に思っています。この URL を IE または Firefox にロードすると、ハングします。ソースが URL である img タグを使用してスタブ HTML ページを作成しようとすると、壊れた画像が表示されます。
任意のアイデア、ありがとう
ジョシュ