ライブ・ストリーミング放送
Vonage Video APIライブ・ストリーミング機能では、HTTPライブ・ストリーミング(HLS)またはRTMPストリームを使用して、ビデオ・セッションを大勢の視聴者にブロードキャストできます。
このページには以下のセクションがあります:
- ライブ・ストリーミング放送の開始と停止
- OpenTokライブ配信の動画レイアウトの設定
- ライブ・ストリーミング放送に含めるストリームの選択
- HLS放送でDVR機能を有効にする
- イベントの同期にHLSタイムスタンプメタデータを使用する
- 低遅延HLS放送
- 同時放送
- 音声のみの放送と映像のみの放送
- ライブ・ストリーミング放送に関する情報の入手
- ライブ・ストリーミング放送の状態変化を監視
- 既知の問題
HLSストリームを同時に視聴できるクライアントの数は、HLSストリームを同時に視聴できるクライアントの数よりも多い。 OpenTok ライブ・インタラクティブ ビデオセッション. たとえば、OpenTokセッションがOpenTokの ライブ双方向配信における15,000接続の上限に達した場合、クライアントに HLSストリームを提供することができます。HLSストリームは視聴者数の制限がありません。RTMPストリームは、RTMPプロバイダーがサポートする視聴者数によって制限されます。
RTMPストリーミング機能を使用すると、YouTube LiveやFacebookなど、 RTMPストリームに対応しているプラットフォームに動画ストリームを配信することができます。
また、WebRTCをサポートしていないクライアントでも、HLSまたはRTMPストリームを見ることができる。
1回の配信には、そのセッションからのビデオストリームを最大16本(およびオーディオストリームを最大50本)含めることができます。 セッションに同時に16本を超えるビデオストリームが含まれている場合、それ以上のストリームは配信に含まれません。
HLSは、OpenTokセッション内のライブストリームに対して15~20秒遅れて配信されます。 低遅延HLS(LL-HLS)は、ライブストリームより4~6秒遅れて配信されます。 初期の遅延期間中は、放送ストリームは利用できません。HLSまたはRTMPストリームが利用可能になるまでは、 クライアントに放送URLを提供しないでください。
アン EXT-X-ENDLIST このタグは、HLS配信の終了時にメディアプレイリストに含まれます(これにより、プレーヤーアプリケーションがストリームの終了を検知できるようになります)。
RTMPストリームの場合、OpenTokプラットフォームによる遅延は約5秒です。ただし、 YouTube LiveやFacebookなどの各RTMP配信プラットフォームでは、動画を公開する前に独自の処理を行うため、 それに応じてさらなる遅延が生じます。
HLS および RTMP ストリーミング機能は、ルーティングされたセッション( OpenTok Media Router を使用するセッション)でのみ利用可能です。詳細については、以下を参照してください。 OpenTok メディアルーターとメディア モード.
HLSの再生は、ほとんどのモダンブラウザでネイティブにサポートされています。 ネイティブ・サポートがない環境では、次のようなプラグインを利用できます。 フロープレーヤー を使用することで、クロスブラウザの互換性を確保することができます。
OpenTokのRTMPストリームには、以下の仕様があります:
- H.264ベースライン、レベル3.1、ビデオコーデック
- 解像度640x480ピクセル(SDランドスケープ)、480x640ピクセル(SDポートレート)、1280x720ピクセル(HDランドスケープ)、720x1280ピクセル(HDポートレート)、1920x1080ピクセル(FHDランドスケープ)、1080x1920ピクセル(FHDポートレート)、25フレーム/秒
- 動画のビットレート
- 2Mbpsの固定ビットレート(CBR)で、HD(720p)解像度まで対応、キーフレーム間隔は2秒
- FHD(1080p)解像度で4Mbpsの定ビットレート(CBR)、キーフレーム間隔は2秒
- 128 Kbps、サンプリングレート48 kHzの1チャンネルAACオーディオ
以下の設定を行うことで、配信に使用される最大ビットレートを制限することができます。 maxBitrate 「start broadcast」RESTメソッドを呼び出す際のプロパティ。
OpenTokのHLSストリームには、以下の仕様があります:
-
H.264ベースライン、レベル3.1、ビデオコーデック
-
解像度640x480ピクセル(SDランドスケープ)、480x640ピクセル(SDポートレート)、1280x720ピクセル(HDランドスケープ)、720x1280ピクセル(HDポートレート)、1920x1080ピクセル(FHDランドスケープ)、または1080x1920ピクセル(HDポートレート)、25フレーム/秒
-
品質レイヤー:
決議 品質レイヤー オーディオ・ビットレート HLSの最大レイヤービットレート VGA 3 128kbps 1Mbps HD(720p) 4 128kbps 2Mbps FHD(1080p) 5 128kbps 4Mbps -
128 Kbps、サンプリングレート48 kHzの1チャンネルAACオーディオ
参照 OpenTokの料金ページ HLSおよびRTMPストリーミングの料金に関する 詳細については。
ライブ・ストリーミング放送の開始と停止
OpenTok REST API を使用して、 スタート そして ストップ セッションのライブ配信、および ステータスを 確認する ライブ配信の。
HLSおよびRTMPストリームは、最後のクライアントがセッションから切断されてから60秒後に自動的に停止します。
また、各HLSおよびRTMPストリームには、デフォルトで4時間(14,400秒)の最大再生時間が設定されています
(この時間に達すると、ライブストリームの配信は自動的に停止します)。 放送の
最大継続時間は、 maxDuration を呼び出す際の
放送開始 RESTメソッド。最大継続時間は
60秒から10時間(36,000秒)まで設定できます。
注: ライブストリーミング放送は、セッションのサーバーローテーション中に終了します。サーバーローテーションの通知イベントに応じて、放送を再開できます。参照 サーバーのローテーションとセッションの移行.
を設定することで、ブロードキャストに使用する最大ビットレートを制限することができます。
maxBitrate プロパティを呼び出すときに 放送開始
RESTメソッド。最大ビットレートは100,000~6,000,000ビット/秒の範囲で設定できる。
6,000,000ビット/秒です。
OpenTokライブ配信の動画レイアウトの設定
OpenTokのライブストリーミング機能を使用する場合、HLS またはRTMPストリーム内の動画のレイアウトをカスタマイズできます。
デフォルトでは、OpenTokのライブストリーミング機能は、OpenTokセッションの動画を、合成されたHLSまたはRTMP動画内でタイル状の レイアウトで配置します。 このレイアウトは、セッション内の 動画の数に基づいて決定されます。例えば、以下は、セッション内に1、2、4、または5つのストリームがある場合の レイアウトを示しています:

これは「ベストフィット」レイアウトとして知られています。あるいは、他にも用意されている いくつかの定義済みレイアウトから選択することもできます。その他のレイアウトでは、各 OpenTok ビデオストリームにクラス名を割り当てて、 レイアウト内での表示方法を指定します。(参照: 定義済みの レイアウトの種類.)
また、CSSを使用して独自のカスタムレイアウトを定義することもできます。参照 カスタムレイアウトの 定義.
デフォルトでは、配信動画の解像度は640×480ピクセル(SD横向き、アスペクト比4:3)です。個々の
OpenTok動画は、合成動画内の矩形コンテナに配置されます。デフォルトでは、
動画は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)の解像度で配信するように設定することも可能です。 を呼び出す際に 放送開始 OpenTokの REST APIのメソッドです。モバイルデバイスからのビデオストリームを含む配信では、 縦向きアスペクト比を使用することをお勧めします(モバイルデバイスでは縦向きアスペクト比が一般的に使用されるため)。
初期レイアウトタイプの指定
いつ セッションのライブ配信を開始する, OpenTok 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%;}"
}
}
また、セッション内に画面共有ストリームがある場合に使用するレイアウトの種類を、 screenshareType プロパティの layout プロパティ(参照:
画面共有レイアウト):
{
"sessionId": "2_MX44NTQ1MTF--bm1kTGQ0RjVHeGNQZE51VG5scGNzdVl0flB-",
"layout": {
"type": "bestFit",
"screenshareType": "pip"
},
"name" : "archive_name",
"outputMode" : "composed"
}
無効な型を指定した場合、リクエストは400エラー応答コードを返す。
また、OpenTokサーバーSDKを使用してブロードキャストを開始する際に、 初期のレイアウトタイプを指定することもできます:
- Java —
OpenTok.startBroadcast(sessionId, properties)(に電話してlayout()のメソッドを使用する。BroadcastProperties.Builderオブジェクト) - ノード
OpenTok.startBroadcast()(設定するlayoutプロパティのoptionsパラメータ) - PHP
OpenTok->startBroadcast()(設定するlayoutプロパティのoptionsパラメータ) - Python —
opentok.start_broadcast()(設定するlayoutプロパティのoptionsパラメータ) - Ruby —
Broadcasts.create()(設定するlayoutプロパティのoptions(ハッシュ) - .NET —
OpenTok.StartBroadcast()(設定するlayoutパラメータ)
初期のレイアウトタイプを指定しない場合、HLS または RTMP ストリームには、最も適したレイアウトタイプが使用されます。 その他のレイアウトタイプを指定する場合は、OpenTok セッション内のストリームに適切なレイアウトクラスを適用するようにしてください (「 OpenTokの ストリームへのレイアウトクラスの割り当て).
参照 定義済みの レイアウトの種類.
ライブ・ストリーミング放送中にレイアウトの種類を動的に変更する
OpenTok を呼び出すことで、レイアウトの種類を動的に変更できます。 /broadcast/layout REST API.
を設定する。 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エラー応答コードを返す。
また、OpenTokサーバーSDKを使用してレイアウトの種類を変更することもできます:
- Java —
OpenTok.setBroadcastLayout() - ノード
OpenTok.setBroadcastLayout() - PHP
OpenTok->setBroadcastLayout() - Python —
opentok.set_broadcast_layout() - Ruby —
Broadcasts.layout() - .NET —
OpenTok.SetBroadcastLayout()
デフォルトの「Best Fit」レイアウトタイプ以外のレイアウトタイプを指定する場合は、OpenTok セッション内のストリームに 適切なレイアウトクラスを適用するようにしてください( OpenTokストリームへの レイアウトクラスの割り当て).
ライブ・ストリーミング放送に含めるストリームの選択
ライブストリーミング放送を開始する際に streamMode への "manual", 配信に含める
ストリームを選択できます。配信中にストリームの追加や削除を行うことも可能です。
また、配信にストリームの音声、動画(またはその両方)を含めるかどうかを指定できます。詳しくは
ライブ配信を開始する そして
ライブ・ストリーミング放送に含めるストリームの選択.
HLS放送でDVR機能を有効にする
HLS配信はDVR機能に対応しており、ユーザーは配信を巻き戻したり、一時停止したり、再生を再開したりすることができます
(DVR機能に対応したプレーヤーでのみ)。設定は dvr オプションで true いつ
ライブ・ストリーミング放送の開始.
DVRが有効になっている場合、HLS URLの末尾には「?DVR」というクエリ文字列が 追加されます。
DVR機能では、放送コンテンツを最大2時間遡って再生することができます。 放送が進行中の間、現在時刻から最大2時間前までの放送の任意の時点を 再生(および巻き戻し)することができます。放送が終了してから2時間経過すると、 DVR録画機能は利用できなくなります。
イベントの同期に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ストリームの遅延を考慮して、クライアントアプリケーション内のイベントを同期させることができます。 たとえば、動画ストリームの特定のタイミングで絵文字を表示するイベントをクライアントに送信したい場合、 クライアントはこのタイムスタンプを使用して、受信したストリームの遅延に基づいて絵文字の表示を遅らせることができます。
低遅延HLS放送
HLSブロードキャストが低遅延モードをサポートするように設定するには、次のように設定します。 low-latency オプションで true いつ
ライブ・ストリーミング放送の開始.
一部のHLSプレーヤーは低遅延モードをサポートしていません。
この機能は DVR HLS放送.
同時放送
同じセッションのライブ配信を複数
同時に開始するには、 multiBroadcastTag 次の場合に
各ライブ配信の開始.
進行中のセッションを同時に複数回配信する場合は、それぞれについて一意の文字列を設定する必要があります。
ライブ配信を開始する際に複数のRTMPストリームを指定することは可能ですが、
各ストリームはすべて同じオプション(割り当てられたストリームやレイアウトなど)を使用します。ただし、
同時配信を開始する場合(RESTメソッドを複数回呼び出し、 multiBroadcastTag オプションセット)を使用すれば、異なるレイアウトを採用し、
各同時放送に異なるストリームを割り当てることができます。
音声のみの放送と映像のみの放送
でライブ配信を開始すると、 OpenTok REST API,
では、オーディオ、ビデオ、またはその両方を含めるかどうかを指定できます。(詳細は hasAudio そして hasVideo オプション)。デフォルトは両方ブロードキャストする。
注: 音声のみの配信では、RTMPストリームに160×120の黒画面のフレームが含まれます。YouTubeやFacebookなど、一部のエンドポイントは音声のみのRTMPストリームを受け付けません。
ライブ・ストリーミング放送に関する情報の入手
OpenTok REST API を使用して、 情報を入手する ライブ配信について、または リスト ライブストリーミング配信。または、OpenTokサーバー用SDKをご利用ください:
- Java —
OpenTok.getBroadcast() - ノード
OpenTok.getBroadcast()そしてOpenTok.listBroadcasts() - PHP
OpenTok->getBroadcast() - Python —
opentok.get_broadcast() - Ruby —
Broadcasts.find()そしてBroadcasts.all() - .NET —
OpenTok.GetBroadcast()
ライブ・ストリーミング放送の状態変化を監視
コールバックURL(Webhook)を登録することで、プロジェクトのライブストリーミング放送のステータス変更の通知を受け取ることができます。
を登録できます。ライブストリーミング放送のステータスは、次のいずれかに設定されます。 "started" または "stopped".
プロジェクトにブロードキャスト・コールバックを登録する:
-
ログイン Vonage Video API アカウント.
-
左側のメニューで、ご希望のAccountを選択します(複数のAccountをお持ちの場合)。
-
左側のメニューから、セキュアコールバックを登録したいプロジェクトを選択してください。
-
を見つける。 放送モニタリング セクションで 設定 ボタンをクリックする。
-
コールバックURLと(オプションで)署名の秘密を指定する。
安全なコールバックの詳細については このページ.
ブロードキャストのステータスが変更されると、サーバーはあなたが指定したURLにHTTP POSTリクエストを送る。 リクエストのContent-Typeはapplication/jsonです。リクエストのデータは、次の形式のJSONオブジェクトです。 オブジェクトです:
{
"id": "1748b707-0a81-464c-9759-c46ad10d3734",
"sessionId": "2_MX4xMDBfjE0Mzc2NzY1NDgwMTJ-TjMzfn4",
"projectId": 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。 -
projectId- 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プロパティを参照してください。を参照のこと。 OpenTok ライブストリーミング開発者ガイド このURLの使用方法の詳細については、こちらをご覧ください。そのhlsStatusプロパティを以下のいずれかに設定する:
"connecting"— OpenTokサーバーは現在、トランスコーダーの起動中です。これは初期状態です。"ready"— OpenTokサーバーは正常に初期化されましたが、CDNがメディアを処理していません。"live"— OpenTokサーバーの初期化が正常に完了し、CDNがメディアを配信しています。"ended"- ソースストリームが終了した。DVRが有効で録画済みメディアが要求された場合、ステータスは次のように遷移します。"live"."error"— OpenTokプラットフォームでエラーが発生しています。
各RTMPストリームについて、RTMPサーバーのURLとストリーム名、およびRTMPストリームのステータスが提供される。
-
status- RTMP ストリームの状態。このプロパティは以下のいずれかに設定される:connecting— OpenTokプラットフォームは、リモートRTMPサーバーへの接続処理中です。これは初期状態であり、セッションに配信中のストリームがない状態で開始した場合のステータスです。ストリームが存在するようになると、「ライブ」に変わります(あるいは、他のいずれかの状態に切り替わります)。live— OpenTokプラットフォームは、リモートのRTMPサーバーへの接続に成功し、メディアのストリーミングが行われています。offline— OpenTokプラットフォームがリモートのRTMPサーバーに接続できませんでした。 これは、サーバーに接続できないか、RTMPハンドシェイクでエラーが発生したためです。原因としては、RTMP接続の拒否、RTMP Applicationsが存在しない、ストリーム名の無効、認証エラーなどが考えられます。サーバーがオンライン状態であるか、正しいサーバーURLとストリーム名が指定されているかを確認してください。error— OpenTokプラットフォームでエラーが発生しています。
-
serverUrl- RTMPサーバーのURL。 -
streamName- RTMPストリーム名。
settings- HLS放送ストリームの詳細このpropertiesオブジェクトにはhlsプロパティを持つ:multiBroadcastTag- 同時放送用のユニークタグ(設定されている場合)。streamMode- すべてのストリームをブロードキャストに含めるかどうか ("auto")、または放送に含めるストリームを選択する("manual").参照 ライブ・ストリーミング放送に含めるストリームの選択.streams- 現在ブロードキャストされているストリームに対応するオブジェクトの配列。これはstatusに設定する。"started"そしてstreamModeに設定する。"manual".配列の各オブジェクトは以下のプロパティを含む:streamId- 放送に含まれるストリームのストリームID。hasAudio- ストリームの音声を放送に含めるかどうか。hasVideo- ストリームのビデオを放送に含めるかどうか。
OpenTokのライブ配信機能に関する既知の問題
ライブ配信機能には、以下の既知の問題があります:
- ライブ配信を停止すると、OpenTokセッションのコンテンツのうち、配信停止の 直前の5秒間は配信ストリームから除外されます。