ライブ・ストリーミング放送
Vonage Video APIライブ・ストリーミング機能では、HTTPライブ・ストリーミング(HLS)またはRTMPストリームを使用して、ビデオ・セッションを大勢の視聴者にブロードキャストできます。
HLSストリームを同時に視聴できるクライアントの数は、HLSストリームを同時に視聴できるクライアントの数よりも多い。 ライブ・インタラクティブ・ビデオ・セッション.たとえば、セッションがインタラクティブなライブ放送の 15,000 の接続制限に達した場合、クライアントに HLS ストリームを提供することができます。HLS ストリームは、視聴者数を無制限にサポートします。RTMPストリームは、RTMPプロバイダがサポートする視聴者数によって制限されます。
RTMPストリーミング機能を使用すると、YouTube LiveやFacebookなど、RTMPストリームをサポートするプラットフォームにビデオストリームを提供できます。
また、WebRTCをサポートしていないクライアントでも、HLSまたはRTMPストリームを見ることができる。
ブロードキャストには、セッションから最大16のビデオストリーム(および最大50のオーディオストリーム)を含めることができます。セッションに16を超えるビデオストリームが同時に含まれている場合、余分なストリームは放送に含まれません。
HLS は、セッション内のライブ・ストリームより 15~20 秒遅れて配信される。最初の遅延の間、ブロードキャストストリームは利用できません。HLSまたはRTMPストリームが利用可能になるまで、クライアントにブロードキャストURLを提供しないでください。
RTMPストリームの場合、Vonageプラットフォームでは約5秒のレイテンシが発生します。しかし、各RTMP配信プラットフォーム(YouTube LiveやFacebookなど)は、ビデオを公開する前の処理に基づいて、さらに待ち時間を追加します。
HLSおよびRTMPストリーミング機能は、ルーティングされたセッション(Vonage Media Routerを使用するセッション)でのみ使用できます。詳細については Vonageメディアルーターとメディアモード.
HLSの再生は、すべてのブラウザでサポートされているわけではありません。しかし、以下のようなプラグインがあります。 フロープレーヤークロスブラウザ対応(HLSを直接サポートしていないブラウザでFlash Playerを使用)。
Vonage RTMPストリームには、以下の仕様があります:
- H.264ベースライン、レベル3.1、ビデオコーデック
- 解像度640x480ピクセル(SDランドスケープ)、480x640ピクセル(SDポートレート)、1280x720ピクセル(HDランドスケープ)、720x1280ピクセル(HDポートレート)、1920x1080ピクセル(FHDランドスケープ)、または1080x1920ピクセル(HDポートレート)、25フレーム/秒
- 2 Mbps定ビットレート(CBR)、キーフレーム間隔2秒
- 128Kbps、48Khzサンプルレートの1チャンネルAACオーディオ Safariから公開されたストリームは、ライブ・ストリーミング放送では音声のみとして表示されます。
参照 Vonage料金ページ HLSおよびRTMPストリーミング価格の詳細については、こちらをご覧ください。
ライブ・ストリーミング放送の開始と停止
を使用する。 Video REST API セッションのライブ・ストリーミングを開始・停止したり、ライブ・ストリーミング放送のステータスを確認したりすることができます。
HLS および RTMP ストリームは、最後のクライアントがセッションから切断してから 60 秒後に自動的に停止します。また、各 HLS および RTMP ストリームのデフォルトの最大継続時間は 4 時間(14,400 秒)です(この継続時間に達すると、ライブ・ストリーム放送は自動的に停止します)。ブロードキャストの最大継続時間は、HLSおよびRTMPストリームを呼び出す際にmaxDurationプロパティを設定することで変更できます。 放送開始 REST方式。最大継続時間は60秒から10時間(36,000秒)に設定できます。
注: ライブストリーミング放送は、セッションのサーバーローテーション中に終了します。サーバーローテーションの通知イベントに応じて、放送を再開できます。参照 サーバーのローテーションとセッションの移行.
を設定することで、ブロードキャストに使用する最大ビットレートを制限することができます。
maxBitrate プロパティを呼び出すときに 放送開始
RESTメソッド。最大ビットレートは100,000~6,000,000ビット/秒の範囲で設定できる。
6,000,000ビット/秒です。
ライブ・ストリーミング放送のビデオ・レイアウトの設定
ライブストリーミング機能を使用する場合、HLSまたはRTMPストリーム内のビデオのレイアウトをカスタマイズできます。
デフォルトでは、ライブ・ストリーミング機能は、構成された HLS または RTMP ビデオ内で、セッションのビデオをタイル状にレイアウトします。レイアウトはセッションのビデオ数に基づいています。たとえば、セッションに 1、2、4、5 のストリームがある場合のレイアウトを以下に示します:
これは「ベストフィット」レイアウトとして知られています。また、他の定義済みレイアウトの中から選択することもできます。その他のレイアウトでは、各ビデオストリームにクラス名を割り当て、レイアウトでの表示方法を決定します。参照 定義済みのレイアウト・タイプ.)
また、CSSを使用して独自のカスタムレイアウトを定義することもできます。参照 カスタムレイアウトの定義.
デフォルトでは、放送ビデオは640x480ピクセル(SDランドスケープ、アスペクト比4:3)です。個々の動画は、合成動画内のコンテナ矩形に配置されます。デフォルトでは、動画は CSS の object-fit プロパティを contain に設定して描画されます。たとえば、次の図は、2 つの SD ランドスケープ(4:3)動画(1 と 4)と 2 つの HD ランドスケープ(16:9)動画(2 と 3)を使用した、最適なレイアウトを示しています:
この動作は カスタムレイアウト.
の放送開始エンドポイントを呼び出すときに、480x640(SDポートレート、アスペクト比3:4)、1280x720(HDランドスケープ、アスペクト比16:9)、720x1280(HDポートレート、アスペクト比9:16)、1920x1080(FHDランドスケープ、アスペクト比16:9)、1080x1920(FHDポートレート、アスペクト比9:16)の解像度を使用するように放送ストリームを設定することもできます。 Vonage REST API.モバイル機器からのビデオストリーム(縦アスペクト比を使用することが多い)を含む放送では、縦アスペクト比を使用するとよいでしょう。
初期レイアウトタイプの指定
セッションのライブストリーミング放送を開始する際に REST APIオプションで、初期レイアウトのタイプを指定することができる。
を設定する。 Content-Type への "application/json" を設定し、POSTリクエストで送信されたJSONデータのプロパティとしてレイアウト・タイプに設定します。
{
"sessionId": "2_MX44NTQ1MTF--bm1kTGQ0RjVHeGNQZE51VG5scGNzdVl0flB-",
"layout": {
"type": "pip"
}
}
カスタムレイアウトを使用している場合 ( カスタムレイアウトの定義)を設定する。 type プロパティ "custom" を指定し、スタイルシートを追加プロパティとして渡します。 stylesheet:
{
"sessionId": "2_MX44NTQ1MTF--bm1kTGQ0RjVHeGNQZE51VG5scGNzdVl0flB-",
"layout": {
"type": "custom",
"stylesheet": "stream.instructor {position: absolute; width: 100%; height:50%;}"
}
}
また、layoutプロパティのscreenshareTypeプロパティを設定することで、セッション内に画面共有ストリームがある場合に使用するレイアウト・タイプを指定することもできます(詳しくは 画面共有レイアウト):
{
"sessionId": "2_MX44NTQ1MTF--bm1kTGQ0RjVHeGNQZE51VG5scGNzdVl0flB-",
"layout": {
"type": "bestFit",
"screenshareType": "pip"
},
"name" : "archive_name",
"outputMode" : "composed"
}
無効な型を指定した場合、リクエストは400エラー応答コードを返す。
初期レイアウト・タイプを指定しない場合、HLSまたはRTMPストリームは最適なレイアウト・タイプを使用します。それ以外のレイアウト・タイプを指定する場合は、セッション内のストリームに適切なレイアウト・クラスを適用してください ( ストリームへのレイアウトクラスの割り当て).
参照 定義済みのレイアウト・タイプ.
レイアウトタイプを動的に変更する
ライブストリーミング放送中にレイアウトタイプを動的に変更する
レイアウトの種類を動的に変更するには /broadcast/layout RESTエンドポイント.
を設定する。 Content-Type への "application/json" で、レイアウト・タイプをPUTリクエストのJSONデータのプロパティとして含める:
{
"type": "pip"
}
カスタムレイアウトを使用している場合 ( カスタムレイアウトの定義)を設定する。 type プロパティ "custom" を指定し、スタイルシートを追加プロパティとして渡します。 stylesheet:
{
"type": "custom",
"stylesheet": "stream.instructor {position: absolute; width: 100%; height:50%;}"
}
また、screenshareTypeプロパティを設定することで、セッション内に画面共有ストリームがある場合に使用するレイアウト・タイプを指定することもできます ( 画面共有レイアウト):
{
"type": "bestFit",
"screenshareType": "pip"
}
無効な型を指定した場合、リクエストは400エラー応答コードを返す。
デフォルトのBest Fitレイアウト・タイプ以外のレイアウト・タイプを指定する場合は、必ずセッション内のストリームに適切なレイアウト・クラスを適用してください ( ストリームへのレイアウトクラスの割り当て).
ライブ・ストリーミング放送に含めるストリームの選択
ライブストリーミング放送を開始する際に streamMode への "manual"放送に含めるストリームを選択できます。放送中にストリームを追加したり削除したりできます。また、放送にストリームの音声と映像のどちら(または両方)を含めるかを指定できます。詳細は Video REST API.
HLS放送でDVR機能を有効にする
HLS放送はDVR機能をサポートしており、ユーザーは放送を巻き戻し、一時停止、再開することができます(DVRをサポートするプレーヤーで)。を設定することができます。 dvr オプションで true ライブストリーミング放送を開始するとき
DVRを有効にすると、HLS URLには ?DVR クエリ文字列が末尾に追加される。
DVR機能は、放送内容を再生するための2時間のウィンドウを提供します。放送中は、現在時刻の2時間前までなら、放送のどのポイントでも再生(および巻き戻し)できます。DVR録画は、放送停止後2時間経過すると利用できなくなります。
イベントの同期にHLSタイムスタンプメタデータを使用する
HTTP ライブストリームのマニフェストには EXT-X-PROGRAM-DATE-TIME ヘッダーに、ストリーミングセグメントのキャプチャをリアルタイムで開始したタイムスタンプが設定される。これは HTTPライブ・ストリーミング仕様.これは ISO 8601:2004 日付/時刻の値(UTC)。
例えば、ヘッダーは次のようになる:
#EXT-X-PROGRAM-DATE-TIME:2021-09-02T11:45:00.810+00:00
これらのタイムスタンプにより、HLS ストリームの遅延を Account するために、クライアント・アプリケーションのイベントを同期させることができます。例えば、ビデオストリームの特定の時間に絵文字を表示するイベントをクライアントに送信したい場合、クライアントはタイムスタンプを使用して、受信したストリームの遅延に基づいて絵文字の表示を遅らせることができます。
低遅延HLS放送
HLSブロードキャストが低遅延モードをサポートするように設定するには、次のように設定します。 low-latency オプションで true いつ ライブ・ストリーミング放送の開始.
一部のHLSプレーヤーは低遅延モードをサポートしていません。
この機能は DVR HLS放送.
同時放送
同じセッションの複数のライブストリーミング放送を同時に開始するには、次のように設定します。 multiBroadcastTag オプションを使用します。進行中のセッションの同時放送ごとに、一意の文字列に設定する必要があります。
の場合、複数のRTMPストリームを指定することができます。 ライブ・ストリーミング放送の開始を呼び出すと、それぞれが同じオプション(割り当てられたストリームやレイアウトなど)を使用します。しかし、同時ブロードキャストを開始すると(RESTメソッドを複数回呼び出すことで multiBroadcastTag オプションを設定)、異なるレイアウトを使用し、それぞれの同時放送に異なるストリームを割り当てることができます。
音声のみの放送と映像のみの放送
を使用してライブストリーミング放送を開始する場合 OpenTok REST API,
では、オーディオ、ビデオ、またはその両方を含めるかどうかを指定できます。(詳細は hasAudio そして hasVideo オプション)。デフォルトは両方ブロードキャストする。
注: 音声のみの放送は、RTMPストリームに黒い160x120フレームのビデオを含む。 YouTubeやFacebookなど一部のエンドポイントは、音声のみのRTMPストリームを拒否します。
ライブ・ストリーミング放送に関する情報の入手
を使用する。 サーバーSDK または REST API ライブ・ストリーミング放送に関する情報を取得したり、ライブ・ストリーミング放送を一覧表示したりする。
ライブ・ストリーミング放送の状態変化を監視
コールバックURL(Webhook)を登録することで、プロジェクトのライブストリーミング放送のステータス変更の通知を受け取ることができます。
を登録できます。ライブストリーミング放送のステータスは、次のいずれかに設定されます。 "started" または "stopped".
プロジェクトにブロードキャスト・コールバックを登録する:
ログイン Vonage Video API アカウント.
左側のメニューで、ご希望のAccountを選択します(複数のAccountをお持ちの場合)。
左側のメニューからApplicationsタブを選択し、セキュアコールバックを登録したいプロジェクトを選択します。
スクロールダウンして プロジェクト設定.をクリックしてください。 編集 アイコンをオンにしてください。 セキュアード・コールバック スライダーボタン をクリックし セーブ ボタンをクリックする。
現在、ブロードキャストモニタリングコールバックを設定するには、セキュアコールバックを有効にする必要があります。 セキュアコールバックを無効にすると、設定したブロードキャストコールバックはすべて無効になる。
を見つける。 ブロードキャスト・モニタリング セクションで 設定 ボタンをクリックする。
コールバックURLと(オプションで)署名の秘密を指定する。
安全なコールバックの詳細については このページ.
ブロードキャストのステータスが変更されると、サーバーはあなたが指定したURLにHTTP POSTリクエストを送る。 リクエストのContent-Typeはapplication/jsonです。リクエストのデータは、次の形式のJSONオブジェクトです。 オブジェクトです:
{
"id": "1748b707-0a81-464c-9759-c46ad10d3734",
"sessionId": "2_MX4xMDBfjE0Mzc2NzY1NDgwMTJ-TjMzfn4",
"applicationId": 100,
"createdAt": 1437676551000,
"updatedAt": 1437676551000,
"event": "broadcast",
"group": "status",
"resolution": "640x480",
"streamMode" : "auto",
"streams" : [],
"broadcastUrls": {
"hls" : "http://server/fakepath/playlist.m3u8",
"hlsStatus": "live",
"rtmp": {
"foo": {
"serverUrl": "rtmps://myfooserver:443/myfooapp",
"streamName": "myfoostream",
"status": "live"
},
"bar": {
"serverUrl": "rtmp://mybarserver:443/mybarapp",
"streamName": "mybarstream",
"status": "live"
}
}
},
"settings": {
"hls": {
"dvr": false,
"lowLatency": false
}
},
"status": "started"
}
JSONオブジェクトには以下のプロパティが含まれる:
id- 放送のユニークID。sessionId- Video API セッション ID。applicationId- Video API プロジェクト ID。group- に設定されている。"broadcast".event- に設定されている。"status".createdAt- 放送開始時刻。Unixエポック(1970年1月1日00:00:00 UTC)からのミリ秒単位。updatedAt- このGETメソッドでは、このタイムスタンプはcreatedAtタイムスタンプと一致する。resolution- 放送の解像度("640x480"、"1280x720"、"1920x1080"、"480x640"、"720x1280"、"1080x1920 "のいずれか)。status- ブロードキャストのステータス"started","stopped"あるいは"failed".の場合"failed"の状態を確認してください。reasonプロパティを参照してください。reason- での放送の場合statusに設定する。"failed"このプロパティには"Internal server failure".broadcastUrls- HLSおよびRTMP放送ストリームの詳細。HLSストリームの場合、URLは
hlsプロパティを参照してください。を参照のこと。 Vonageライブストリーミング開発者ガイド このURLの使用方法の詳細については、こちらをご覧ください。そのhlsStatusプロパティを以下のいずれかに設定する:"connecting"- Vonageサーバーはトランスコーダの起動中です。これが初期状態です。"ready"- Vonageサーバーは正常に初期化されましたが、CDNはメディアを消費していません。"live"- Vonageサーバーが正常に初期化され、CDNがメディアを消費しています。"ended"- ソースストリームが終了した。DVRが有効で録画済みメディアが要求された場合、ステータスは次のように遷移します。"live"."error"- Vonageプラットフォームにエラーがあります。
各RTMPストリームについて、RTMPサーバーのURLとストリーム名、およびRTMPストリームのステータスが提供される。
status- RTMP ストリームの状態。このプロパティは以下のいずれかに設定される:connecting- VonageプラットフォームはリモートRTMPサーバーに接続中です。これは初期状態で、セッションで公開されているストリームがないときに開始した場合の状態です。ストリームがあると、"live" に変わります (または、他の状態に変わります)。live- VonageプラットフォームがリモートRTMPサーバーに正常に接続され、メディアがストリーミングされています。offline- VonageプラットフォームがリモートRTMPサーバーに接続できませんでした。これは、到達不能なサーバーまたはRTMPハンドシェイクのエラーが原因です。アプリケーションには、拒否されたRTMP接続、存在しないRTMPアプリケーション、拒否されたストリーム名、認証エラーなどがあります。サーバーがオンラインであること、正しいサーバーURLとストリーム名を指定したことを確認してください。error- Vonageプラットフォームにエラーがあります。
serverUrl- RTMPサーバーのURL。streamName- RTMPストリーム名。
settings- HLS放送ストリームの詳細このpropertiesオブジェクトにはhlsプロパティを持つ:multiBroadcastTag- 同時放送用のユニークタグ(設定されている場合)。streamMode- すべてのストリームをブロードキャストに含めるかどうか ("auto")、または放送に含めるストリームを選択する("manual").参照 ライブ・ストリーミング放送に含めるストリームの選択.streams- 現在ブロードキャストされているストリームに対応するオブジェクトの配列。これはstatusに設定する。"started"そしてstreamModeに設定する。"manual".配列の各オブジェクトは以下のプロパティを含む:streamId- 放送に含まれるストリームのストリームID。hasAudio- ストリームの音声を放送に含めるかどうか。hasVideo- ストリームのビデオを放送に含めるかどうか。
Vonageライブストリーミング放送機能の既知の問題点
ライブストリーミング放送機能には、以下の既知の問題があります:
- ライブストリーミング放送を停止すると、Vonageセッションの最後の5秒間(放送停止前)のコンテンツは放送ストリームから省略されます。