Iviストリヌミングビデオ準備システム

さたざたな皮類のデバむスぞのストリヌミング甚にビデオを準備するには、メタデヌタの準備から、さたざたなビットレヌトのさたざたなコンテナMP4、DASH、HLSぞのパッキングたで、いく぀かの手順を実行する必芁がありたす。 Ivi.ruは、ビデオ制䜜のスピヌドにおけるビゞネスのニヌズを考慮し、5぀のDRMシステムで動䜜できる優先順䜍を持぀柔軟なシステムを構築したした。 アヌキテクチャ゜リュヌションは、Dockerコンテナずのゞャグリングに基づいおおり、ビデオを゚ンコヌドするためのハヌドりェアず゜フトりェアの䞡方が含たれおいたす。 ビデオの操䜜の党䜓のプロセスずすべおの耇雑さは、専門家でありiviのテクニカルディレクタヌであるEvgeny Rossinskyによっお詳现に説明されたした。 Backend Conf 2017での圌のレポヌトのカットデコヌディングの䞋。



スピヌカヌに぀いお
Eugene Rossinsky-2012幎から今日たで、CTO iviは働いおいたす。 圌は、Netstreamずいう非垞に負荷の高いプロゞェクトの開発で䌚瀟を率いたした。その成果は、オンラむン攟送ずビデオに関連するプロゞェクトでしたsmotri.com、ivi。 2012幎以降、Netstreamはチヌム党䜓ずずもにiviに吞収されたした。

2006幎以来、圌はMSTUで教えおいたす。 バりマン著者のコヌス「チヌム開発テクノロゞヌ」

今日は、サボテンをかじり、マりスを䜿っお、OnDemandビデオのアップロヌドを䌎うコヌディングシステムの䜜成方法に぀いお泣き叫びたした。

たず、コンテキストを理解できるように簡単にサヌビスを玹介し、次に動物に分類されたナヌモアずさたざたな詳现に進みたす。

IVIに぀いお少し
  • 「Ivi」は合法的な動画を瀺しおいたす。
  • さたざたなクラむアントアプリケヌションがありたす。Web、iOS、コヌヒヌメヌカヌ、テレビでプレむしおいたす。 最近、XBOXアプリケヌションを起動したした。
  • これは数癟䞇人の芖聎者を抱える高負荷のプロゞェクトで、3,300䞇人です
  • 数幎前、圌らはCDNを構築したした。ロシアの30郜垂ずモスクワの3 DCが150 Gbpsリングで。
  • 1秒あたり70千のリク゚ストなどの負荷を楜しんでいたす。



それでは、私がお話ししたいこず、぀たり著䜜暩所有者からのビデオが゚ンドナヌザヌにどのように届くのか、に盎接進みたしょう。



1.著䜜暩者は、特別なプロトコルを䜿甚しおリンクを送信するかこのシステムが自動化されおいる堎合は10、元のファむルぞのFTPリンクを削陀したす。

2. Ingestの特別郚門この甚語はテレビから取られおいたすは、コヌディングシステムぞの送信甚にビデオを準備しおいたす。

この䜜品は䜕に぀いおですか 芖聎に適しおいる堎合は、著䜜暩所有者が送信したものを確認する必芁がありたす。ビットレヌトを確認したす。このコヌデックでは、おそらく最初たたは最埌をカットするコヌデックを䜿甚し、サりンドレベルを出力し、色補正などのさたざたな興味深いこずを行いたす。

取り蟌み郚門は2幎前に再線成されたした。私たち党員がこれを開始し、2皮類の専門家を特定したした。


私たちの仕事は、䌚瀟の成長に䌎い、ビデオに粟通しおいる専門家の数があたり増えないようにするこずでした。 「ラムを投げお、2本の゜ヌセヌゞを手に入れる」人の数を増やす必芁がありたした。

3. Ingestの魔法郚門から、ビデオはCoding Systemに入りたす 。 これが私たちの遺産であり、これに぀いおお話ししたす。

4.゚ンコヌド埌、ビデオはオリゞナルサヌバヌに送られたす。

5.次に、暙準スキヌム-ビデオがCDNにレむアりトされマゞックを䜿甚するか、単独で、 ゚ンドナヌザヌに送信されたす。

これは、元のサヌバヌから始たりCDNで終わる単玔な叀兞的なコンテンツ配垃スキヌムです。

しかし、コヌディングシステム自䜓に興味がありたす。これに぀いおは埌で説明したすが、䞋の質問をしたす。

私たちの問題は䜕でしたか


あるいは、2幎前に、私たちは䜕かを倉え、䞖界をより良い堎所に、そしお悪くないものにする必芁があるずいう結論に達したした。


ffmpeg、mp4boxなどが倧奜きです。 開発者「ああ、新しいバヌゞョン、クラス 今すぐ家でそれを集めたす くそヌ、ビットレヌトが5䜎䞋したした 䞀般的に火事だ 展開する必芁がありたす」
そしおここで最もおもしろい郚分が始たりたす-叀兞的なDevOpsの問題開発者は1぀のむンフラストラクチャを持ち、実皌働サヌバヌには別のむンフラストラクチャがありたす。 痛みが始たり、゜ドミヌ、うんちを投げ、開発郚門ず運甚郚門間の憎しみが始たりたす。

倚くのこずを話すこずができたす-はい、DevOpsなどが必芁です。しかし実際はそうではありたせん-人は垞に人であり、お互いを嫌っおいたす。 したがっお、たず察立を解消する技術的プラットフォヌムを提䟛する必芁がありたす。


実際に詊しおみおください-垂堎でビデオコヌディングに粟通しおいる人を探しおください。玄1䞇単䜍のコンテンツが提䟛されおいるため、さらに倚くの人がいたす。

たずえば、1幎前にむンドのシリヌズをサンプリングしたした。10,000皮類をすばやくダンプする必芁がありたした。 それらはすべお異なるビットレヌトであり、著䜜暩所有者自身がトレントからダりンロヌドしたものもありたす-完党な゜ドミヌ。 そしお、これらすべおを䜕らかの圢で凊理する必芁がありたした。

非垞に賢明で理解力のある人を必芁ずするシステムがある堎合、10,000のヒントは、品質が正垞であるような方法で凊理するこずはできたせん。 したがっお、倚くの手順を螏んでいたす。


キュヌむングシステムに呜を吹き蟌む必芁があり、このタスクを再起動するか、修正しお再起動するか、「OK、これを原則的に゚ンコヌドするこずはできたせん。」


これらは䞀般に、倜の゚リアで目を芚たし、創造的になり始める面癜い人です。
「むスラ゚ルのスタヌトアップがビデオビットレヌトを10削枛できる新しいコヌデックをリリヌスしたした」などの蚘事がTechCrunchで発衚されたした 。もちろん、詊しおみおください そしお突然刀明したした。「それで、私たちはむスラ゚ルのスタヌトアップず今連絡を取り合っおいたす。g* vnaずsticksからコンセプトを䜜成しおいるので、すべおを本番で開始する必芁がありたす」

そしお、別の消費者がフヌドチェヌンに登堎するずいう最初の問題に戻りたすが、これは非垞に䞍快です。


実際、コヌデックは非垞に倧きな動物園ではありたせんが、コンテナずDRMの䜿甚は非垞に巚倧です。 私たちは合法的なサヌビスであるため、単に矎しいDashやHLSを受け取っお䞎えるこずはできたせん。これを行うこずは蚱可されおいないからです。 たずえば、著䜜暩所有者は次のように述べおいたす。「みんな、スタヌりォヌズの映画は、そのようなプラットフォヌムでのみ、そのようなDRMでのみ提䟛できたす。」

DRMはデゞタル著䜜暩管理です。これは、ダりンロヌドやオヌディオおよびビデオコンテンツの盗甚を防ぐように思われるものです。 実際、これらのシステムにはいく぀かありたす。 ほがすべおの䞀般的なものを実装しおいたす。 しかし、これは痛みず苊痛です。

なんで 良い方法では、DRMがどのように機胜するかを知っおはいけたせん-それは保護システムです。 リバヌス゚ンゞニアリングを行う暩利はありたせんが、これを行わないず、このナンセンスは機胜したせん。 したがっお、DRMの動䜜をテストおよびデバッグする方法は、䞀般的に別の歌です。

その結果、ビデオストリヌムの゚ンコヌドずパケット化の52皮類の構成がありたす。

たずえば、叀いLG TVには、HLSの非垞に具䜓的なビュヌがありたす。 圌がすべおの基準を満たす正盎で、良い、クヌルなHLSを圌に䞎えるず、圌はそれをプレむするこずができたせんが、ドックは圌ができるず蚀いたす。 䞀般に、圌はMP4以倖は再生できたせん-ナヌザヌにずっおは察応する欠点がありたす開始時間、バッファリングなど。

したがっお、できるだけ倚くのデバむスで再生するために、これらの圢匏を事前に生成するか、その堎で実行するかを孊習する必芁がありたした。 お金はここで決定したす-それが私たちにずっお利益がある堎所ずそうでない堎所。 これに぀いおは少し埌で説明したす。


たずえば、2秒以内にキヌフレヌムを持぀すべおのvidosを芋぀ける必芁がありたす。 なぜこれが必芁なのか、わかりたす。

たずえば、チャンク長の倉曎がCDNの負荷にどの皋床圱響するか、およびそれがキャッシングアルゎリズムずどのように関連するかをテストする必芁がありたす。 この情報が必芁です。 これは重芁な話ではなく、それが存圚するこずは䞍可胜ですが、サヌビスの運甚をより費甚察効果の高いものにしたい堎合に非垞に圹立ちたす。

理解しおいただくために、圓瀟のコストは、CDNの商甚オファヌよりも6〜7倍安くなっおいたす。 そのような銬の倀札がそこに眮かれおいたす。 しかし、これはビゞネスであり、通垞のマヌゞンを確保する必芁がありたす。 したがっお、私たちのコヌディングシステムは空のフレヌズではありたせん。


補品に移行する前に機胜を最初に監芖するのは、QA゚ンゞニアです。 圌は最初にマルチキロメヌトルの指瀺を読み、それから圌のクラスタヌでそれを拟わなければなりたせん。
䞀般に、コヌディングタスクは倚くの時間を必芁ずするため、最も困難です。 テスタヌは人間でもありたす。圌ぱンコヌドされたものを発売し、お茶を粟力的に飲みに行きたした。 これで、圌の文脈は倱われたした。 圌は戻った-すべおが萜ちた-それを理解する必芁がありたす。 このような反埩は倚数ありたす。

2幎前、平均しお、1぀の新しい機胜をテストするのに2週間かかりたした。 本圓に痛かったです。

同じWebたたはバック゚ンドで、1日あたり15〜20のリリヌスをドラむブしおいるずいう事実にもかかわらず。 これは正垞です。

゚ンコヌドシステムの堎合、ビデオが゚ンコヌドされるのを埅぀のに倚くの時間がかかりたす。 テストファむルの凊理は、たずえすべおが黒であっおも、シヌンの倉曎はなく、ただ時間がかかりたす。


コヌディングシステムを䜿甚しおいる郚門がいく぀かありたす。 これはコンテンツ郚門であり、著䜜暩所有者を排陀したすが、「広告」ず呌ばれる面癜い人がただいたす。
私たちは誇りを持っお独立しおいるので、他の人の薬や針に座らないようにするために、広告のひねりを加えたした。 広告䞻は、この広告玠材たたはその広告玠材をナヌザヌにすばやく展開できる必芁がありたす。

コヌディング挔算子ずは䜕ですか


このような集䞭モヌドでは、コヌディングを理解しおいる適切な人数の人材を採甚できたせんでした。

ビゞネスは䜕を望んだのですか ビゞネスは、同じタむプの日垞業務に満足し、喜んでいる安䟡な専門家を求めおいたした。

技術郚門はコヌディングスペシャリストに䜕を期埅したしたか スキル「たあ、写真のようにしおください」。

私たちは䜕をする぀もりでしたか

ビデオの準備手順


ステヌゞ1


ビデオがシステムに到着するず、たずオリゞナルがチェックされたす 。ビデオを正しく゚ンコヌドする方法を理解しおいるクヌルな人でも間違いを犯す可胜性があるためです。


システムの以前のバヌゞョンの統蚈によるず、たずえば元のビットレヌトが1 Mbpsだった堎合など、非垞に頻繁に発生し、゚ンコヌドオペレヌタヌは「これからフルHDを䜜っおください」ずシステムに尋ねたす。

それは可胜です-誰も高玚をキャンセルしおいたせん。 システムはこのこずを実行したす。 出力は次のずおりです。1぀の倧きな正方圢が別の倧きな正方圢の埌に続き、3番目の倧きな正方圢がすべおを調べたす。 ビデオ品質管理゚ンゞニアはこれを芋お、「みんな、これはク゜だ」ず蚀いたす。

ビデオストリヌム品質管理の専門家からのn番目のリク゚ストの埌、ビットレヌトチェックを远加したした。


私たちの実践では、著䜜暩者が2 x 480のビデオを送信したずきに2぀の面癜いケヌスがあり、これら2぀のストラむプが誀っおprodにレむアりトされおいたした。 実際、これらの2぀のストリップの埌に、人間の品質管理郚門があり、最初の段階では、ビデオストリヌムが少なくずも䜕らかの圢で9:16たたは少なくずも34に収たるように比率を調べたす。 極端な堎合、120-1480ではありたせん。


HPS生成をその堎で実隓し始めた玄6か月前に、FPS1秒あたりのフレヌム-ビデオストリヌムの1秒あたりのフレヌム数チェックを導入したした。

各チャンクの先頭に垞に参照フレヌムが存圚するように、FPS制埡が必芁です。 チャンクが4秒たたは2秒で、FPSが断片的である堎合、䜕らかの方法で参照フレヌムはチャンクの先頭から離れたす。

もちろん、カスタマむズしたり、䞍均等なチャンクを䜜成したりできたす。 ただし、アダプティブストリヌミングを行う堎合は、䜕らかの方法で同期する必芁がありたす。 したがっお、より単玔なルヌルは、より単玔な悪甚ずそれがすべお機胜する方法の理解をもたらしたす。

コンテンツの7〜10は郚分的なFPSを䜿甚しおおり、このビデオを任意のコンテナにストリヌミングするこずはできたせん。 これで、HLS、DashでMP4をオンザフラむでスラむスし、すべおを゚ンコヌドできるシステムができたした。

フラクショナルFPSは悪いです。 なんで 別のストリヌムに切り替えた瞬間に、アダプティブストリヌミングが機胜し始めるためです。 ナヌザヌのチャンネルが鈍いので、別のチャンクにすばやく切り替える必芁がありたす。 圌は別のチャンクに切り替えたすが、参照フレヌムはありたせん。 その埌、しばらくの間、ナヌザヌが画像をバラバラにしお黒い画面が衚瀺されたす。 それはすべお、コヌデックがクラむアント偎で実装される方法に䟝存したす。


倚くの堎合、ビデオには音声がたったく含たれおいないか、音声に別の蚀語などのラベルが付けられおいたす。


ファむルのサむズのチェックを含む、チェックの暙準セット。

ステヌゞ2


オリゞナルが埌続の凊理に適しおいるず刀断した埌、ファむル間で目的のビットレヌトに゚ンコヌドされたす。 結果のファむルはMP4です。

ステヌゞ3


さらに、 パッケヌゞ化ず、堎合によっおは暗号化が実行されたす。䜕らかの理由でビデオストリヌムをあるコンテナたたは別のコンテナに事前にパックしお、埌でサヌバヌから元の静的を送信できるようにする堎合。 スタティックは、ロヌド時に䞎える方が垞に安䟡ですが、ビットレヌトの远加コピヌを保存する方が高䟡です。

ステヌゞ4-5


その埌、オリゞナルがサヌバヌに送信され 、そこで䜕が起こったかの品質管理に埓事しおいる特別に蚓緎された人々がすでに来おいたす。
品質管理は2぀の郚分で構成されおいたす。

実際、すべおが正垞にコピヌされたこずを、ストリヌムからMD5で愚かにチェックしたす。 箄1幎に1回、ログに悪い報告があったこずのストヌリヌがありたす。぀たり、これは発明されたケヌスではありたせん。

ステヌゞ6


その埌、私たちはただ人々からお金を匕き出すサヌビスであるため、このビデオが広告デモのあるモデルで動䜜する堎合、広告を衚瀺したい堎所をマヌクしたす。
そしお、ナヌザヌにずっお良いのは、次のシリヌズやその他のこずを通知するキャプションラベルです。

ステヌゞ7


最埌に、特別に蚓緎された人がスむッチを匕くず、コンテンツが゚ンドナヌザヌに送られたす。バック゚ンドサヌバヌは、この特定のビデオストリヌムぞのリンクの配信を開始したす。



私たちは䜕のためにコヌディングしおいたすか


私たちの最倧のクラスタヌは、ffmpegずさたざたな゜フトりェアです。 ハヌドりェアず゜フトりェアの2぀のタむプを区別できたす。

ffmpegずMP4、HLS、その他のボックスを䜿甚するず、実行するすべおの゚ンコヌドタスクの95が閉じられたす。 ただし、1幎半前に時間を節玄しお実隓を行うために、゚レメンタルからServachoksを賌入したした。

これは広告ではなく、圌らは本圓に良い人です。 これらのサヌバヌは、すべおの鉄片よりも高䟡ですが、プラスが1぀ありたす。 ffmpegたたはオヌプン゜ヌス゜フトりェアを䜿甚しお䜕かを調理するこずが難しい堎合は、い぀でもサポヌトに連絡しお次のように蚀うこずができたす。「みんな、スムヌズストリヌミングはうたくいきたせん。うたくいきたす」

圌らはあなたにそれを送りたす、そしお、あなたがそれをスケヌリングしたいなら、圌らが送ったものを愚かにコピヌしお、゜フトりェア゜リュヌションにそれを挿入するか、たたは「OK、それをElementalで回転させおください」。

珟圚、実皌働環境ではElementalは1ピヌスのみに䜿甚されおいたす。 HSSに提䟛するDRM PlayReadyでコンテンツを䜜成したす。 HSS-これは単なるスムヌズストリヌミングです-Microsoftがらくたは、それほど倚くのデバむスではサポヌトされおいたせん。 しかし、たずえば、旧匏のサムスンやLGのようなフィリップステレビは非垞に気に入っおいたす。

他のすべおのプラットフォヌムはやや速く远い぀いおいたす。 スマヌトテレビでは、䞀般にファヌムりェアの曎新に問題がありたす。 圌らは非垞に頻繁に鉄ずすべおの䞡方に叀いテリヌを投げたす。 サポヌトに問題がありたす。

しかし、叀いモデルで映画を芋たい人がいたす。私たちの仕事は、ハリネズミず仲良くするこずです。

その結果、玄95が゜フトりェアコヌディングに費やし、5がElementalを䜿甚したコヌディングずパッケヌゞングに費やしおいたす。 R&D, Elemental. - , GPU.

, 4 HDR .




, , , : - , , , ffmpeg, .

:


- , .

( )


, , .


.

?


:



, , , .

:


Django, – Shell- .




– ?
. – - . SSH Elemental , , :

  1. ;
  2. .

– , , .

Elemental: « , ?». , wget' .
, RPC- ( ), .

優先順䜍


次は .

. , . «».



– – . ! , « » – , «», «» - , «».

, , .

- , . なんで , , «» – ! KPI « 20 !», : «, , ! 突然 ! , !».

«»!

? , . , 4 , . . , , .
.


これは䜕ですか , .

:


(catch-forward). – « !? !» ! , . «-6».

, catch-forward catch-up ( ), .

, , . – .

, – , .

, , , .

. 20 , . , , . .

, – , , - . , , , -.



, - , , « , !».

- , , . – .

, , . :

  1. Kubernetes , QA- .
  2. .

. , , « -, , !». Kubernetes.

, , . , 70% . , , , , , , -.

Docker- – , , .

DevOps-, . Docker- .

Kubernetes . , , , , , , , , , , !

, , Kubernetes, , .

Kubernetes - – , . , , – .

, , Kubernetes. , , , .

?



Docker- – .

– , , Puppet, .


Ingest . , , . , , - , , . , , , .

, , , , , , 
 .

Elemental , , HLS .


CDN, . . !

, , , , - . : ?

, , - , - :

— , – , 

— - ?
— , , .
— , Pb . , , , . ?
— , 
 , .


, - , , , , .


, , , – -. - .

-, – -. – , . . , : «, , ?». ( , ) .



,
ネタバレの䞋
— , , 2 Pb – , – ?

— HTTP.

— , – ? ?

— . . , . , .

— GPU. GPU?

— , . 95% . Elemental – GPU. , .

, GPU . – , - , . , – , , .

, , . Nvidia, , , . , 
 , GPU , – . , .

— Elemental – , . ?

-はい。 .

— ? HLS, DASH?

— , Elemental, – HSS.

— , ?

— . , , , , , – , – , .

— . , DRM


— .

-なるほど。 , , , , - . - , ?

— .

— , Kubernetes 


— Kubernetes, , .

— , Mesos + Marathon, ?

— . . , . Mesos Marathon – , , .

, , - – . , . , – – , . , , Kubernetes.

.

— , ?

— , , — , , *, .

— . Pb? - ?

— , , . , .

, -, . – CDN, . , , . .

— , . , ? ?

— Kibana.

— , . – ?

— 52 . , 52 – , DRM, . . . – , . HLS – Verimatrix, PlayReady, . DASH.

, , WDW , , . – , CDN-, DRM.

, , 18.

— , . , ?

— . , , , . , , - .

, . – . , – Kubernetes, – ? . , . , .

— – -, , . ?

— , , , . , . , , - .
, . -, , . . . , : «, - , , ». DevOps-.

. – , . , . , .

— . , 4, .. QUIK , , , , ?

— , .

, , , CDN. . , . -, , , 
 CDN . , .
, , , , , .

Backend Conf 2017 HighLoad++ Junior .

++. , .

Source: https://habr.com/ru/post/J345738/


All Articles