VAS_Live Recording

최신 업데이트:2023-06-25 17:32:47

1 VAS 소개

1.1 개요

라이브 스트리밍 산업의 발전에 따라 라이브 스트리밍을 통한 콘텐츠가 널리 채용되고 이에 따라 더 많아지고 있는 경쟁자와 사회 문제를 생겼습니다. 이러한 변화와 수요에 대응하기 위해 CDNetworks는 라이브 녹음 기능을 출시합니다.

기본 라이브 기록
라이브 스트리밍의 VoD 리뷰는 라이브 스트리밍 플랫폼에 필수 기능이 되었습니다. 또한 전세계 라이브 스트리밍 산업의 급속 발전에 대응하기 위해 많은 국가에서 플랫폼 감독 규제를 발표하였습니다. 후속의 검사에 대비하도록 많은 국가에서 라이브 스트리밍 콘텐츠를 로컬 저장을 요구하고 있습니다.

자체 제작 소스 라이브에 비해 CDN 라이브는 비용 면에서 압도적인 우위를 가지고 있습니다. CDNetworks 라이브 녹음 제품은 CDNetworks 라이브 스트리밍과 CDNetworks 클라우드 스토리지(약칭: WCS)의 결합으로 녹화와 저장의 원스톱 솔루션입니다.

선택 라이브 기록
CDNetworks는 CDN 협조를 받아 라이브 도메인에 사전 설정된 기본 라이브 기록 기능 외에도 고객 업무 요구에 따라 스트림 일부를 선택 녹화할 수 있는”선택 라이브 기록” 기능을 개발하였습니다.

이 기능은 주로 다음과 같이 적용됩니다:

  • 인기 라이브 콘텐츠를 위한 서비스를 제공합니다. 오리지널 콘텐츠의 클릭율을 유지하기 위해 라이브 스트리밍 플랫폼이 이를 재생하거나 라이브 스트리밍 종료 후 재방송이나 VoD 서비스를 제공해야 합니다.
  • 전체 플랫폼에서 재방송 및 VoD를 필요하지 않습니다. 기본 라이브는 특정 라이브 콘텐츠, 시작 시간, 종료 시간을 정확하게 선택할 수 없기 때문에 선택 라이브 콘텐츠를 필요하는 고객에게 선택 가능한 라이브 녹화 기능이 좋은 선택입니다.
기능 모드 설명 API
기본 라이브 기록 CDNetworks가 기록 규칙에 대해 고객과 협의한 후 고객을 위한 구성을 설정할 것입니다. 구성된 도메인/애플리케이션 이름/스트림 이름에 대한 기록이 자동으로 수행됩니다. 아니오
선택 라이브 기록 모드 1 고객이 API를 호출하여 라이브 스트리밍 녹화를 시작하거나 중지합니다.
모드 2 고객이 API를 호출하여 아직 시작되지 않은 라이브 스트리밍에 대한 라이브 녹화 설정을 활성화하거나 비활성화합니다.

1.2 해당 제품 라인

  • 미디어 가속 라이브 방송.

1.3 애플리케이션 시나리오

  1. 인터넷 라이브 스트리밍 서비스 관리 규정에 따라 후속 검사를 위해 라이브 플랫폼에서 방송하는 콘텐츠를 기록합니다.
  2. 2차 홍보 및 풍부한 플랫폼의 VoD 프로그림을 위해 인기 콘텐츠를 보유합니다.
  3. 중요한 스포츠 경기와 인기 있는 라이브 스트리밍을 통해 인기를 유지합니다.

2. 기능 상세 정보

2.1 기본 라이브 기록

2.1.1 기능 설명

라이브 녹화 파일이 생성된 후는 WCS에 업로드하고 녹화+저장+트랜스코딩의 원스톱 서비스를 구현합니다. 라이브 스트리밍을 VoD로 전환하는 시간은 초를 단위의 입자도로 조절할 수 있습니다.

녹화 방안은 다음과 같습니다.

  1. 녹화 형식: flv, mp4 및 ts를 지원합니다.
  2. 파일명 형식: 스트림 이름+시간 스탬프입니다.
  3. 시간 길이에 따라 녹화를 지원합니다. 예를 들어 5분마다 한 번씩 녹화합니다.
  4. 트랜스코딩,트랜스퍼싱 및 워터마킹과 같은 오디오/비디오 처리를 지원합니다.
  5. 클라이언트 인터페이스의 설정 가능한 오디오 콜백을 지원합니다.
  6. 콜백 알림이 실패할 경우 재시도를 지원합니다.

2.1.2 콜백 함수 설명

녹화 콜백의 시작 및 중지

녹화가 시작되고 끝날 때 CDNetworks는 클라이언트 인터페이스 콜백을 통해 고객에게 알립니다. 콜백은 시기적절하고 효율적이며 인도는 2급입니다. 또한 빈번한 알림으로 인한 자원 낭비를 방지하기 위해 빈도와 횟수에 따라 알림을 병합할 수 있습니다.
녹음 알림 시작 중:
알림 주소의 예시: 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 기록 작업의 유일한 식별자입니다
streamname 라이브 스트림 이름이고 형식은 “애플리케이션 이름”-”스트림 이름”입니다.
ops 기록 매개 변수이고 수출 형식 및 비트레이트 등 정보를 포함합니다.
bucket 기록 저장 공간의 이름입니다.
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 기록 작업의 유일한 식별자입니다
streamname 라이브 스트림 이름이고 형식은 “애플리케이션 이름”-”스트림 이름”입니다.
ops 기록 매개 변수이고 수출 형식 및 비트레이트 등 정보를 포함합니다.
bucket 기록 저장 공간의 이름입니다.
code 기록 작업의 상태 코드입니다. 값 1, 2, 3은 처리 중, 처리 실패 및 처리 성공을 표시합니다.
desc 작업 상태 코드에 대한 설명입니다. 값은 fileOperateActive, fileOperateFail 및 fileOperateSucceed로 처리 중, 처리 실패 및 처리 성공을 표시합니다.
error 아니오 오류 설명입니다
keys 아니오 수출 파일 이름 목록입니다. 로그가 실패하면 이 필드는 null이 됩니다.
urls 아니오 수출 파일의 접근 주소 목록입니다. 로그가 실패하면 이 필드는 null이 됩니다.
details 아니오 수출 파일의 세부 정보입니다. 로그가 실패하면 이 필드는 null이 됩니다.
key 아니오 수출 파일 이름입니다. 로그가 실패하면 이 필드는 null이 됩니다.
url 아니오 수출 파일의 접근 주소입니다. 로그가 실패하면 이 필드는 null이 됩니다.
duration 아니오 수출 비디오 파일의 기간입니다. 로그가 실패하면 이 필드는 null이 됩니다.
hash 아니오 수출 비디오 파일의 해시 값입니다. 로그가 실패하면 이 필드는 null이 됩니다.
fsize 아니오 수출 비디오 파일의 크기입니다. 단위는 B(바이트)입니다. 로그가 실패하면 이 필드는 null이 됩니다.
startTime 아니오 녹화 시작 시간입니다
endTime 아니오 녹화 종료 시간입니다
bit_rate 아니오 수출 파일의 비디오 비트레이트입니다
resolution 아니오 수출 파일의 비디오 해상도입니다
batch_notify_id 아니오 병합을 알리는 관련 ID입니다. 여러 기록 작업에 대한 결과 알림을 병합이 구성된 경우 이 필드는 null입니다.

2.1.3 지침

고객이 기본 라이브 녹화를 활성화하려면 CDNetworks에 다음 정보를 제공해야 합니다:

  1. 기록 블록의 시간 길이;
  2. 기록 파일의 명명 규칙;
  3. 기록 파일 형식;
  4. 코딩 전환이 필요할 때 오디오/비디오 비트레이트에 대한 상세 정보. 다중 비트레이트 비디오 전환은 각 스트림의 비트레이트 정보를 제공해야 합니다.
  5. 콜백 주소. CDNetworks는 콜백 콘텐츠 형식과 콜백 실패의 처리 메커니즘에 대해 고객과 협상할 것입니다.

2.2 선택 라이브 기록

2.2.1 기능 설명

CDNetworks 선택 라이브 녹화는 API 호출을 통해 구현되고 다음과 같은 두 가지 모드가 있습니다.

모드 1: 하나 또는 이상의 스트림이 시작될 때 API를 호출하여 라이브 스트리밍을 기록합니다. API 호출 시 기록이 시작되고 호출이 끝나면 기록이 종료됩니다. 설정은 이번 라이브 스트리밍에만 적용됩니다.

모드 2: 도메인, 애플리케이션 및 스트림의 입도 호출을 지원합니다. 라이브 스트리밍이 시작되지 않은 경우 API를 호출하여 기본 기록을 활성화합니다. 이 기능을 사용하면 라이브 스트리밍이 시작될 때 녹화가 시작되고 끝날 때 녹화가 종료됩니다. 기본 설정이 활성화되면 모든 라이브 스트리밍이 기록됩니다.

API는 접근 권한 제어를 가지고 있고 계정이 CDNetworks 서비스를 활성화하고 특정 규칙으로 매개 변수를 입력할 때만 올바르게 호출됩니다. 접근 제어는 n, r, k 세 개의 매개 변수로 정의되며 상세한 설명은 다음과 같습니다:

  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
실시간 녹화 시작: 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 문자열 작업 종류 아니오 No default value Please refer to calling example, request method 1: POST
type 문자열 제어 유형 record record= record
domain 문자열 도메인 이름 ws.test.com
appname 문자열 애플리케이션 이름 test
stream names 문자열 스트림 이름 Support multiple streams, and the stream names are separated by “,”, for example: push_test1,push_test2
n 문자열 사용자
r 문자열 난수 Current timestamp
k 문자열 검증값 Md5(r+token)

시작 작업의 반환 값
정답 :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

​    }]

}

인증 매개 변수 누락: 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": "stream record part of failure",

"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, // prompt for non-success

​      "msg": "call wcs failure", // prompt for 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

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.ossin.cdnetworks.com/v2/api/stream_listen_setting.action(아시아 지역 사용);
http://livect.osame.cdnetworks.com /v2/api/stream_listen_setting.action(유럽과 미국 지역 사용);
다음 예시와 같이 사용합니다. 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 문자열 작업 종류 아니오 No default value Please refer to the example of call stopping, request method 1: POST
type 문자열 제어 유형 record Type=record, indicates recording
domain 문자열 도메인 이름 ws.test.com
appname 문자열 애플리케이션 이름 아니오 test
stream names 문자열 스트림 이름 아니오 Support multiple streams, and the stream names are separated by “,”, for example: push_test1,push_test2
n 문자열 사용자
r 문자열 난수 Current timestamp
k 문자열 검증값 Md5(r+token)

기록 시작 반환 값
정답: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 방법:
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 "선택 라이브 기록"은 "CDNetworks 기본 라이브 기록"을 기반으로 개발되었고 "CDNetworks 기본 라이브 기록"의 확장 기능입니다. 파일 저장 및 콜백 인터페이스 형식은 CDNetworks "기본 라이브 기록"과 일치해야 합니다.
  • 모드 1일 경우 첫째 API 호출, 둘째 앵커 라이브 스트리밍 종료 두 가지 방법으로 기록을 중지할 수 있습니다.
  • 모드 2일 경우 기본 기록을 스트림 이름의 입도로 설정할 때 도메인, 앱 이름, 스트림 이름은 비워 둘 수 없습니다. 예를 들어 스트림 이름이 비어 있지 않으면(기본 기록이 스트림 이름의 입도로 설정됨을 의미함) 매개 변수 appname도 필요합니다.

2.2.4 반환 코드 사양 부록

코드 프롬프트 설명
1001 요청 매개 변수가 불완전합니다 매개 변수가 없습니다
요청 매개 변수 채널이 오류입니다 도메인이 오류입니다
1002 인증이 실패합니다 인증이 실패하였습니다
부호가 맞지 않습니다 서명가 오류입니다
api이름, n, r, k가 없거나 비어 있습니다 매개 변수는 비워 둘 수 없습니다
랜덤은 반복입니다. 난수가 중복됩니다
랜덤.길이 25 또는 키.길이 ne 32 난수 길이가 오류입니다
Md5는 오류입니다. MD5 검증이 오류입니다
이 api에 접근할 권한이 없습니다. 토큰 값을 찾을 수 없고 인터페이스에 접근할 권한이 없다고 보고합니다.
주파수가 제한수보다 큽니다 인터페이스 호출 주파수가 제한 횟수보다 큽니다
사용자와 호스트는 관계가 없습니다 사용명이 이 도메인에 바인딩되지 않았습니다
1003 redisrealTime 테이블에서 라이브 채널 상태 오류를 가져옵니다
persistentId 업데이트 실패
1004 live_channel_status기록이 없습니다 기록한 스트림이 실시간 스트림에 없습니다
1005 record_parameter_confis 기록이 없습니다 기록 매개 변수 설정이 없습니다
1006 record_single_stream_startwcs result persistentId가 비어 있습니다 기록 매개 변수 설정이 완료되지 않았습니다
persistentId가 null이거나 비어 있습니다
1007 WCS 인터페이스 호출 실패 및 오류 정보는 WCS에서 제공합니다
wsc 호출이 실패합니다 WCS 호출 오류입니다. 예를 들어 WCS에 연결할 수 없거나 연결 시간 초과 또는 구성된 WCS 주소 오류입니다
1008 스트림 레코드 추가가 실패합니다 스트림 기록 설정이 오류입니다
이 문서의 내용이 도움이 되었습니까?
아니오
정상적으로 제출되었습니다.피드백을 주셔서 감사합니다.앞으로도 개선을 위해 노력하겠습니다.