VAS_Live Recording

最終更新日:2023-06-25 17:32:47

1.VASイ紹介

1.1 概要

ライブストリーミング業界の発展は、インターネットにおけるライブストリーミングコンテンツの流行りをもたらしました。そして、多くの競合他社や社会問題が発生しました。このような変化やニーズに対応するため、CDNetworksはライブ録画機能をリリースしています。

Basic Live Recording
ライブストリーミングのVoDレビューは、ライブストリーミングプラットフォームにとって必要不可欠な機能となっています。また、世界的なライブストリーミング産業の急速な発展に伴い、多くの国ではプラットフォームを規制するルールが発表されており、ライブストリーミングコンテンツのローカルストレージは、検査のために将来多くの国で要求されることは予測されます。
CDNライブ録画は、自作によるライブ録画と比べたら、コスト面で圧倒的なアドバンテージを持っています。CDNetworksライブ録画は、CDNetworksライブストリーミングとCDNetworksクラウドストレージ(略してWCS)を組み合わせたプロダクトであり、録画プラスストレージのワンストップソリューションとして機能してくれます。

Selective Live Recording
CDNの協力によりライブドメインにあらかじめ設定され、Basic Live Recording機能に加えて、お客様のビジネスニーズに応じて、ストリームの一部を自在に録画できる機能となっています。

この機能は主に以下のようなシーンで活用されています。

  • 話題になっているライブコンテンツ向けにサービスを提供します。定番コンテンツの話題性を維持するため、ライブストリーミングプラットフォームがライブストリーミング終了後に再放送や映像のオンデマンドサービスを提供しています。
  • プラットフォーム全体で再生やVoDコンテンツを必要としていない場合、Basic Live Recordingは、特定のライブコンテンツや開始時間と終了時間を選択できません。好みのライブコンテンツを録画したいお客様には、Selective Live Recordingの方が適しています。
特徴 モード 紹介 API
Basic Live Recording 録画ルールについて、お客様との話し合いが終わる次第、CDNetworksが設定を行います。そして、設定されたドメイン/アプリ名/ストリーム名に対して、自動的に録画が行われます。 いいえ
Selective Live Recording モード1 お客様が呼び出したAPIを通じて、オンエアーのライブストリーミングの録画を開始または停止します。 はい
モード2 お客様がAPIを呼び出し、開始されていないライブストリーミングのライブ録画設定を有効または無効にすることができます。 はい

1.2 適用プロダクト

  • Media Acceleration- Live Broadcast.

1.3 適用シーン

  1. 将来的に閲覧できるように、「インターネットライブストリーミングサービス管理に関する規定」に基づいて、ライブストリーミングプラットフォームで再生されるコンテンツを録画します。
  2. 第二波の宣伝やプラットフォームのVoDプログラムの充実のために、アンカーの魅力的なコンテンツを保持します。
  3. 人気スポーツやライブストリーミングの再配信で人気を維持します。

2.機能詳細

2.1 Basic Live Recording

2.1.1 機能説明

ライブ録画ファイルが生成され、ライブストリーミングファイルをWCSにアップロードすると、録画+ストレージ+トランスコードのワンストップサービスが実行されます。ライブストリーミングをVoDに変換する際の時間対効果は、秒単位で管理することが可能です。
録画方法は以下の通りです。

  1. 録画形式:flv、mp4、ts。
  2. ファイルの命名形式:ストリーム名+タイムスタンプ
  3. 5分置きに録画するなど、時間の長さに応じたチャンク録画に対応しています。
  4. トランスコード、transmuxing、ウォーターマークなどのオーディオ/映像処理に対応しています。
  5. 顧客インターフェースの録画のコールバックすることができます。
  6. コールバック通知が失敗した場合、リトライすることができます。

2.1.2 コールバックの説明

録画開始と停止のコールバック
CDNetworksは、録画開始と終了時に、カスタマーインターフェースのコールバックからお客様に通知します。コールバックはセカンドレベルの粒度で、タイムリーかつ高効率も高いのです。また、通知の頻度や回数に応じて、通知を統合することで、頻繁な通知による資源の浪費を防ぐことができます。
録画開始のお知らせ:
通知アドレスの例:
http://abc.com?messagetype=wsrecord¬_start
注:アドレスが200を応答すると通知が成功することになります。

お知らせの内容:
通知アドレスには、URLセキュリティBase64でエンコードされたJson情報が届き、お客様はそれを解析することでコンテンツを取得します。解析後のコンテンツ形式は以下の通りです:

{

​    "persistentId": "<persistentId>",

​    "streamname": "<streamname>",

​    "ops": "<Record ops>",

​    "bucket": "<bucket>",

​    "batch_notify_id": "<batch_notify_id>"

}

フィールド名 必須項目 説明
persistentId はい 録画タスクの一意識別子
ストリーム名 はい ライブストリーム名。形式は"アプリ名"-"ストリーム名"となります。
ops はい 出力形式やビットレートなどの情報を含む録画パラメータ。
バケット はい 録画用ストレージのスペース名
batch_notify_id いいえ 通知統合の関連ID。複数の録画タスクに対する結果通知統合が設定されている場合、このフィールドは NULLとなります。

録画停止通知:
通知アドレスの例:
http://abc.com?message_type=wsrecordfinish
注:アドレスが200を応答すると通知が成功することになります。
通知アドレスには、URLセキュリティBase64でエンコードされたJson情報が届き、お客様はそれを解析することでコンテンツを取得します。解析後のコンテンツ形式は以下の通りです:

{

"items": [

​    {

​      "persistentId": "< persistentId >",

​      "streamname": "<streamname>",

​      "ops": "<ops>",

​      "bucket": "<bucket>",

​      "code": "<code>",

​      "desc": "<desc>",

​      "error": "<error>",

​      "keys": [

​        "key1",

​        "key2",

​        "key3"

​      ],

​      "urls": [

​        "url1",

​        "url2"

​       ]

​      "detail": [

​       {

​           "key": "<key string>",

​           "url": "<url string>",

​           "duration": "<duration double>",

​           "hash": "<hash string>",

​           "fsize": "<fsize int>",

​           "startTime": "<startTime string>",

​           "endTime": "<endTime string>",

​           "bit_rate": "<bit_rate string>",

​           "resolution": "<resolution string>"

​       }

​     ]



​    },

​    {

​      "persistentId": "<persistentId >",

​      "streamname": "<streamname>",

​      "ops": "<ops>",

​      "bucket": "<bucket>",

​      "code": "<code>",

​      "desc": "<desc>",

​      "error": "<error>",

​      "keys": [

​        "key1",

​        "key2",

​        "key3"

​      ],

​      "urls": [

​        "url1",

​        "url2"

​      ]

​      "detail": [

​       {

​           "key": "<key string>",

​           "url": "<url string>",

​           "duration": "<duration double>",

​           "hash": "<hash string>",

​           "fsize": "<fsize int>",

​           "startTime": "<startTime string>",

​           "endTime": "<endTime string>",

​           "bit_rate": "<bit_rate string>",

​           "resolution": "<resolution string>"

​       }

​     ]



​    }

],

"batch_notify_id": "<batchnotifyid>"

}

フィールド名 必須 説明
persistentId はい 録画タスクの一意識別子
ストリーム名 はい ライブストリーム名。形式は「アプリ名」-「ストリーム名」となります。
ops はい 出力形式やビットレートなどの情報を含む録画パラメータ。
バケット はい 録画用ストレージのスペース名
コード はい 録画タスクのステータスコード。値1、2、3はそれぞれ処理中、処理失敗、処理成功を意味します。
desc はい タスクステータスコードの説明。値は fileOperateActive、fileOperateFail、fileOperateSucceed であり、それぞれは処理中、処理失敗、処理成功を意味しています。
エラー いいえ エラーの説明
キー いいえ 出力ファイル名リスト。録画が失敗した場合、このフィールドはNULLとなります。
urls いいえ 出力ファイルのアドレスリスト。録画が失敗した場合、このフィールドはNULLとなります。
詳細 いいえ 出力ファイルの詳細情報。録画が失敗した場合、このフィールドはNULLとなります。
キー いいえ 出力ファイル名。録画が失敗した場合、このフィールドはNULLとなります。
url いいえ 出力ファイルのアドレス。録画が失敗した場合、このフィールドはNULLとなります。
再生時間 いいえ 出力映像ファイルの再生時間。録画が失敗した場合、このフィールドはNULLとなります。
ハッシュ いいえ 出力映像ファイルのハッシュ値。録画が失敗した場合、このフィールドはNULLとなります。
fsize いいえ 出力映像ファイルのサイズ、単位はB(バイト)です。録画が失敗した場合、このフィールドはNULLとなります。
開始時間 いいえ 録画の開始時刻
終了時刻 いいえ 録画終了時刻
ビットレート いいえ 出力ファイルの映像ビットレート
解像度 いいえ 出力映像ファイルの解像度
batch_notify_id いいえ 通知統合の関連ID。複数の録画タスクに対する結果通知統合が設定されている場合、このフィールドは NULLとなります。

2.1.3 紹介

Basic Live Recordingを有効にする場合、お客様は以下の情報をCDNetworksに提出する必要があります。

  1. 録画チャンクの時間。
  2. 録画ファイルの命名規則。
  3. 録画ファイル形式
  4. オーディオ/映像ビットレートの詳細情報(トランスコーディングで必要な場合)。マルチビットレート映像変換をするため、各ストリームのビットレート情報を提出する必要があります。
  5. そのコールバックアドレス。CDNetworksは、コールバックのコンテンツ形式とコールバックが失敗した時の処理メカニズムについて、お客様と話し合います。

2.2 Selective Live Recording

2.2.1 機能説明

CDNetworksのSelective Live Recordingは、API呼び出しで実装されます。2つのモードに分けることができます。
モード### 1: 1つ以上のストリームがスタートすると、APIを呼び出してライブストリーミングを録画します。APIが呼び出されると録画が開始し、呼び出しが終了すると録画も終了します。この設定は、このライブストリーミングにのみ有効です。
モード### 2: ドメイン名、アプリ名、ストリームの粒度での呼び出しに対応しています。ライブストリーミングが止めているとき、APIを呼び出して、デフォルトの録画を有効にします。この機能を使うと、ライブストリーミングが始まると録画も始まり、終わると録画も終了します。初期設定が有効になると、すべてのライブストリーミングが録画されます。

APIにはアクセス許可が必要です。アカウントがCDNetworksのサービスを有効にし、かつ一定のルールでパラメータを入力した場合にのみ、正しく呼び出されます。アクセス管理ポリシーは、n、r、kの3つのパラメータによって決められ、その詳細な説明は以下の通りです:

  1. n: デフォルトでポータルプラットフォームのアカウント名に設定。

  2. r: ユニークなランダム文字列。最大で10文字。タイムスタンプ推奨。

  3. k: md5検証値。
    MD5の計算方法:
    k = md5(r+key)、つまり新しい文字列であり、rにkeyを加え、MD5でハッシュ化し、新しい値kに変換することです。
    注:キーは、当社のカスタマーサービススタッフから取得できます。
    例:
    1.適用してキーを取得=012f37a3f2952
    2.ランダムな文字列r=1409284800を生成
    3.統合して新しい文字列を生成=1409284800012f37a3f2952

  4. 新しい文字列をMD5で計算し、k値を得る: b9fed80be752551834eec3e52fa94115

2.2.2 インターフェース説明

2.2.2.1 モード### 1のインターフェース

API アドレス: http://livect.ossin.cdnetworks.com/v2/api/stream_listen_call.action (アジア地域で使用)
http:// livect.osame.cdnetworks.com/v2/api/stream_listen_call.action (欧米地域で使用)
http://livect.ossin.cdnetworks.com/v2/api/stream_listen_call.action を例に挙げて説明します。
real-time recording開始:POST方法 URL:http://livect.ossin.cdnetworks.com/v2/api/stream_listen_call.action?type=record&domain=ws.test.cn&appname=test&streamnames=pushtest1, pushtest2&n=xxx&r=xxx&k=xxx
パラメータ仕様

フィールド名 フィールドタイプ フィールドの意味 必須項目 デフォルト値
_method 文字列 オペレーションタイプ いいえ デフォルト値なし 呼び出し例、リクエスト方法1をご参照ください:ポスト
タイプ 文字列 管理方式 はい レコード record= record
ドメイン 文字列 ドメイン名 はい ws.test.com
アプリ名 文字列 アプリ名 はい テスト
ストリーム名 文字列 ストリーム名 はい 複数のストリームに対応しています。ストリーム名は「, 」で区切られます。例:push_test1,push_test2
n 文字列 ユーザー はい
r 文字列 乱数 はい 現在のタイムスタンプ
k 文字列 検証値 はい Md5(r+トークン)

起動タスクの戻り値
正 :HTTP-CODE 200

{

"msg": "success", // prompt

"http_code": 200, // business status

'trace_id': "0e06b1cb-5bfc-47e4-872f-6dac38dd0f54", // transaction record

"call_time": "2017-08-02 11:43:34", // request time

"list": [ // task details

​    {

​      "task": "flv", // file format

​      "id": "test", // stream name

​      "http_code": 200, // process succeed

​      "msg": null, // prompt

​      "persistentId": "21_111222233344567885555544" // file identifier

​    }]

}



Authentication parameter missing: HTTP-CODE 403

{

"msg": "apiName, n, r, k not exist or empty",

"http_code": 1002,

'trace_id': "74abec25-5662-4d6c-88a7-db15f7fd7e70",

"call_time": "2017-08-02 11:43:34"

}


無許なし:HTTP-CODE 403
一部失敗:HTTP-CODE 200,HTTP_BODY は次の通り:

{

"msg": 「ストリーム録画の一部が失敗しました",

"http_code": 1011,

'trace_id':cee8e3f7-e1ab-4d9c-ad98-2259045a6bac",

"call_time": "2017-08-02 11:43:34",

"list": [

​    {

​      "task": "flv",

​      "id": "id",

​      "http_code": 200,

​      "msg": null,

​      "persistentId": "21_111222233344567885555544"

​    },

​    {

​      "task": "jpg",

​      "id": "id",

​      "http_code": 1007, // 成功しなかった場合のプロンプト

​      "msg": "call wcs failure", // 失敗したときのプロンプト

​      "persistentId": null

​    }]

}


録画停止
POST方法:

URL:http://livect.ossin.cdnetworks.com/v2/api/stream_listen_call.action?type=record&domain=ws.test.com&appname=test&streamnames=pushtest1,pushtest2&n=xxx&r=xxx&k=xxx&_method=DELETE

削除方法:

URL:http://livect.ossin.cdnetworks.com/v2/api/stream_listen_call.action?type=record&domain=ws.test.com&appname=test&streamnames=pushtest1,pushtest2&n=xxx&r=xxx&k=xxx

停止タスクの戻り値
正しい:HTTP-CODE 200,HTTP-BODY は次の通り:

{

"msg": "success",

 "http_code": 200,

'trace_id':"8fe8e186-8435-4f6b-b38e-d30854dfe467",

"call_time": "2017-08-02 11:43:34",

"list": [

​    {

​      "task": "jpg",

​      "http_code": 200,

​      "msg": "success",

​      "persistentId": "21_111222233344567885555544"

​    }]

}

リクエストパラメータエラー:HTTP-CODE 400
許可なし:HTTP-CODE 403
管理タスクが存在しません:HTTP-CODE 200,HTTP-BODY は次の通り:

{

"msg": "id:stop record param not exists;id2:stop record param not exists;",

"http_code": 1007,

'trace_id':3caed803-63d4-4e2a-8a8e-abc9160e2977",

"call_time": "2017-08-02 11:43:34",

"list": []

}

2.2.2.2 モード### 2のインターフェース

APIアドレス

http://livect.osame.cdnetworks.com /v2/api/stream_listen_setting.action(Used for Europe and America area);

We’ll use http://livect.ossin.cdnetworks.com/v2/api/ stream_listen_setting.action の例は次の通りです。

デフォルト録画開始
POST方法:
URL:http://livect.ossin.cdnetworks.com/v2/api/stream_listen_setting.action?type=record&domain=ws.test.com&appname=test&streamnames=pushtest1,pushtest2&n=xx&r=xx&k=xxx
パラメータの仕様

フィールド名 フィールドタイプ フィールドの意味 必須項目 デフォルト値
_method 文字列 オペレーションタイプ いいえ デフォルト値なし 呼び出し停止、リクエスト方法1の例をご参照ください:ポスト
タイプ 文字列 管理方式 はい レコード Type=record、録画を示します
ドメイン 文字列 ドメイン名 はい ws.test.com
アプリ名 文字列 アプリ名 いいえ テスト
ストリーム名 文字列 ストリーム名 いいえ 複数のストリームに対応しています。ストリーム名は「, 」で区切られます。例:push_test1,push_test2
n 文字列 ユーザー はい
r 文字列 乱数 はい 現在のタイムスタンプ
k 文字列 検証値 はい Md5(r+トークン)

録画開始の戻り値
正しい:HTTP-CODE 200,HTTP-BODYは以下の通り:

{

"msg": "success",

"http_code": 200,

'trace_id':d891992f-ce3a-41d3-ac6e-37695e797aac",

"call_time": "2017-08-02 11:43:34"

}

認証パラメータがありません:HTTP-CODE 403

{

"msg": "apiName, n, r, k not exist or empty",

"http_code": 1002,

'trace_id':"74abec25-5662-4d6c-88a7-db15f7fd7e70",

"call_time": "2017-08-02 11:43:34"

}

許可なし:HTTP-CODE 403

録画停止
POST方法:
URL:http://livect.ossin.cdnetworks.com/v2/api/stream_listen_setting.action?type=record&domain=ws.test.com&appname=test&streamnames=pushtest1,pushtest2&n=xx&r=xx&k=xxx&_method=DELETE
DELETE method:
URL:http://livect.ossin.cdnetworks.com/v2/api/stream_listen_setting.action?type=record&domain=ws.test.com&appname=test&streamnames=pushtest1,pushtest2&n=xx&r=xx&k=xxx

録画停止時の戻り値
正しい場合:HTTP-CODE 200,HTTP-BODYは以下の通り:

{

"msg": "success",

"http_code": 200,

'trace_id':"8fe8e186-8435-4f6b-b38e-d30854dfe467",

"call_time": "2017-08-02 11:43:34",

"list": [

​    {

​      "task": "jpg",

​      "http_code": 200,

​      "msg": "success",

​      "persistentId": "21_111222233344567885555544"

​    }]

}

リクエストパラメータエラー:HTTP-CODE 400
許可なし:HTTP-CODE 403 Ø
管理タスクが存在しません:HTTP-CODE 200,HTTP-BODY は次の通り:

{

"msg": "id:stop record param not exists;id2:stop record param not exists;",

"http_code": 1007,

'trace_id':3caed803-63d4-4e2a-8a8e-abc9160e2977",

"call_time": "2017-08-02 11:43:34",

"list": []

}

録画のクエリタスク
GET方法:
URL:http://livect.ossin.cdnetworks.com/v2/api/stream_listen_setting.action?type=record&domain=ws.test.com&appname=test&streamnames=pushtest1,pushtest2&n=xx&r=xx&k=xxx
録画問合せタスクの戻り値
修正:HTTP-CODE 200,HTTP-BODYは以下の通り:

{

"msg": "success",

"http_code": 200,

'trace_id':"bed5431b-2569-488e-a71c-75ab76431a04",

"call_time": "2017-08-02 11:43:34",

"list": [

​    {

​      "function": "record",

​      "domain": "push.cloud-director.8686c.com",

​      "appName": "live",

​      "streamName": "1",

​      "isDeleted": 1,

​      "createTime": 1501582307

​    },

​    {

​      "function": "record",

​      "domain": "push.cloud-director.8686c.com",

​      "appName": "live",

​      "streamName": "2",

​      "isDeleted": 1,

​      "createTime": 1501582307

​    }  ]

}

認証パラメータがありません:HTTP-CODE 403

{

"msg": "apiName, n, r, k not exist or empty",

"http_code": 1002,

'trace_id':"74abec25-5662-4d6c-88a7-db15f7fd7e70",

"call_time": "2017-08-02 11:43:34"

}

許可なし:HTTP-CODE 403

2.2.3 通知

  • CDNetworks 「Selective Live Recording」は「CDNetworks Basic Live Recording」の上級バージョンであり、そのファイル保存やコールバックインタフェース形式は、CDNetworks「Basic Live Recording」と一致するのです。
  • モード1では、2つの方法で録画を停止することができます:1.API呼び出し。2.アンカーはライブストリーミングを終了できます。
  • モード2では、ストリーム名の粒度でデフォルト録画を設定する場合、ドメイン名、アプリ名、ストリーム名を記入する必要があります。例。ストリーム名が記入されている場合(ストリーム名の粒度でデフォルトの録画が設定されることを意味する)、パラメータのアプリ名も必要となります。

2.2.4 リターンコード仕様の付録

コード プロンプト 説明
1001 リクエストパラメータは不完全です パラメータが欠けています
リクエストパラメータチャンネルのエラー ドメイン名エラー
1002 認証失敗 認証できませんでした
サインは正しくありません 署名エラー
apiName, n, r, k が存在しないか、または空です。 パラメータが入力されていません
ランダムは繰り返し 乱数の繰り返し
random.lengthgt 25 or key.length ne 32 乱数長さの誤差
Md5がエラー MD5検証エラー
このAPIにアクセスする権利がありません。 トークン値が見つかりません。インターフェースへのアクセス権がないことを報告します
頻度がlimitCountより大きいです インターフェイスの呼び出し回数が制限回数を上回っています
ユーザとホストは関係がありません 使用名はこのドメインに登録されていません
1003 redisrealTimeテーブルからliveChannelStatusを取得するにエラーが発生しました
PersistentId更新失敗
1004 live_channel_status レコードが存在しません リアルタイムストリームの中に、録画するストリームが存在しません
1005 レコードのパラメータが存在しません 録画パラメータ構成が存在しません
1006 ecord_single_stream_startwcs’sbの結果のpersistentId が空です 録画パラメータの設定が完了していません
persistentIdがnullまたは空です
1007 WCSインターフェースの呼び出しが失敗し、エラー情報はWCSから提供されています
呼び出しWSC失敗 WCSの呼び出しエラー。例:WCSに接続できません。接続タイムアウト、設定WCSアドレスのエラー
1008 ストリームレコードの追加失敗 ストリーム録画設定エラー