サポートに連絡する| システムステータス
ページコンテンツ

    通知このページは移動しました。3 秒後に新しい場所に移動します。ブックマークを更新してください!

    Live API:通知

    このトピックでは、ライブ API ジョブの通知を設定する方法について説明します。

    はじめに

    Brightcove Liveシステムは、さまざまなイベントの通知を送信します。通知のリスナーを設定して、追加のアクションをトリガーできます。リスナーは、使用する任意のサーバーサイド言語で記述できます。リスナーは、受信する 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"
            }
            ]
        }]
    }

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

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

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

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

    再試行戦略

    通知を送信する要求が失敗した場合、デフォルトの再試行方式は 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つのビデオレンディション、またはプログレッシブMP4レンディションを1つ作成しました

    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"
                  }
              }
              

    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"
              }

    通知の処理

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

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

               < ?php//JSONデータではPOSTが機能しません $問題 =「エラーなし」; $NotificationType = 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 = $通知。「\ n\ n」;//ログファイルがある場所をPHPに伝え、PHPに開き、以前に作成した文字列をそれに追加するように指示します。$logfileLocation = "live-log.txt「; $fileHandle = fopen ($logfileLocation, 'a') または死ぬ (「-1"); fwrite ($fileHandle, $logentRy); fclose ($fileHandle);//アプリを直接ブラウズすると「ライブコールバックアプリが実行されている」;?>

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

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

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

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

    ページの最終更新日15 Feb 2022