サポート問い合わせ先| システムステータス
ページコンテンツ

ライブAPI:通知

このトピックでは、Live APIジョブの通知を設定する方法を示します。

入門

Brightcoveライブシステムは、さまざまなイベントの通知を送信します。通知のリスナーを設定して、追加のアクションをトリガーできます。リスナーは、使用する任意のサーバーサイド言語で記述できます。リスナーは、受信する POST リクエストを探し、JSON リクエスト本文を解析し、必要なアクションを実行します。以下では、通知をリクエストする方法を示しています。

通知のリクエスト

1つ以上を含めることで通知をリクエストできますnotifications出力のフィールドジョブを作成するリクエスト。

の値は、notifications通知先オブジェクトの配列です。URL: で単純な文字列を使用することも"http://httpbin.org/post"、次のオプションを指定してオブジェクトを使用することもできます{"url": "http://httpbin.org/post", "credentials": "reference_to_your_credentials"}。出力の状態が変更されると、指定した宛先に通知が送信されます。このパラメータを VOD 出力に適用すると、通知はその VOD ジョブにのみ関連し、ライブジョブには関連付けられません。

以下にいくつかの例を挙げます。

ライブジョブの通知

{
    "live_stream": true,
    "region": "us-west-2",
    "reconnect_time": 20,
    "notifications": [
      {"url": "http://httpbin.org/post/URLA",
        "credentials": "reference_to_your_credentials",
        "event": "first_segment_uploaded"},
      {"url": "http://httpbin.org/post/URLB",
      "credentials": "reference_to_your_credentials",
      "event": "state_changed"}
      ],
    "outputs": [
    {
        "label": "hls360p",
        "live_stream": true,
        "height": 360,
        "video_bitrate": 650,
        "segment_seconds": 6
    },
    {
        "url":"s3://YOURBUCKET/path/filename.mp4",
        "credentials": "accConfiguredCredsAWSIdSecret",
        "notifications":    [
        {
            "url": "http://httpbin.org/post?vodStateChange"
        },
        {
            "url": "http://httpbin.org/post?vodFinished",
            "event": "output_finished"
        }
        ]
    }]
}
JSON

ライブからVODへの通知(output_finishedイベントのみ)

{
  "videocloud": {
    "video": {
      "name": "video name"
    }
  },
  "notifications": [{
    "url": "http://httpbin.org/post?vodFinished",
    "event": "output_finished"
  }]
}
JSON

ライブからVODへの通知(すべてのイベント)

{
  "videocloud": {
    "video": {
      "name": "video name"
    }
  },
  "notifications": [{
    "url": "http://httpbin.org/post"
  }]
}
JSON

再試行戦略

通知を送信する要求が失敗した場合、デフォルトの再試行方式は 50 回リトライし、試行間隔の指数関数的な遅延を伴います。

          max_retry_times = 50
          delay_delta_s = 5
          next_retry = now_s + retry_count * delay_delta_s

イベント

以下に、リスニングできるジョブライフサイクルのイベントを示します。イベントスコープはジョブ単位であるため、ライブジョブのイベントライフサイクルは、同じライブストリームに基づく VOD クリッピングジョブのライフサイクルとは別になります。

  • state_changed -ライブジョブの状態が変更されました。詳細については、以下の表を参照してください
  • first_segment_uploaded -ライブストリームの最初のセグメントはオリジンにアップロードされます
  • output_finished -ライブイベントが終了し、VOD 処理によって少なくとも 1 つのオーディオと 1 つのビデオレンディション、または 1 つのプログレッシブ MP4 レンディションが作成されました

state_changedは、次の表に示す次の状態について通知します。

ライブジョブの状態
状態 説明
ジョブの状態 (通知で報告されるstate )
error エラーが発生しました。ジョブは処理されません。
standby (静的エントリポイント [SEP] ジョブにのみ適用可能)ジョブが割り当てられ、アクティブ化の準備が整いました。
waiting ジョブがストリーミングワーカーに割り当てられ、エンコーダを接続する準備ができています。
processing エンコーダが接続され、ジョブを再生できます。
disconnected エンコーダが切断され、ストリーミングワーカーは再接続を待っています。
cancelling ジョブはキャンセルされ、ワーカーはジョブを停止しており、保留中の VOD 出力を処理しません。
finishing エンコーダがよりも多く切断されreconnect_time、ストリーミングワーカーがジョブを停止し、関連する VOD 出力を作成しています。
cancelled ジョブは正常にキャンセルされました。
finished ジョブは正常に終了しました。
failed システムエラーの結果としてジョブが停止しました。
VOD ジョブの状態 (通知でとして報告jvod_state )
error エラーが発生しました。ジョブは処理されません。
waiting 処理を待っているジョブ。
waiting_finish_live ライブジョブが終了するのを待っているジョブ (クリップがそれに依存する場合)。
processing クリップは処理中です。
creating_asset VOD アセットを作成中です。
cancelling ジョブはキャンセルされ、ワーカーはジョブを停止しており、保留中の VOD 出力を処理しません。
cancelled ジョブは正常にキャンセルされました。
finished ジョブは正常に終了しました。
failed システムエラーの結果としてジョブが停止しました。
SSAI の状態(通知で報告されるssai_state
none その仕事はSSAIの仕事ではない。
waiting_input ストリーミングワーカーは、エンコーダが接続してストリーム入力情報を提供するのを待っています。
start_transcoding エンコーダが接続され、ストリーム入力データと出力データに基づいて、SSAI スレートがトランスコーディング用にキューに入れられます。
transcoding スレタイがトランスコードされてる
error スレートをダウンロードまたはトランスコードできませんでした。
ready スレートが生成され、ジョブは SSAI 再生の準備ができています。
SEP 状態(通知ではとして報告されるsep_state
none その仕事は SEP の仕事ではありません。
ready エントリポイントがアクティブになり、エンコーダを接続する準備ができました。
pending_activation エントリポイントは、ストリーミングワーカー割り当てのキューに入れられました。
activation_in_progress エントリポイントが更新され、ストリーミングワーカーへの接続をルーティングしています。
pending_deactivation エントリポイントは、ストリーミングワーカーからのクリーンアップのためにキューに入れられました。
deactivation_in_progress エントリポイントがストリーミングワーカーから切断されています。
cancelled エントリポイントはキャンセルされました。
finished エントリポイントは正常に完了しました。
RTMP 出力状態(rtmp_output_state_changed通知についてとして報告state
starting ストリームが開始しています。
connected エンコーダが接続されました。
Disconnected エンコーダが切断されました。
error ストリームの接続に失敗しました。
pending_deactivation エントリポイントは、ストリーミングワーカーからのクリーンアップのためにキューに入れられました。
deactivation_in_progress エントリポイントがストリーミングワーカーから切断されています。
cancelled エントリポイントはキャンセルされました。
finished エントリポイントは正常に完了しました。

通知の例

ライブストリーム通知

state_changedライブジョブのイベント通知の例を次に示します。

          {
              "outputs": [
                  {
                      "rfc_6381_video_codec": null,
                      "finished_at": "2017-10-19T20:08:11.115Z",
                      "segment_seconds": 4,
                      "created_at": "2017-10-19T19:47:04.534Z",
                      "privacy": false,
                      "md5_checksum": null,
                      "audio_codec": "AAC",
                      "error_class": null,
                      "updated_at": "2017-10-19T20:08:11.115Z",
                      "video_bitrate_in_kbps": 2150.4,
                      "id": "0-621669558be84a7da4ff20bccb9a6a1a",
                      "state": "cancelled",
                      "playback_url": "http:\/\/bcovlive-a.akamaihd.net\/621669558be84a7da4ff20bccb9a6a1a\/us-west-2\/NA\/profile_0\/chunklist.m3u8",
                      "duration_in_ms": 1156873,
                      "file_size_bytes": null,
                      "height": 720,
                      "playback_url_dvr": "http:\/\/bcovlive-a.akamaihd.net\/621669558be84a7da4ff20bccb9a6a1a\/us-west-2\/NA\/profile_0\/chunklist_dvr.m3u8",
                      "error_message": null,
                      "video_codec": "H.264",
                      "audio_bitrate_in_kbps": 196.608,
                      "fragment_duration_in_ms": null,
                      "test": false,
                      "playback_url_vod": "http:\/\/bcovlive-a.akamaihd.net\/621669558be84a7da4ff20bccb9a6a1a\/us-west-2\/NA\/profile_0\/chunklist_vod.m3u8",
                      "total_bitrate_in_kbps": 2347.008,
                      "format": null,
                      "label": "hls720p",
                      "frame_rate": null,
                      "video_codec_profile": "high",
                      "keyframe_interval": 60,
                      "keyframe_interval_follow_source": false,
                      "live_stream": true,
                      "channels": null,
                      "playback_added_cdns": [

                      ],
                      "width": 1280,
                      "rfc_6381_audio_codec": null,
                      "audio_sample_rate": null
                  },
                  {
                      "rfc_6381_video_codec": null,
                      "finished_at": "2017-10-19T20:08:11.115Z",
                      "segment_seconds": 4,
                      "created_at": "2017-10-19T19:47:04.534Z",
                      "privacy": false,
                      "md5_checksum": null,
                      "audio_codec": "AAC",
                      "error_class": null,
                      "updated_at": "2017-10-19T20:08:11.115Z",
                      "video_bitrate_in_kbps": 1536,
                      "id": "1-621669558be84a7da4ff20bccb9a6a1a",
                      "state": "cancelled",
                      "playback_url": "http:\/\/bcovlive-a.akamaihd.net\/621669558be84a7da4ff20bccb9a6a1a\/us-west-2\/NA\/profile_1\/chunklist.m3u8",
                      "duration_in_ms": 1156873,
                      "file_size_bytes": null,
                      "height": 540,
                      "playback_url_dvr": "http:\/\/bcovlive-a.akamaihd.net\/621669558be84a7da4ff20bccb9a6a1a\/us-west-2\/NA\/profile_1\/chunklist_dvr.m3u8",
                      "error_message": null,
                      "video_codec": "H.264",
                      "audio_bitrate_in_kbps": 196.608,
                      "fragment_duration_in_ms": null,
                      "test": false,
                      "playback_url_vod": "http:\/\/bcovlive-a.akamaihd.net\/621669558be84a7da4ff20bccb9a6a1a\/us-west-2\/NA\/profile_1\/chunklist_vod.m3u8",
                      "total_bitrate_in_kbps": 1732.608,
                      "format": null,
                      "label": "hls540p",
                      "frame_rate": null,
                      "video_codec_profile": "main",
                      "keyframe_interval": 60,
                      "keyframe_interval_follow_source": false,
                      "live_stream": true,
                      "channels": null,
                      "playback_added_cdns": [

                      ],
                      "width": 960,
                      "rfc_6381_audio_codec": null,
                      "audio_sample_rate": null
                  },
                  {
                      "rfc_6381_video_codec": null,
                      "finished_at": "2017-10-19T20:08:11.115Z",
                      "segment_seconds": 4,
                      "created_at": "2017-10-19T19:47:04.534Z",
                      "privacy": false,
                      "md5_checksum": null,
                      "audio_codec": "AAC",
                      "error_class": null,
                      "updated_at": "2017-10-19T20:08:11.115Z",
                      "video_bitrate_in_kbps": 819.2,
                      "id": "2-621669558be84a7da4ff20bccb9a6a1a",
                      "state": "cancelled",
                      "playback_url": "http:\/\/bcovlive-a.akamaihd.net\/621669558be84a7da4ff20bccb9a6a1a\/us-west-2\/NA\/profile_2\/chunklist.m3u8",
                      "duration_in_ms": 1156873,
                      "file_size_bytes": null,
                      "height": 360,
                      "playback_url_dvr": "http:\/\/bcovlive-a.akamaihd.net\/621669558be84a7da4ff20bccb9a6a1a\/us-west-2\/NA\/profile_2\/chunklist_dvr.m3u8",
                      "error_message": null,
                      "video_codec": "H.264",
                      "audio_bitrate_in_kbps": 196.608,
                      "fragment_duration_in_ms": null,
                      "test": false,
                      "playback_url_vod": "http:\/\/bcovlive-a.akamaihd.net\/621669558be84a7da4ff20bccb9a6a1a\/us-west-2\/NA\/profile_2\/chunklist_vod.m3u8",
                      "total_bitrate_in_kbps": 1015.808,
                      "format": null,
                      "label": "hls360p",
                      "frame_rate": null,
                      "video_codec_profile": "main",
                      "keyframe_interval": 60,
                      "keyframe_interval_follow_source": false,
                      "live_stream": true,
                      "channels": null,
                      "playback_added_cdns": [

                      ],
                      "width": 640,
                      "rfc_6381_audio_codec": null,
                      "audio_sample_rate": null
                  },
                  {
                      "playlist_type": "defaultS3",
                      "dvr_filename": "playlist_dvr.m3u8",
                      "filename": "playlist.m3u8",
                      "playback_url": "http:\/\/bcovlive-a.akamaihd.net\/621669558be84a7da4ff20bccb9a6a1a\/us-west-2\/NA\/playlist.m3u8",
                      "type": "playlist",
                      "playback_url_dvr": "http:\/\/bcovlive-a.akamaihd.net\/621669558be84a7da4ff20bccb9a6a1a\/us-west-2\/NA\/playlist_dvr.m3u8"
                  }
              ],
              "input": {
                  "finished_at": "2017-10-19T20:08:11.115Z",
                  "created_at": "2017-10-19T19:47:04.534Z",
                  "privacy": false,
                  "md5_checksum": null,
                  "audio_codec": null,
                  "error_class": null,
                  "updated_at": "2017-10-19T20:08:11.115Z",
                  "video_bitrate_in_kbps": null,
                  "id": "input-621669558be84a7da4ff20bccb9a6a1a",
                  "state": "cancelled",
                  "duration_in_ms": 1156873,
                  "file_size_bytes": null,
                  "audio_tracks": null,
                  "height": null,
                  "error_message": null,
                  "video_codec": null,
                  "audio_bitrate_in_kbps": null,
                  "test": false,
                  "total_bitrate_in_kbps": null,
                  "format": null,
                  "frame_rate": null,
                  "url": null,
                  "channels": null,
                  "width": null,
                  "audio_sample_rate": null
              },
              "event": "state_changed",
              "job": {
                  "event_length": 0,
                  "static": false,
                  "finished_at": "2017-10-19T20:08:11.115Z",
                  "test": false,
                  "submitted_at": "2017-10-19T19:47:04.534Z",
                  "created_at": "2017-10-19T19:47:04.534Z",
                  "privacy": false,
                  "out_worker_bytes_rate": 0,
                  "ad_insertion": false,
                  "metadata_passthrough": false,
                  "live_stream": true,
                  "out_worker_bytes": 147114065,
                  "live_dvr_sliding_window_duration_ms": 57600000,
                  "updated_at": "2017-10-19T20:08:11.115Z",
                  "encryption": [

                  ],
                  "live_dvr_sliding_window_duration_ms": 57600000,
                  "ssai_state": "none",
                  "id": "621669558be84a7da4ff20bccb9a6a1a",
                  "state": "cancelled",
                  "playback_url": "http:\/\/bcovlive-a.akamaihd.net\/621669558be84a7da4ff20bccb9a6a1a\/us-west-2\/NA\/playlist.m3u8",
                  "region": "us-west-2",
                  "reconnect_time": 1800,
                  "playback_url_dvr": "http:\/\/bcovlive-a.akamaihd.net\/621669558be84a7da4ff20bccb9a6a1a\/us-west-2\/NA\/playlist_dvr.m3u8"
              }
          }
          
JSON

S3 サンプルへのクリッピング

以下は、クリップを作成して S3 state_changedバケットに送信するためのサンプルイベントです。クリップの S3 アドレスはとして含まれていることに注意してくださいjvod_url

          {
              "jvod_id": "b750cce9e21a4cc894c4507208495b0c",
              "jvod_url": "s3:\/\/learning-services-media.brightcove.com\/test_dur60.mp4",
              "jvod_created_at": 1517520650785,
              "jvod_duration_s": 30,
              "jvod_cancelling_flag": false,
              "label": "last_30",
              "jvod_reported_duration_s": null,
              "jvod_finished_at": 0,
              "jvod_type": "s3",
              "account_id": "a95ac581551b4478b27910e5675db1f8",
              "jvod_worker_id": "b55b6fec738e4d2788544d3233b5ecf6",
              "user_id": "c2691d4d039040be96c190a949d754a7",
              "job_id": "7005c6e07bc24ca7b69b6b9d24052720",
              "jvod_last_state_change_at": 1517520652312,
              "jvod_region": "us-west-2",
              "cloud_id": "301c91a5d9254b5d944b108c355f12be",
              "event": "state_changed",
              "jvod_state": "processing"
          }
JSON

通知の処理

通知を受信するには、HTTP/HTTPS POST要求を受信できるアプリが必要です。その後、アプリは JSON 通知を解析し、その内容に基づいて必要な操作を行うことができます。

簡単な例として、Brightcove ラーニングサービスで通知を受信してテキストファイルに書き込むために使用する PHP アプリケーションを示します。

          <?php // POSTはJSONデータでは機能しません$ problem = "エラーなし"; $ notifyType = null;試す{ $json = file_get_contents('php://input'); $decoded = json_decode($json, true); // turn notification into pretty printed JSON $notification = json_encode($decoded, JSON_PRETTY_PRINT); }キャッチ(例外$ e){ $problem = $e--->getMessage(); $notification = $json; } $ logEntry = $ notification。 "\\ n \\ n"; //ログファイルを見つけることができる場所をPHPに通知し、//ログファイルを開くようにPHPに指示し、前に作成した文字列を追加します。 $ logFileLocation = "live-log.txt"; $ fileHandle = fopen($ logFileLocation、 'a')またはdie( "-1"); fwrite($ fileHandle、$ logEntry); fclose($ fileHandle); //アプリを直接参照すると、以下の行が表示されますecho "Live callback app is running"; ?>
PHP

  • 場合によっては、同一の通知が複数回送信されます。ハンドラが通知に基づいて(単純なロギングとは別に)アクションを実行している場合は、重複をチェックし(id同じおよびを持つ複数の通知status)、無視するようにハンドラを設定する必要があります。

ライブモジュールで通知を設定する

Live Module で作成したライブイベントの通知を設定するには、次の操作を行う必要があります。

  1. 前のセクションに示した PHP アプリのように、POST 要求を受信できるハンドラーアプリケーションを作成します。
  2. パブリック URL でアプリをホストします。
  3. ライブモジュールでライブジョブを作成する場合は、詳細オプションを展開します
  4. [ ストリームステータス通知を有効にする] オプションをオンにして、ハンドラーアプリの URL を入力します。
    Enable Notications in Live Module
    ライブモジュールで通知を有効にする

ページの最終更新日22 Sep 2021