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、メディアプレーヤーではありません - 何もありません。