私は現在、次のことを行うための最良の方法は何かを検討中です。
私はたくさんのCCTVフッテージファイル(MP4ファイル、サイズが4MB〜50MBの範囲)を持っています。これをWebポータルで利用できるようにしたいと考えています。私の最初の考えはWeb APIを介してファイルをストリーミングすることでしたので、以下のリンクを見つけました:
http://www.strathweb.com/2013/01/asynchronously-streaming-video-with-asp-net-web-api/
サンプルプロジェクトを実装した後、私が使用しているWeb API 2.1ではなく、Web API 1に基づいていることに気付きました。さらに調査を行った後、WebAPI 2.1でコンパイルするコードを入手しました。その後、ストリーミングを実行したい場合、MP4ファイルを使用できない場合、その背後にかなりの技術的詳細があるため、ここにスレッドがあります。
HTML5ビデオクライアントへのリアルタイムhttpストリーミングへの最良のアプローチ
これは機能するようですが、MP4ファイルをWebMなどにエンコードする必要がありますが、これには時間がかかりすぎます。 Icecast( http://icecast.org/ )、これはストリーミングサーバーですが、まだ試していません。これが必要なのかどうかはわかりません。
今考えてみると、実際にはライブストリーミングは必要ありません。クライアントがブラウザを介して、おそらくHTML5ビデオ要素を使用してビデオファイルを再生できるようにする必要があるだけですか。実は、私のアプリケーションはIOSでも動作する必要があるため、MP4をFLVにエンコードしてフラッシュを使用することさえできないということです。
私が本当に必要なのは、すべてのビデオクリップをWebページにサムネイルとして表示することだけです。クライアントがいずれかをクリックすると、ファイル全体をダウンロードする必要なく、すぐに再生を開始します。 imdb.comの「Watch Trailer」機能を考えてみてください。単にビデオファイルを再生するだけです。 LIVEストリーミングは必要ありません。WebMの目的は何ですか。もう一度、わかりません。
2つのこと:
HTMLで video element を使用します(これはブラウザーとiOSで機能します):
<video src="http://yoursite.com/api/Media/GetVideo?videoId=42" />
サポート 206 PARTIAL CONTENT
Web APIコードのリクエスト。これは、ストリーミングとiOSの両方のサポートのcrucialであり、投稿したスレッドで言及されています。
この例に従ってください:
http://blogs.msdn.com/b/webdev/archive/2012/11/23/asp-net-web-api-and-http-byte-range-support.aspx
手短に:
if (Request.Headers.Range != null)
{
// Return part of the video
HttpResponseMessage partialResponse = Request.CreateResponse(HttpStatusCode.PartialContent);
partialResponse.Content = new ByteRangeStreamContent(stream, Request.Headers.Range, mediaType);
return partialResponse;
}
else
{
// Return complete video
HttpResponseMessage fullResponse = Request.CreateResponse(HttpStatusCode.OK);
fullResponse.Content = new StreamContent(stream);
fullResponse.Content.Headers.ContentType = mediaType;
return fullResponse;
}