【イベントレビュー】Elixirを使用したHLSライブブロードキャストバックエンドサービスの開発

Tubi が後援し主催した第 8 回 Elixir Meetup は先週土曜日に無事終了し、3 人の Elixir 上級ユーザー、Horvo、Scott、Yang Miao が Elixir 関連のアプリケーションやアイデアを 660 人以上のオンラインおよびオフラインの関数型プログラミング愛好家と共有しました。この記事では、最初の共有「Elixir を使用した HLS ライブ バックエンド サービスの開発」についてレビューします。この共有は、Tubi のシニア バックエンド エンジニアである Horvo によって提供されました。

Bitu Technology の公式アカウントにご注目ください。他の 2 つの Elixir Meetup の共有レビューを公開します。


以下のメモは聴衆の Liu Lang からのものです。

オンライン ストリーミング メディア コンテンツ プロバイダーとして、Tubi は、オンデマンドの映画やテレビ番組、従来のテレビ番組のオンライン ライブ ストリーミングなど、幅広いコンテンツの選択肢をユーザーに提供します。これらのコンテンツのバックエンドサポートを実現するために、Tubi は Elixir を選択しました。このMeetupの最初のシェアは、TubiのシニアエンジニアHorvo氏による「Tubi Live Backend ServiceでのElixirのアプリケーション」です。

なぜ HLS なのか

HTTP ライブ ストリーミング (別名、HLS) は、インターネット上でオーディオとビデオを送信するためのストリーミング メディア送信プロトコルです。2009 年に Apple Inc. によって提案されました。

- ほとんどのファイアウォールのデフォルト設定に対応します (TCP ポート 1935 での RTMP 要件と比較して)

- グローバル CDN ネットワークなどの HTTP 主要インフラストラクチャを使用できます (拡張が容易なため、Nginx-rtmp-module でも HLS ビデオ再生をサポートしています)

- 優れたプラットフォームとデバイスの互換性 (HTTP-FLV は BiliBili によって開発された flv.js などのサードパーティ ツールに依存しますが、MPEG-DASH には iOS ネイティブ サポートがありません) これらの機能により、RTMP、MPEG-DASH、および他のプロトコル 群衆から目立つようにして、Tubi のライブ ストリーミング ビジネスに選ばれて使用してください。

あなただけの Elixir TV

Tubi のライブ ブロードキャスト ビジネス プロセスにおける Elixir の適用をより深く理解してもらうために、Horvo は Elixir TV をゼロから構築する方法をデモンストレーションし、視聴者を全国的なライブ ブロードキャストの潮流の中で体験できるように導きました。

Elixir TV システム全体は次の部分に分かれています。

トランスコーダ

オリジナルの MP4 およびその他の形式のビデオ ファイルを受け入れ、Elixir コードで FFmpeg コマンドを呼び出し (専門的な作業は専門ツールに任せてください)、で定義されたターゲット ビット レートに従って、ビデオ ファイルに対応するマルチ ビット レート セグメントを生成します。前進。このステップの焦点は、モジュール間で情報を渡すときに使用されるデータ スキーマを定義することです。

スケジューラ

スケジューラは Elixir TV のコア モジュールです。静的な固定長ファイルを静的なプレイリスト ファイルとセグメント ファイルに一度だけ変換する必要がある従来のビデオ オン デマンド (VOD) プラットフォームとは異なり、Elixir TV ライブ放送局は各チャンネルのリアルタイム コンテンツ キューを維持する必要があります。 。

スケジューラは、状態管理にExilirのGenServerを使用し、スライディングウィンドウ内のビデオセグメントと対応する説明情報を定期的に更新することでリアルタイムのプレイリストファイルを取得する機能を提供し、Elixir TVの起動に必要な機能をシンプルで実現します。清潔できちんとした効率的な方法。

HLSサーバー

HLS サーバーは、クライアント呼び出し用に次の 3 つの HTTP インターフェイスを提供します。

- GET /playlist.m3u8 => 静的マスタープレイリスト

- GET /:variant/playlist.m3u8 => ライブ バリアント プレイリスト

- GET /:variant/:video_id/:media_segment_name.ts => ローカル ファイル システムからビデオ ファイルを提供します

最初の 2 つのインターフェイスは、プレイリスト ファイルを取得するために使用され、クライアントはマスター プレイリストの情報に基づいてプレーヤーを初期化し、バリアント プレイリストの情報に基づいてメディア セグメント リソースのアドレスを取得します。ライブブロードキャストであるため、クライアントはこの情報を定期的に更新する必要があります。3 番目のポートは、クライアントが再生用の特定のビデオ ファイルを取得するためのものです。

結論

上記のモジュールにより、Elixir TV が形になりました。

次に、Horvo は実際の大規模なライブ ブロードキャスト製品のアーキテクチャを共有し、Elixir TV のいくつかの欠点を指摘しました。

動画は暗号化する必要がある

ダ・リューの説明によれば、現実の宇宙は悪意に満ちた暗い森であり、誰もが自分を守るためにふりをして沈黙する必要がある。ビデオ プラットフォームとして、Elixir TV はコア コンテンツ、つまりビデオ ファイルの保護も考慮する必要があります。

Horvo は 3 つの異なる保護戦略を導入しています。

- ビデオクリップファイルはAES-128アルゴリズムで暗号化され、送信のセキュリティを確保できます。

- 上記の対称暗号化キーの取得インターフェイスは、ビデオの復号化が正規のクライアントから開始されたことを確認するために、訪問者の身元を認証する必要があります。

- DRM やその他のテクノロジーなどのより高度なコンテンツ保護により、ビデオ ファイルが異なるデバイス間でコピーおよび転送されることを確実に防止できます。

金銭問題に取り組むべきだ

ダーウィンの説明によれば、現実の世界は自然選択と適者生存です。Elixir TV も、初日から収益化について考え始める必要があります。無料ビデオ + 広告を使用して収益を構築するという Tubi のモデルを参照すると、Elixir TV は、ユーザーが番組リストにアクセスし、適切なタイミングで広告プラットフォームへの入札招待を開始し、それ以上のものを選択するためのファサードとして広告挿入サービスを構築する必要があります。プラットフォームにとって有益な広告シートが販売され、そのようなビデオクリップがユーザーに返されるビデオ再生記述ファイルに挿入されて収益が得られます。

Horvo 氏は、サーバー側での広告挿入の利点も紹介しました。広告ビデオファイルは通常のビデオクリップと同じで、サーバー側の広告挿入サービスがビデオ再生プレイリストファイルに挿入されるため、広告の特性が失われ、一部のブラウザの広告ブロックプラグインによるブロックを回避できます。これにより、プラットフォームと広告主の権利と利益が保護されます。

素晴らしい交流

広告挿入サービスでは、どのようにしてユーザーごとにパーソナライズされた広告挿入を可能にしますか?

Horvo: サーバー側広告挿入 (SSAI) サービスは、ユーザーの再生セッションごとに個別のメディア プレイリストを維持します。ライブ ブロードキャスト シーンのメディア プレイリストは、時間の経過とともにスクロールして更新されます。プレイリストに広告ブレイク情報が表示されると、SSAI An広告リクエストは広告サーバーに対して開始され、この広告リクエストにはユーザーのいくつかの特性情報が含まれるため、広告サーバーはユーザーに対してパーソナライズされた推奨を行うことができます。HLS ストリームへの広告挿入に関する業界仕様 (SCTE-35) もあり、HLS コンテンツの制作者は業界標準のタグを使用して広告の位置をマークする必要があります。

Ad (広告) はクライアントによって改ざんされますか?

Horvo: SSAI の主な目的は、クライアントのブロックや改ざんを防ぐことです。この部分を実現するには、SSAI サービスが広告の完了後に、広告ブレイク情報を含む元のメディア プレイリストを広告ブレイク情報のないプレイリストにフィルタリングするということです。広告休憩間隔内の元のメディア セグメントは、実際の広告セグメントに置き換えられます。クライアントはAd-break Markerを検出して広告の位置を監視できないため、改ざんは発生しません。

また、SSAI サービスを使用せず、クライアント側で広告リクエストと広告挿入を行うと、クライアント側で M3U8 ファイル内の Ad-break を認識できるため、クライアント側での改ざんが容易になります。または広告をブロックします。

M3U8 ファイルはどの部分で生成されますか? スケジューラーとはどういう意味ですか?

Transcoder の後に HLS 出力形式を取得します。この HLS は、特定のビデオに対するオンデマンド形式のみです。スケジューラーが調整した後の HLS 出力は、ライブ ブロードキャストの形式の実際のコンテンツです。

エリクサーを使用する理由

Tubi と Elixir のストーリーについては、Tubi エンジニアリング担当副社長 Chen Tian が共有したストーリー - なぜ Elixir を使うのか?を参照してください。数人のエンジニアがその背後にある物語を語った

Horvo 氏は、Elixir を使用した 5 年間の開発経験に基づいて、Elixir 開発経験と運用環境での Elixir のパフォーマンスについて簡単に共有しました。「私は以前 Ruby on Rails 開発をしていましたが、Ruby は開発者の開発経験を非常に重視しており、開発者を重視しています。 Happiness Elixir と Ruby の間には多くのつながりがあります。たとえば、Elixir の創設者である Jose Valim は Ruby の中心的な開発者の 1 人でした。そのため、Elixir は開発者のエクスペリエンスという点で Ruby に非常に似ており、非常にフレンドリーです。

さらに、実際の運用環境では、Web サーバーが同時実行性の高いリクエストを処理する必要がある場合に、Elixir は非常に優れたパフォーマンスを発揮します。」

TubiにおけるElixirのその他の応用例

Elixir/OTP を使用してマルチメディア E2E 処理プラットフォームを構築する

Ruby のアイデアを Elixir プロジェクトに応用する

Elixirのコードベースに潜む7年前のパフォーマンスの問題

Tubi に参加して、一緒に成長し、強くなっていきましょう!

人気の求人: https://tubi.tech/careers/

WeChat 公式アカウント: [活動レビュー] Elixir を使用した HLS ライブ ブロードキャスト バックエンド サービスの開発

おすすめ

転載: blog.csdn.net/weixin_49193714/article/details/131575841