VAS_Real-time Screenshot

최신 업데이트:2022-04-14 16:08:55

1. VAS 소개

1.1 개요

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

기본 실시간 캡처
정부는 포르노, 테러리즘 또는 기타 불법 콘텐츠를 금지했습니다. 인터랙티브 스트리밍 업무에서 라이브 콘텐츠가 앵커가 직접 전송하기 때문에 전통적인 인공 식별 방법으로 콘텐츠 불법 여부를 통제하기 어렵습니다.

이런 상황에서 CDNetworks는 고객이 영상 형식의 라이브 스트리밍 미디어 콘텐츠를 얻을 수 있도록 실시간 캡처 서비스를 제공하여 이미지를 통한 영상 모니터링을 실현합니다. 이미지로 포르노를 식별하는 일부 앱과 연동하여 자동 식별을 실현하고 인건비가 크게 절감되며, 고객사 네트워크가 수백 개의 비디오 스트림을 동시에 모니터링할 수 없는 문제를 해결합니다.

이와 동시에 라이브 스트리밍 방식도 점점 다양해지고 있어 라이브 스트리밍 플랫폼은 라이브 캡처 이미지를 스트리밍룸 커버로 만들거나 더 많은 서비스 혁신을 도입해야 합니다. 기본 실시간 캡처는 이러한 요구에는 적용됩니다.

CDNetworks는 수시로 접근할 수 있게 실시간 캡처 이미지를 CDNetworks 클라우드 스토리지(약칭 WCS)에 저장할 수 있도록 지원합니다.

선택 실시간 캡처
CDNetworks 캡처 기능은 선택할 수 있는 실시간 캡처 기능을 제공합니다. 고객이 업무 수요에 따라 특정 스트림에 대한 캡처를 선택할 수 있습니다. 일반적인 라이브 스트리밍 플랫폼은 “키” 앵커의 실시간 캡처만 하여 룸 커버로 사용할 수 있지만 플랫폼 운영 중인 모든 앵커 스트리밍을 진행할 수 없습니다.

두 가지 기능 비교는 다음과 같습니다:

기능 모드 설명 API
기본 실시간 캡처 모드 1 고객이 API를 호출하여 라이브 스트림의 단일 캡처 화면을 가져옵니다.
모드 2 CDNetworks는 캡처 규칙을 고객과 협의한 후 고객을 위한 캡처 기능을 활성화합니다. 캡처 화면은 캡처하는 도메인/애플리케이션 이름/스트림 이름에 따라 자동으로 생성됩니다. 아니오
선택 실시간 화면 캡 모드 1 고객이 API를 호출하여 라이브 스트리밍의 캡처를 시작하거나 중지합니다.
모드 2 고객이 API를 호출하여 아직 시작되지 않은 라이브 스트리밍에 대한 캡처를 활성화하거나 비활성화합니다.

1.2 해당 제품 라인

미디어 가속 라이브 방송

1.3 애플리케이션 시나리오

  1. 캡처를 사용하여 라이브 스트리밍 포르노 식별 또는 기타 식별 업무를 수행합니다.
  2. 캡처 화면은 라이브 스트리밍 룸의 커버로 사용합니다.

2. 기능 상세 정보

2.1 기본 실시간 캡처

2.1.1 기능 설명

현재, CDNetworks 기본 실시간 캡처는 두 가지 모드를 지원합니다.

2.1.1.1 모드 1

CDNetworks는 실시간 캡처 기능을 제공합니다. 고객이 이미지 요청을 발송하면 요청 URL은 캡처 기능을 트리거하고 CDNetworks는 라이브 스트리밍의 캡처 이미지로 고객에게 응답합니다. 즉 CDNetworks는 고객 요청에 의해 캡처를 제공하지만 캡처 이미지는 저장하지 않습니다.
고객 요청 형식: “http://www.test.com/live/livestream.jpg”
형식 예시:
“www.test.com” is the domain of the new image;
“livestream.jpg” is the live streaming name.
Recommended request frequency: once per 30 seconds.

2.1.1.2 모드 2

포르노 식별의 인건비 절감하고 식별의 효율성을 향상시키며, 포르노 식별 앱을 더 잘 지원하기 위해 CDNetworks는 라이브 스트리밍의 타임 캡처 기능을 제공합니다. 앵커가 라이브 스트림 푸시를 실행하면 CDNetworks WCS 플랫폼은 고객과 협의한 빈도에 따라 스트림의 캡처를 하고 이미지를 WCS 플랫폼에 저장합니다. 고객에게 캡처 이미지를 알리기 위해 API가 호출됩니다.

모드 2는 현재 라이브 스트리밍 플랫폼에서 일반적으로 사용되는 모드입니다.

모드 2의 콜백 설명
콜백
액티브 실시간 캡처는 고객 API를 콜백하여 캡처 이미지 정보를 고객에게 알려줍니다. 빈번한 알림으로 인한 자원 소모를 방지하기 위해 여러 콜백 알림을 통합할 수 있습니다.

콜백 빈도는 너무 잦으면 안 되고 권장 콜백 주파수는 60S 또는 100개 이미지마다 한번입니다.

캡처 콜백 시작 및 중지
캡처 알림 시작 중:
알림 주소 예시: http://abc.com?message_type=ws_record¬_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=ws_record_finish
참고: 주소가 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"

​      ]

​    },

​    {

​      "persistentId": "< persistentId >",

​      "streamname": "<streamname>",

​      "ops": "<ops>",

​      "bucket": "<bucket>",

​      "code": "<code>",

​      "desc": "<desc>",

​      "error": "<error>",

​      "keys": [

​        "key1",

​        "key2",

​        "key3"

​      ],

​      "urls": [

​        "url1",

​        "url2"

​      ]

​    }

  ],

  "batch_notify_id": "<batchnotifyid>"

}

필드 이름 필수 필드 설명
persistentId 캡처 작업의 유일한 식별자입니다
streamname 라이브 스트림 이름이고 형식은 “애플리케이션 이름”-”스트림 이름”입니다.
ops 캡처 매개 변수이고 수출 형식 및 주파수 등 정보를 포함합니다.
bucket 캡처 저장 공간의 이름입니다.
code 캡처 작업의 상태 코드입니다. 값 1, 2, 3은 처리 중, 처리 실패 및 처리 성공을 표시합니다.
desc 작업 상태 코드에 대한 설명입니다. 값은 fileOperateActive, fileOperateFail 및 fileOperateSucceed로 처리 중, 처리 실패 및 처리 성공을 표시합니다.
error 아니오 오류 설명입니다
keys 아니오 수출 파일 이름 목록입니다. 캡처가 실패하면 이 필드는 null이 됩니다.
urls 아니오 수출 파일의 접근 주소 목록입니다. 로그가 실패하면 이 필드는 null이 됩니다.
batch_notify_id 아니오 병합을 알리는 관련 ID입니다. 여러 캡처 작업에 대한 결과 알림을 병합이 구성된 경우 이 필드는 null입니다.

모드 #2 지원 설정:

  1. 수출 이미지 형식, 예를 들어 jpg, png, 등.
  2. 이미지 높이와 너비 (px단위).
  3. 이미지 회전 (기본적으로 회전 없음); 90, 180 또는 270도 회전으로 설정할 수 있습니다.
  4. 캡처 주파수는 설정할 수 있고 권장 주파수는 30초마다 한번입니다.

2.1.2 지침

모드 # 1
고객이 이 기능을 사용하려면 다음 정보를 제공해야 합니다:

  1. 캡처의 신규 도메인.
  2. 캡처 이미지 접근을 위한 신규 도메인.
  3. CDNetworks와 협의한 캡처 주파수

모드 # 2
고객이 이 기능을 사용하려면 다음 정보를 제공해야 합니다:

  1. 캡처 이미지 형식은 jpg 및 png 형식을 지원합니다.
  2. 캡처의 콜백 주소와 병합 알림의 콜백 주파수(CDNetworks는 콜백 주파수가 정상적인 서비스에 영향을 미치지 않도록 보장합니다.)
  3. CDNetworks의 WCS 저장 서비스를 활성화하하고 라이브 스트리밍 플랫폼에 저장소 공간 이름을 제공합니다.
  4. CDNetworks와 협의한 실시간 캡처 주파수입니다.

2.2 선택 실시간 캡처

2.2.1 기능 설명

CDNetworks의 선택 실시간 캡처 기능은 API 호출을 통해 구현되고 다음과 같은 두 가지 모드가 있습니다.

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

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

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

  1. n: 기본적으로 포털 계정 이름으로 설정됩니다
  2. r: i유일한 임의 문자열; 최대 10개 문자부호; 권장 사용 타임스탬프.
  3. k: md5 검증 값.
    MD5 계산법은 다음과 같습니다:
    k = md5(r+key), r 플러스 키와 같은 새로운 문자열이 MD5에 의해 해시되어 새로운 값k로 전환됩니다. 참고: “key”는 담당 엔지니어로부터 받을 수 있습니다.

예시:

  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.actiontype=frame&domain=ws.test.com&appname=test&streamnames=push_test1,push_test2&n=xxx&r=xxx&k=xxx

매개 변수 설명

필드 이름 필드 유형 필드 의미 필수 필드 기본값 예시
_method 문자열 작업 종류 아니오 No default value Please refer to the call stopping example, and its request method is POST.
type 문자열 제어 유형 type=frame, which means screenshot.
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, // Operation status

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

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

  "list": [ // Task details

​    {

​      "task": "jpg", // File format

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

​      "http_code": 200, // Processing succeeded

​      "msg": null, // Prompt

​      "persistentId": "21_111222233344567885555544" // File ID

​    }]

}

인증 매개 변수 누락: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": "jpg",

​      "id": "id",

​      "http_code": 200,

​      "msg": null,

​      "persistentId": "21_111222233344567885555544"

​    },

​    {

​      "task": "jpg",

​      "id": "id",

​      "http_code": 1007, // Prompt of unsuccessful operation

​      "msg": "call wcs failure", // Prompt of operation failure 

​      "persistentId": null

​    }]

}

캡처 중지

POST 방법:

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

DELETE 방법:

 URL:http://livect.ossin.cdnetworks.com/v2/api/stream_listen_call.action?type=frame&domain=ws.test.com&appname=test&streamnames=push_test1,push_test2&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=frame&domain=ws.test.com&appname=test&streamnames=push_test1,push_test2&n=xx&r=xx&k=xxx

매개 변수 설명

필드 이름 필드 유형 필드 의미 필수 필드 기본값 예시
_method 문자열 작업 종류 아니오 No default value Please refer to the call stopping example, and its request method is POST.
type 문자열 제어 유형 type=frame, which means screenshot.
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=frame&domain=ws.test.com&appname=test&streamnames=push_test1,push_test2&n=xx&r=xx&k=xxx&_method=DELETE

DELETE 방법:

 URL:http://livect.ossin.cdnetworks.com/v2/api/stream_listen_setting.action?type=frame&domain=ws.test.com&appname=test&streamnames=push_test1,push_test2&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=frame&domain=ws.test.com&appname=test&streamnames=push_test1,push_test2&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 인증이 실패합니다 인증이 실패하였습니다
부호가 맞지 않습니다 서명가 오류입니다
apiName, 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 스트림 레코드 추가가 실패합니다 스트림 기록 설정이 오류입니다
이 문서의 내용이 도움이 되었습니까?
아니오
정상적으로 제출되었습니다.피드백을 주셔서 감사합니다.앞으로도 개선을 위해 노력하겠습니다.