13

最近、MP4 をブラウザにストリーミングするためのさまざまな方法を研究しています。ここでは Flash Media Server が (Cloudfront を使用して) 当然の選択であり、私が見たほとんどのソリューションは RTMP プロトコルを使用しています。

ただし、Firebug と Chrome デバッガーを使用して YouTube でストリーミングの仕組みを調べたところ、一部の動画と品質レートに興味深い違いがあることがわかりました。

私の 2 つのサンプル動画は A とBです。A は最大 480p、B は最大 1080p で利用できます。両方のビデオについて、最大 480p のすべてのレートが、HTTP 経由で H.264 ビデオと AAC オーディオを含む FLV コンテナで提供されます。ここで興味深いのは、ビデオ全体をまだダウンロード (キャッシュ) しておらず、ビデオのキャッシュされていない部分にスキップしようとすると、新しいリクエストがターゲット オフセットに等しい「begin」パラメータで作成されることです。ミリ秒。480p のビデオ A の例:

http://v11.lscache8.c.youtube.com/videoplayback?ip=0.0.0.0&sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor%2Coc%3AU0dWTldQVF9FSkNNNl9PSlhJ&fexp=904806%2C902906%2C903711&algorithm=throttle-factor&itag=35&ipbits=0&burst=40&sver=3&expire=1279756800&key=yt1&signature=D2D704D63C242CF187CAA5B5D5BAFB8DFACAC5FF.39180C01559C976717B651A7EB1D0C6249231EB7&factor=1.25&id=8568eb3135971f6f&begin=111863

Response Headers:
Cache-Control:public,max-age=23472
Connection:close
Content-Length:14320637
Content-Type:video/x-flv
Date:Wed, 21 Jul 2010 17:23:48 GMT
Expires:Wed, 21 Jul 2010 23:55:00 GMT
Last-Modified:Wed, 19 May 2010 12:31:41 GMT
Server:gvs 1.0
X-Content-Type-Options:nosniff

この URL によって返されるファイルは、要求されたオフセットの後のビデオ部分のみを含む完全に有効な FLV です。

ビデオ B の高解像度バージョンで同じ種類のテストを行いました。720p と 1080p では、YouTube は MP4 コンテナでビデオを返し、H.264 ビデオと AAC オーディオも使用します。私にとって印象的なのは、彼らのサーバーがMP4ビデオに対して同じタイプのオフセットを(「開始」パラメーターを介して)取得し、有効でストリーミング可能なMP4(正しいオフセットを持つファイルの先頭にあるmoovアトム)を返すことです。ビデオのリクエストされた部分。

では、YouTube はこれをどのように行うのでしょうか。要求されたビデオの正しいヘッダーと必要なセグメントのみを使用して、FLV または MP4 コンテナーをその場でどのように生成するのでしょうか? これは、FFMPEG を使用して目的の開始点をシークし、qt-faststart スクリプトを使用して moov アトムをストリームの先頭に再配置することで実現できることはわかっていますが、数百万のオンデマンドを処理するには遅すぎるようです。 YouTube の視聴者。

アイデア?

前もって感謝します!

脚注: この時点で複数のリンクを含めることは許可されていないため、ビデオ A の URL を次に示します: http:// www.youtube .com/watch?v=hWjrMTWXH28 "Video available up to 480p"

4

4 に答える 4

3

このフォーラムで同様の質問がありました。 http://www.flashforum.de/forum/video/flv-ab-beliebiger-position-streamen-248483.html

利用可能な 2 つのソリューションがあります。

  1. ストリーミングサーバーを使用する
  2. 任意のプログラミング言語で記述されたファイル ラッパーを使用します (例は php で記述されています)。

どちらのソリューションでも、flvmid を使用してすべての動画を変更し、キー フレーム情報を flv-video に追加する必要があります。

2 番目のソリューションでは、php-script が上記のリクエストを受信し、パラメーターbeginで指定された位置に到達するまで flv-video を解析します。その後、動画コンテンツをページ訪問者にプッシュし始めます。スレッドを読んで、詳細情報と php-code-examples を入手してください。

元のスレッドはドイツ語で書かれていますが、http://translate.google.comを使用して下手な英語を取得できます :)

投稿した HTTP 応答には、次の行が含まれています。

Server:gvs

おそらくgvsは「Google Video Server」のようなものを意味します。gvを検索しましたが、価値のあるものは見つかりませんでした。

于 2011-05-18T16:10:50.530 に答える
1

Youtube は、ストリーミングに lighttpd サーバーを使用します。実際には、ストリーミングではなく疑似ストリーミングを使用します。このメカニズムにより、視聴者はビデオのまだダウンロードされていない部分を探すことができます

于 2012-12-06T10:28:28.360 に答える
0

YouTube がストリーミングに FFMPEG を使用しているとは思いません。flv または mp4 のいずれかのコンテナー形式は十分に単純であり、計算集約的ではありません。指定されたタイムスタンプに最も近いキー フレームを見つけて、beginそこから開始することだけが重要です。

于 2011-02-03T21:45:10.847 に答える