RTMPS を介した YouTube ライブ コンテンツの配信

このドキュメントでは、RTMPS を使用してエンコーダから YouTube でライブデータをストリーミングする方法について説明します。RTMPS は、SSL 接続を介してトンネリングされた通常の RTMP(RealTime Messaging Protocol)動画ストリームです。このドキュメントは、RTMP をすでにサポートしているエンコーダに RTMPS のサポートを追加することを希望するエンコーダ ベンダーを対象としています。

RTMPS は、ほとんどの一般的なユーザー コンテンツに適しています。特に、低レイテンシが求められる場合に適しています。YouTube ライブ配信がサポートするさまざまな取り込みプロトコルの概要については、取り込みプロトコルの比較をご覧ください。

要件

YouTube ライブに RTMPS を送信するには、いくつかの前提条件があります。

  • 接続 URL(<protocol>://<server>/<path>)の各部分が正しい必要があります。
    • プロトコルは rtmps にする必要があります。
    • サーバーは有効な YouTube RTMPS 取り込みエンドポイントである必要があります。
    • パスは、有効な YouTube ライブ RTMP アプリケーション名である必要があります。
  • 接続は取り込みサーバーのポート 443 に対して行う必要があります。
  • マルチメディア ストリームは RTMPS で送信する必要があります。つまり、SSL 接続を介して RTMP を使用します。

接続 URL の取得

エンコーダで YouTube Live API をすでに使用している場合、RTMPS 取り込み URL を取得するプロセスは RTMP の場合と似ています。LiveStreams 挿入(POST)リクエストを送信して、新しい取り込みストリームを作成します。レスポンスの cdn.ingestionInfo.rtmpsIngestionAddress フィールドに RTMPS URL が指定されています。デュアル取り込みをサポートしている場合、バックアップ アドレスは cdn.ingestionInfo.rtmpsBackupIngestionAddress です。

接続の作成

優先するソケット ライブラリを使用して、取り込み URL で指定されたサーバーのポート 443 への SSL/TLS 接続を作成します。TLS はトランスポート層でのみ機能するため、接続を開始するためにサーバーのホスト名は厳密には必要ありません。ただし、Google のサーバーでの認証には必要です。そのため、SSL handshake に SNI 拡張機能(Server Name Indication)を追加し、サーバー名を接続先のサーバーのホスト名に設定してください。

SSL 接続が確立されたら、RTMP クライアント ライブラリの接続として使用します。初期化された SSL 接続は標準の TCP 接続と同じ API を持つため、RTMP ライブラリは両方を同じように処理できるはずです。

トラブルシューティング

SSL エラー

SSL 接続を試行して無効な証明書が返された場合は、RTMP を想定している YouTube サーバーに接続している可能性があります。使用するサーバー名に「rtmps」が含まれていることを確認します(「s」に注意してください)。

URL は正しいと思われるが、SSL エラーが発生している場合、間違ったポートに接続している可能性があります。ポート 443 に接続していることを確認します。

URL とポートが正しい場合、SSL ライブラリが証明書を正しく処理していない可能性があります。SSL エラーに関する低レベルの診断メッセージを探し、ハンドシェイクで SNI を使用していることを再確認します。

接続がタイムアウトしました

サーバーに接続できるものの、RTMP ライブラリが適切なレスポンスを取得せずにタイムアウトする場合は、RTMPS を想定している YouTube サーバーに対してクリアテキストの RTMP 接続を設定している可能性があります。プレーンな TCP 接続ではなく、SSL 接続を作成していることを確認します。