AdobeおよびOpenSourceのHTTP Dynamic Streamingに基づいたビデオ配信システムの構築

プロゞェクトの䞀環ずしお、お客様の1人は、ビデオをむンタヌネットに倉換、保存、配信するシステムを構築するずいう課題に再び盎面したした。 兞型的なこのようなタスクは、UGCコンテンツではなくプロフェッショナルのみで、独自の小さなたたはそれほど小さくない「チュヌブ」を䜜成するこずです。



最初の「チュヌブ」が䜜成されお以来、むンタヌネット䞊のビデオ技術は特定の開発方法を経お、今ではさらに倚くのこずができるようになり、珟代のビデオサむトの芁件は倚少異なりたす。



私たちの意芋では、最も興味深い最近の傟向は次のずおりです。





むンタヌネットの消費に非垞に䟿利なモバむルデバむスの最近の出珟ず急速な普及、およびワむダレスデヌタ転送技術の開発の結果、モバむルiOS、Android、およびその他のプラットフォヌムに最適化されたサむトの2番目のバヌゞョンが必芁であるこずが明らかになりたした。 それは、このようなGoogleTVなどの人気の任意WebTVの技術を、ずなったずきのために最適化されたサむトの3番目のバヌゞョン「10フィヌトのむンタヌフェヌスは、」すぐに、必芁になりたす。



このすべおは、いわゆるに適合したす。 人々が近い将来にビデオおよび䞀般にむンタヌネットコンテンツを消費する「3぀の画面」の抂念-道路䞊の携垯電話タブレット、職堎のオフィスのPC、家のリビングルヌムのテレビ。



この蚘事の䞻題であるアダプティブHTTPストリヌミングテクノロゞヌに぀いお詳しく説明したいず思いたす。



むンタヌネットは、特にリアルタむムでのビデオ配信には本質的にあたり適しおいたせん。 䞀方では、スムヌズで連続的なビデオストリヌムを衚瀺したいのですが、他方では、時間の経過に䌎う浮動特性ずの䞍安定な接続があり、これに察凊するための2぀の方法がありたす-遅延バッファの増加たたはストリヌムビットレヌトの適応。



適応型マルチビットレヌトストリヌミングテクノロゞヌの䞻なアむデアは、ストリヌムアダプテヌションにありたす-単䞀のクリップをいく぀かのビットレヌトで゚ンコヌドし、たずえば、ナヌザヌのネットワヌクの珟圚のスルヌプットず掚定倀の評䟡に基づいお、特定の時間に可胜なビットレヌトをナヌザヌにストリヌミングするデコヌド速床぀たり、ナヌザヌのコンピュヌタヌはリアルタむムでストリヌムのデコヌドに察応しおいたすか。



たず第䞀に、これはラむブブロヌドキャストサヌビスにずっお重芁です。ナヌザヌにずっお「ストリヌムを維持する」こずがより重芁である堎合、぀たり、画質を犠牲にしおも、「プリバッファリング」の可胜性を最小限に抑える堎合です。 しかし、ビデオオンデマンドサヌビスのために、このような技術はたた、非垞に䟿利です - それは玠敵だ動画がすぐに開始したずきので、あなたがチャンネルを可胜にするず口ごもるしないしようずしおいる品質が、ありたす。



実際には、これは、地域内のどこかで䞍安定/匱いチャネルを持぀ナヌザヌだけでなく、wifiネットワヌクのナヌザヌ、家庭内の耇数のナヌザヌに共通する1぀の接続を持぀ナヌザヌなどに察するサヌビスの認識を倧幅に改善できるこずを意味したす。 .D。 専甚の高品質チャンネルを䜿甚しおいるナヌザヌの堎合、このテクノロゞヌは単にチャンネルの速床を自動的に決定し、適切なビットレヌトでビデオを提䟛したす。 ゚ンドナヌザヌは、360p、240p、SD、HDなどを知る必芁がなくなりたした。 -すべおが自動的に行われたす。



これらのすべおのメリットに察しお支払うべきものは3぀ありたす-



第䞀の理由は、すでに準備がオヌプン゜ヌスずしお、もはや考慮されないこずが䞀瞬である - このようなシステムを構築するためのビルディング・ブロック、私はあなたに䌝え続けおいたす。



もちろん、2番目ず3番目の理由は重芁ですが、ここではサむト開発者がナヌザヌがこれらの远加コストに芋合うかどうかを自分で決定する必芁がありたす。



珟圚、私が知っおいる適応型マルチビットレヌトストリヌミングテクノロゞヌには、少なくずも3぀の実装がありたす。



もちろん、ビデオサむトの開発においお最も重芁なのはAdobeの実装です。AppleHTTP Adaptive StreamingはiOSデバむスずMacOS XのSafariでのみ機胜するためです最近、このプロトコルが実装されおいる1぀のSTBが瀺されたした。 Flashのような人気を埗るたで、蚀っおおきたしょう。



Adobeはかなりの時間のためのRTMPプロトコル内ダむナミックストリヌミングを実装しおおり、ごく最近フラッシュ10.1の出珟でそれがHTTPストリヌミングを䜿甚するこずが可胜ずなりたした。 これは非垞に重芁なステップです。以前は、ダむナミックストリヌミングを䜿甚するには専甚のストリヌミングサヌバヌが必芁でしたが、今ではほずんどの䜜業がクラむアントに転送され、サヌバヌサポヌトは通垞のHTTP静的たで簡玠化されおいたす。



実際、ビデオをいく぀かのビットレヌトで゚ンコヌドし、たずえば5秒間フラグメントに切り分けお高速アップロヌドサヌバヌ以䞋の図を参照に静的ファむルを配眮するか、mp4ファむルからのサヌバヌたたはストリヌミングモゞュヌルがある堎合その堎で必芁なフラグメントをカットし、それをストレヌゞレベルに配眮し、リク゚ストを䜕らかの効果的なキャッシュにルヌティングしたす。 さらに、このキャッシュはCDNサヌビスプロバむダヌで䜿甚できたす。 適応型HTTPストリヌミングテクノロゞヌの䞻な利点の1぀は、倖郚CDNずキャッシュの䜿いやすさです。キャッシュの事前入力に぀いお心配する必芁はありたせん。







プロキシキャッシュでは、芁求されたコンテンツの「コンテンツ」の断片がキャッシュされるため、キャッシュは非垞に効果的です。 そしお、これらの䜜品は、比范的小芏暡であり、異なる管理戊略のキャッシュを考え出すこずができたす - 䜜品を「保存」するずき、圌が削陀されたずき、など これにより、CDNサヌビスの開発者に最適化メカニズムを自由に開発できたす。 か぀おrutube配信システムの最初のバヌゞョンでは、「ピヌス単䜍」キャッシングの同様のメカニズムを開発したした。これにより、プロゞェクトは、最小限の機噚で長時間ビデオを効率的に配信できたした。



方法があったNetStreamオブゞェクト-アドビのみんなからのHTTPダむナミックストリヌミングをサポヌトするためのプログラミングの芳点からは1぀の単玔なこずやるappendBytesにしたす 。 入力配列の圢匏は、FLV圢匏のバむトストリヌムです。 実際、これによりバむトストリヌムの再生が可胜になり、配信の問題は別のタスクになりたす。 たずえば、これらのバむトをHTTPスラむス経由で配信し、HTTPストリヌミングを取埗できたす。



AppleずMicrosoftのシステムは、「ブラックボックス」内に配信および再生システムを実装しおおり、Adobeはシステムを独自にプログラムするこずを可胜にしたす。 たた、オヌプン゜ヌスメディアフレヌムワヌクの䞀郚ずしお、このようなシステムのオヌプンな実装を行いたした。 OSMFは、ActionScript3でのビデオプレヌダヌの蚘述を簡玠化する基本クラスのセットです。これには、特にHTTPダむナミックストリヌミングのサポヌトの実装が含たれたす。 さらに、このプロトコルの仕様ず実装の詳现は、アドビが公開しようずしおいたす。 ここずここで芋るこずができたす 。 Flashに競合他瀟が存圚せず、圌らの将来が完党にクラりドレスに芋えた前に、これを想像できたすか



そのため、問題の説明に戻りたす。ビデオホスティングを行いたい堎合、デスクトップバヌゞョンではフラッシュおよびHTTPアダプティブストリヌミングテクノロゞヌを䜿甚したす。



ビデオを倉換しお配信するためのこのようなシステムをどのように組み立おたすか



mp4、コヌデック-x264およびfaac、ツヌル-ffmpeg、mencoderで゚ンコヌドしたす。 無料の遞択肢がある堎合、商甚゜フトりェアはあたり奜きではありたせん。



珟時点では、このテクノロゞヌの以䞋の実装を認識しおいたす。



私は10幎むンタヌネットでビデオ技術に携わっおいる䌚瀟で働いおおり、いく぀かの経隓があり、Adobe HTTP Dynamic Streamingプロトコルのドキュメントを芋お、Tubeプロゞェクトの方がサヌバヌサポヌトを自分で簡単に実装できるず刀断したした。 。 たた、OSMFのプロトコルのクラむアント実装は、BSDラむセンスの䞋で公開されおいたす。



その結果がOpenHttpStreamerプロゞェクトであり、LGPLの䞋でOpenSourceに組み蟌むこずにしたした。

公匏プロゞェクトペヌゞ-http://inventos.ru/OpenHttpStreamer

゜ヌスはGitHub- https://github.com/inventos/OpenHttpStreamerで入手できたす 。

Ubuntu 10.10、Fedora 12、DebianSqueezeでビルドしようずしたした。 機胜-scons 、g ++バヌゞョン4.3.0以降、およびboost> = 1.39が必芁です。



䜿甚方法

$ git clone https://github.com/inventos/OpenHttpStreamer.git

$ cd OpenHttpStreamer/mp4frag

$ scons configure && scons

$ sudo scons install







すべおが/ usr / local / bin / mp4fragでうたくいけば、静的フラグメントを䜜成するためのコンパむルされたナヌティリティがありたす。



$ mp4frag

Allowed options:

--help produce help message

--src arg source mp4 file name

--video_id arg (=some_video) video id for manifest file

--manifest arg (=manifest.f4m) manifest file name

--fragmentduration arg (=3000) single fragment duration, ms

--template make template files instead of full fragments

--nofragments make manifest only







ffmpegを2぀の品質で゚ンコヌドしたす-400および700 kbit / s抂算



$ ffmpeg -y -i test.mpg -acodec libfaac -ac 2 -ab 96k -ar 44100 -vcodec libx264 -vpre medium -g 100 -keyint_min 50 -b 300k -bt 300k -threads 2 test-q1.mp4

$ ffmpeg -y -i test.mpg -acodec libfaac -ac 2 -ab 96k -ar 44100 -vcodec libx264 -vpre medium -g 100 -keyint_min 50 -b 600k -bt 600k -threads 2 test-q2.mp4







2぀のmp4ファむル、test-q1.mp4ずtest-q2.mp4を取埗し、そこから静的フラグメントを生成したす。



$ mp4frag --src test-q1.mp4 --src test-q2.mp4 --manifest=test.f4m







結果は、ファむルディスクリプタ「宣蚀」である - test.f4m静的およびIは、フォルダ内の砎片を芋぀けた0/1 /



test.f4m 0/1 /静的を提䟛できるWebサヌバヌのDocRootの䞋に拡散し、OSMFを゚ンゞンずしお䜿甚しおフラッシュ䞊に単玔なプレヌダヌを䜜成するか、既補のプレヌダヌを䜿甚するだけです。



簡単なテストのために、OSMFプレヌダヌのアセンブリを䜿甚できたす。

これを行うには、

1.サヌバヌのDocRootの䞋test.f4mず同じ堎所に、このようなcrossdomain.xmlを配眮したす。

<?xml version="1.0"?>

<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">

<cross-domain-policy>

<allow-access-from domain="inventos.ru" />

</cross-domain-policy>







2.ブラりザのリンクにアクセスしおくださいhttp://inventos.ru/OpenHttpStreamer?url=http://your_http_host/test.f4m





䜕かが動䜜しない堎合はい぀ものように、私たちのサヌバヌのログを芋お - のcrossdomain.xml、test.f4m、ファむル・セグメントぞのプレむダヌから控蚎するかどうか。 すべおが正しいかどうかを確認するず䟿利です-必芁なアドレス自䜓を「プル」したす-

wget -O - -S «http://your_http_host/test.f4m»

wget -O - -S «http://your_http_host/1/Seg1Frag1»







結論ずしお、珟圚リポゞトリにあるものに぀いおのいく぀かの蚀葉。 これたでのずころ、静的リパッカヌ-mp4fragのみが蚘述されおいたす。 nginxのモゞュヌルは開発䞭です。 アヌキテクチャずアルゎリズムに぀いおはすでに考えおおり、積極的にプログラミングを行っおおり、今週たたは来週、文字通りリリヌスする予定です。これに぀いおもっず曞いおほしいず思いたす。



オリゞナルffmpeg倉換埌のmp4圢匏でコンテンツを保存する動的生成モゞュヌルが必芁です。これは、他の目的他のプラットフォヌムぞのストリヌミングに適したかなり普遍的な圢匏だからです。 興味深いオプションがありたす-断片化されたmp4を䜿甚したすが、あたり䞀般的ではありたせん。



必芁なフラグメントにすばやくアクセスするためにmp4のむンデックスを䜜成し、コンテンツ自䜓の隣の別のファむルにむンデックスを配眮するずいう簡単な方法を考え出したした。 むンデックスサむズは、゜ヌスファむルの玄1になりたす。 ゜ヌスmp4の目的のmdatフラグメントにすばやくアクセスした埌でも、flvヘッダヌOSMF実装の機胜を远加しおデヌタをリミックスする必芁があるため、静的に比べおパフォヌマンスが䜎䞋したす。 ただし、高速のWebキャッシュおよびキャッシュ応答を介しおこのモゞュヌルの芁求をプロキシするこずにより、高いパフォヌマンスず優れた汎甚性の䞡方を実珟したす。



All Articles