28

JPEG 画像として毎秒約 5 フレームで、リモート ビデオ ソースからデータベースに画像が送信されています。ライブ ビデオ フィードを Silverlight にストリーミングできるように、これらの画像をビデオ形式にする方法を見つけようとしています。

MJPEG ストリームを作成するのは理にかなっているように思えますが、いくつか問題があります。まず、HTTP リクエストを介してストリーミングしようとしていたので、ソケットを扱っていませんでしたが、これが私のコードを壊している可能性があります。

QT から自分のストリームにアクセスしようとすると、ビデオ エラーが発生し、メディア プレーヤーに最初のフレーム イメージが表示され、Silverlight がクラッシュします :)

ストリーミングするコードは次のとおりです。この方法で使用されるコンテンツ タイプは、理想的ではなく、根本的な原因である可能性があることがわかっている場合にのみ送信できるためです。すべての画像は LINQ2SQL オブジェクト経由で入ってきます。

Silverlight で画像コントロールの画像ソースを単純に更新しようとしましたが、ちらつきは受け入れられません。Silverlight が MJPEG をサポートしていない場合は、続行しても意味がありませんが、サポートされているようです。入ってくる h.264 フレームにはアクセスできますが、MP4 経由ではより複雑に見えました。

    Response.Clear();
    Response.ContentType = "multipart/x-mixed-replace; boundary=--myboundary";
    ASCIIEncoding ae = new ASCIIEncoding();
    HCData data = new HCData();
    var videos = (from v in data.Videos
                 select v).Take(50); // sample the first 50 frames
    foreach (Video frame in videos)
    {
        byte[] boundary = ae.GetBytes("\r\n--myboundary\r\nContent-Type: image/jpeg\r\nContent-Length:" + frame.VideoData.ToArray().Length + "\r\n\r\n");
        var mem = new MemoryStream(boundary);
        mem.WriteTo(Response.OutputStream);
        mem = new MemoryStream(frame.VideoData.ToArray());
        mem.WriteTo(Response.OutputStream);
        Response.Flush();
        Thread.Sleep(200);
    }

ありがとう!

編集:私はFirefoxで動作するストリームを持っているので、ページにサーフィンするとビデオが表示されます! しかし、他に何もフォーマットを受け入れません。IE、SL、メディアプレーヤーではありません - 何もありません。

4

5 に答える 5

2

私はずっと前 (3 ~ 4 年前) に MJPEG を作成しましたが、詳細を思い出そうと頭をかきむしっていますが、どうしてもできません。しかし、可能であれば、MJPEG コンテンツをストリーミングし、wireshark/ethereal を起動して、ネットワーク経由で何が得られるかを確認する Web サイトを見つけることをお勧めします。私の推測では、Firefox がもう少し寛容である必要な HTTP ヘッダーがいくつか欠けていると思います。

インターネット上でサンプルの MJPEG ストリームが見つからない場合、多くの Web カメラには、MJPEG ストリームを提供するソフトウェアがあります。私が使用したアプリは、複数のセキュリティ カメラ用のコンソールだったので、すべてのタイプのカメラに共通の実装であることはわかっています (Web インターフェイスをサポートしている場合)。

于 2008-11-05T21:59:32.803 に答える
1

私は MJPEG ストリーミングの専門家ではありませんが、sourcefourge のmjpg-streamerのソースを見て、各フレームを個別に送信し、それぞれの前後に境界を記述すべきだと思います。もちろん、終わりの境界に content-type を書くべきではありません。

于 2008-11-05T10:22:51.870 に答える
0

まず、mjpeg フレームを別のファイルに書き出します。その後、これらを Phototshop で開くことができるはずです (これにより、ストリームを正しく解析していることを個別に確認できます)。これが失敗した場合は、画像データに HTTP ヘッダーが埋め込まれている可能性があります。

于 2008-10-19T17:11:18.663 に答える
0

編集について: MJPEG は Firefox と Safari でサポートされています。ただし、Explorer や Silverlight など、使用している内容に応じて、他のアプリケーションはそうではありません。

于 2008-12-17T19:48:57.993 に答える
0

ネット上に存在するさまざまな Web カメラの設定を見たことがありますか? それらの多くは、ちらつきのない低解像度の更新を行います。これらのタイプのサイトをリバース エンジニアリングして、問題の追加の手がかりを得ることができるはずです。

一部のサイトでは、GIF アニメーションを作成しています。これは、ユーザーが過去 1 分間ほどを見ることができるようにするためのオプションである可能性があります。

于 2008-10-20T19:36:57.650 に答える