채널 생성
- 인쇄
- PDF
채널 생성
- 인쇄
- PDF
기사 요약
이 요약이 도움이 되었나요?
의견을 보내 주셔서 감사합니다.
VOD Station은 채널을 생성하기 위한 API를 제공하며, 생성한 채널 조회를 위해 채널 목록 조회 API와 채널 정보 조회 API를 제공합니다.
참고
VOD Station 과 연동된 Global Edge의 콘텐츠 인증(Signed URL/JWT) 제어 사용 시 유의 사항은 다음과 같습니다.
- Global Edge 의 캐시 설정 중 Edge Auth 을 아래와 같이 설정해야 합니다. Global Edge Edge Auth 설정 변경 방법은 API 가이드를 참조해 주십시오.
- 인증 제외 확장자
- .ts, .mp4, .m4s, .vtt, .key
- 인증 토큰을 원본에 전달할 확장자
- .m3u8, .mpd
- 인증 제외 확장자
- 인증 토큰 발급 시 Signed URL, JWT 각각 acl, path에 wildcard path를 입력해야 합니다. 자세한 인증 토큰 발급 방식은 사용 가이드를 참조해 주십시오.
- 단일 비트레이트 재생 : '/[protocol]/[encryptedBucketName]/[path]/[video filename]/*'
- 예시)
- HLS : https://example.edge.navercorp.com/hls/guide/vod-5100k.mp4/index.m3u8
- wildcard path : '/hls/guide/vod-5100k.mp4/*'
- DASH : https://example.edge.navercorp.com/dash/guide/vod-5100k.mp4/index.m3u8
- wildcard path : '/dash/guide/vod-5100k.mp4/*'
- HLS : https://example.edge.navercorp.com/hls/guide/vod-5100k.mp4/index.m3u8
- 예시)
- Adaptive 비트레이트 재생 : '/[protocol]/[encryptedBucketName]/[path]/[prefix],[video filenames],[suffix].smil/*'
- 예시)
- HLS 재생 주소 : https://example.edge.navercorp.com/hls/guide/abr/vod-,5400,2400,1200,0900,0600,0300,k.mp4.smil/master.m3u8
- wildcard path : '/hls/guide/abr/vod-,5400,2400,1200,0900,0600,0300,k.mp4.smil/*'
- DASH 재생 주소 : https://example.edge.navercorp.com/dash/guide/abr/vod-,5400,2400,1200,0900,0600,0300,k.mp4.smil/manifest.mpd
- wildcard path : '/dash/guide/abr/vod-,5400,2400,1200,0900,0600,0300,k.mp4.smil/*'
- HLS 재생 주소 : https://example.edge.navercorp.com/hls/guide/abr/vod-,5400,2400,1200,0900,0600,0300,k.mp4.smil/master.m3u8
- 예시)
- 단일 비트레이트 재생 : '/[protocol]/[encryptedBucketName]/[path]/[video filename]/*'
요청
POST https://vodstation.apigw.ntruss.com/api/v2/channels
요청 헤더
헤더명 | 설명 |
---|---|
x-ncp-region_code | 네이버 클라우드 플랫폼 region code x-ncp_region_code:{Region Code} |
x-ncp-apigw-timestamp | 1970년 1월 1일 00:00:00 협정 세계시(UTC)부터의 경과 시간을 밀리초(Millisecond)로 나타내며 API Gateway 서버와 시간 차가 5분 이상 나는 경우 유효하지 않은 요청으로 간주x-ncp-apigw-timestamp:{Timestamp} |
x-ncp-iam-access-key | 네이버 클라우드 플랫폼 포털에서 발급받은 Access Key ID 값x-ncp-iam-access-key:{Sub Account Access Key} |
x-ncp-apigw-signature-v2 | Access Key ID 값과 Secret Key로 암호화한 서명x-ncp-apigw-signature-v2:{API Gateway Signature} |
Content-Type | Request body content type을 application/json으로 지정Content-Type: application/json |
요청 바디
API 요청 시 필드명의 대소문자 구분이 필요합니다.
필드명 | 필수 여부 | 타입 | 제약 사항 | 기본값 | 설명 |
---|---|---|---|---|---|
name | Yes | String | 생성할 채널의 이름 | ||
storageBucketName | Yes | String | 채널과 연동할 네이버 클라우드 플랫폼 Object Storage 버킷 이름 | ||
accessPrivateFiles | No | Boolean | 연동할 Object Stroage 버킷 내 비공개 파일에 대해 VOD Station에서 접근 제한을 설정함 허용한다면 파일을 공개 처리하지 않아도 Streaming이 가능 | ||
protocolList[] | Yes | Array(String) | HLS, DASH | 채널의 스트리밍 프로토콜 HLS와 DASH를 지원하며, 중복 선택 가능 | |
encryptionList[] | No | Array | 채널의 미디어 보호 설정 Media Encryption 기능과 DRM(FairPlay, Widevine/PlayReady) 연동 인터페이스 제공 | ||
encryptionList[].drmContentId | Optional | String | 숫자, 영문 1-200자 Media Encryption 설정시 필요치 않음 | DRM Content ID DRM Key 요청시 해당 값을 포함해 요청하며, License 발급시 필요한 값 | |
encryptionList[].drmKeyUrl | Optional | String | http(s):// 포함 URL Media Encryption 설정시 필요치 않음 | DRM 제공사의 CPIX API URL VOD Station은 공식적으로 Inka Pallyacon DRM의 CPIX v1 API와의 연동 지원 DRM 패키징을 위해 VOD Station은 xml body를 포함해 POST 요청 | |
encryptionList[].systemIdList | Optional | Array(String) | 공백 허용 안함, "-"허용, 256자 이하 Media Encryption 설정시 필요치 않음 | DRM Type 별 SystemID 설정하려는 Type에 맞는 값 입력 필요 | |
encryptionList[].drmTypeCode | Optional | Integer | FairPlay: 21 Widevine/PlayReady: 22 Media Encryption 설정시 필요치 않음 | DRM Type 설정 필요 | |
encryptionList[].mediaEncryptionTypeCode | Optional | Integer | AES-128: 1 DRM 설정시 필요치 않음 | HLS AES-128을 설정함 FairPlay와 함께 설정할 수 없음 | |
encryptionList[].protocol | Yes | String | HLS, DASH | DRM 혹은 Media Encryption에 맞는 protocol을 설정함 Widevine/PlayReady: DASH FairPlay: HLS MediaEncryption: HLS | |
segmentDuration | Yes | Integer | 5-20 사이 정수 | Segment당 재생 시간 재생 시간이 길어질수록 Segment의 크기가 커지며, Client 네트워크 상태에 따라 로딩 시간이 길어질 수 있음 반면에, Segment 시간이 짧아질수록 Segment의 크기는 작아지며, 지나치게 짧게 설정 시 Client 네트워크 상태에 따라 버퍼링 발생 가능 (단위: 초) | |
segmentDurationOption | No | String | BASIC, VARIABLE | BASIC | 모든 Segment가 keyframe으로 시작하도록 Segment를 생성함 VARIABLE 옵션 선택시 설정한 segmentDuration 값과 실제 생성된 Segment의 Duration같은 차이가 발생할 수 있으며, Segment Duration이 일정하지 않을 수 있음 |
createCdn | Yes | Boolean | true, false | VOD Station은 CDN 연동이 필수 채널 생성 시 함께 생성하거나 별도로 생성해 사용 가능 | |
cdn | Optional | Object | Global Edge 를 자동 생성 할 경우 필수로 요청 합니다. | ||
cdn.profileId | Optional | Integer | 신규 생성할 Global Edge 프로필 아이디 | Global Edge 를 생성할 프로필 아이디 | |
cdn.regionType | Optional | String | Global Edge 를 연동 할 경우 활용합니다. | KOREA, JAPAN, GLOBAL | Global Edge 서비스 지역 |
cdn.type | Optional | String | Global Edge 를 연동 할 경우 활용합니다. | GLOBAL_EDGE | Global Edge 신규 생성을 위한 타입 |
drm | No | Object | One Click Multi DRM 선택 시 입력 필수 | ||
drm.siteId | No | String | One Click Multi DRM 선택 시 입력 필수 | ||
drm.contentId | No | String | One Click Multi DRM 선택 시 입력 필수 | contentId 는 재생하려는 콘텐츠의 고유 ID로, DRM 패키징 시 활용됨. 최소 3글자 이상 영문/숫자 또는 ‘-'(하이픈), ‘_'(언더바) 포함 최대 100자 문자까지 입력 가능 |
응답
필드명 | 타입 | 설명 | 비고 |
---|---|---|---|
content | Object | VOD Station OPEN API 응답 객체 | |
content.id | String | 생성된 채널의 ID | |
content.name | Object | 채널 이름 | |
content.channelStatus | Integer | 채널의 현재 상태 | CREATING, READY, STOPPING, STOPPED, TERMINATING, TERMINATED, FORCE_STOPPING, FORCE_STOPPED, FORCETERMINATING, FORCETERMINATED |
content.storageBucketName | String | 채널에 연동된 Object Storage 버킷 이름 | |
content.encryptedBucketName | String | 채널에 연동된 Object Storage 버킷의 암호화된 이름으로 재생 URL 생성시 사용 | |
content.accessPrivateFiles | Boolean | 버킷 내 비공개 파일에 대한 VOD Station에서의 접근 제한 설정 | |
content.segmentDuration | Integer | 채널의 segment 재생 길이 (단위 : 초) | |
content.segmentDurationOption | String | 채널의 segment keyframe 정렬 옵션 | |
content.protocolList[] | Array(String) | 채널의 스트리밍 프로토콜 목록 | |
content.createTime | Integer | 채널의 생성 시작 시간 | |
content.readyTime | Integer | 채널의 생성 완료 시간 | |
content.cdnCreatedTime | Integer | 채널에 연동하여 자동 생성된 CDN의 생성 시간 | |
content.playUrl | String | CDN을 통한 재생 URL Template | |
content.cdnStatus | String | 채널에 연동된 CDN의 상태 자동 생성하지 않으면 NOT_FOUND 로 노출 | |
content.cdnDomain | String | 자동 생성된 Global Edge 도메인 | |
content.cdnServiceName | String | 자동 생성된 Global Edge 서비스명 | |
content.cdn | Object | 자동 생성된 Global Edge 정보 | |
content.cdn.cdnType | String | 자동 생성된 CDN 타입 | |
content.cdn.cdnDomain | String | 자동 생성된 Global Edge의 도메인 | |
content.cdn.cdnServiceName | String | 자동 생성된 Global Edge의 서비스명 | |
content.cdn.profileId | String | 자동 생성된 Global Edge의 프로필 아이디 | |
content.cdn.regionType | String | 자동 생성된 Global Edge의 서비스 지역 | |
content.cdn.cdnInstanceNo | Integer | 자동 생성된 Global Edge의 인스턴스 정보 | |
content.storageBucketStatus | String | 채널에 연동된 Object Storage 버킷의 상태 | |
content.originPath | String | 생성한 채널의 원본 경로로 별도 CDN 생성 시 참고 | |
content.encryptionList[] | Array | 채널의 미디어 보안 설정 | |
content.encryptionList[].protocol | String | 미디어 보안 대상 프로토콜 | |
content.encryptionList[].mediaEncryptionTypeCode | Integer | 미디어 보안 설정의 암호화 타입 1: AES-128 2: Sample-AES 3: CENC | |
content.encryptionList[].drmTypeCode | Intenger | 미디어 보안 설정의 DRM 타입 21: FairPlay 22: Widevine/PlayReady | |
content.encryptionList[].drmTypeName | String | 미디어 보안 설정의 DRM 타입 명 | |
content.encryptionList[].drmContentId | String | VOD Station에서 패키징시 요청할 Content ID | |
content.encryptionList[].systemIdList | Array(String) | VOD Station에서 패키징시 요청할 DRM System ID | |
content.encryptionList[].drmKeyUrl | String | VOD Station에서 패키징시 요청할 DRM CPIX API URL | |
content.drm | Object | VOD Station 을 활용한 DRM Encryption 설정 | |
content.drm.siteId | String | One Click Multi DRM 상품을 통해 생성한 site id | |
content.drm.contentId | String | DRM Encryption 을 적용할 콘텐츠의 고유 ID DRM 패키징을 위해 사용되며 최소 3글자 이상 영문/숫자 또는 ‘-'(하이픈), ‘_'(언더바) 포함 최대 100자 문자까지 입력 가능합니다. | |
error | Object | 오류 응답 코드 및 메시지 | |
error.errorCode | String | 오류 응답 코드 | |
error.message | String | 오류 응답 메시지 | |
error.details | String | error message의 상세한 설명 api gateway 오류 발생 시 응답 |
예시
요청 예시
POST https://vodstation.apigw.ntruss.com/api/v2/channels
POST /api/v2/channels
HOST: vodstation.apigw.ntruss.com
Content-Type: application/json
x-ncp-region_code:KR
x-ncp-apigw-timestamp:1521787414578
x-ncp-iam-access-key:6uxz1nKkcYwUjWRG5Q1V7NsW0i5jErlu2NjBXXgy
x-ncp-apigw-signature-v2:iJFK773KH0WwQ79PasqJ+ZGixtpDQ/abS57WGQdld2M=
Request body (Global Edge)
{
"accessPrivateFiles": false,
"cdn": {
"profileId": 681,
"regionType": "KOREA",
"type": "GLOBAL_EDGE"
},
"createCdn": true,
"name": "ey-api-gedge-0628",
"protocolList": [
"HLS","DASH"
],
"segmentDuration": 5,
"segmentDurationOption": "BASIC",
"storageBucketName": "eytestbucket"
}
Reqeust body (non DRM)
{
"cdn": {
"profileId": 681,
"regionType": "KOREA",
"type": "GLOBAL_EDGE"
},
"createCdn": true,
"name": "api-guide",
"protocolList": [
"HLS", "DASH"
],
"segmentDuration": 5,
"storageBucketName": "vodstation-bucket"
}
Request body (One Click Multi DRM using MediaEncryption and Widevine/PlayReady)
{
"createCdn": true,
"name": "api-guide-drm",
"protocolList": [
"HLS", "DASH"
],
"segmentDuration": 5,
"segmentDurationOption": "BASIC",
"accessPrivateFiles": true,
"storageBucketName": "vodstaton-test",
"drm" : {
"siteId" : "ABCD",
"contentId" : "abc-2344-dfd"
}
}
Request body (DRM using MediaEncryption and Widevine/PlayReady)
{
"cdn": {
"profileId": 681,
"regionType": "KOREA",
"type": "GLOBAL_EDGE"
},
"createCdn": true,
"encryptionList": [
{
"drmContentId": "openapi",
"drmKeyUrl": "https://kms.example.com/cpix/token",
"systemIdList": [
"9A04F079-9840-4286-AB92-E65BE0885F95",
"EDEF8BA9-79D6-4ACE-A3C8-27DCD51D21ED"
],
"drmTypeCode": 22,
"protocol": "DASH"
},
{
"mediaEncryptTypeCode": 1,
"protocol":"HLS"
}
],
"name": "api-guide-drm",
"protocolList": [
"HLS", "DASH"
],
"segmentDuration": 5,
"segmentDurationOption": "BASIC",
"accessPrivateFiles": true,
"storageBucketName": "vodstaton-test"
}
Request body (DRM using FairPlay and Widevine/PlayReady)
{
"cdn": {
"profileId": 681,
"regionType": "KOREA",
"type": "GLOBAL_EDGE"
},
"createCdn": true,
"encryptionList": [
{
"drmContentId": "openapi",
"drmKeyUrl": "https://kms.example.com/cpix/token",
"systemIdList": [
"9A04F079-9840-4286-AB92-E65BE0885F95",
"EDEF8BA9-79D6-4ACE-A3C8-27DCD51D21ED"
],
"drmTypeCode": 22,
"protocol": "DASH"
},
{
"drmContentId": "openapi",
"drmKeyUrl": "https://kms.example.com/cpix/token",
"systemIdList": [
"94CE86FB-07FF-4F43-ADB8-93D2FA968CA2"
],
"drmTypeCode": 21,
"protocol": "HLS"
},
],
"name": "api-guide-drm",
"protocolList": [
"HLS", "DASH"
],
"segmentDuration": 5,
"accessPrivateFiles": true,
"storageBucketName": "vodstaton-test"
}
Request body (DRM using Widevine)
{
"cdn": {
"profileId": 681,
"regionType": "KOREA",
"type": "GLOBAL_EDGE"
},
"createCdn": true,
"encryptionList": [
{
"drmContentId": "openapi",
"drmKeyUrl": "https://kms.example.com/cpix/token",
"systemIdList": [
"EDEF8BA9-79D6-4ACE-A3C8-27DCD51D21ED"
],
"drmTypeCode": 22,
"protocol": "DASH"
},
],
"name": "api-guide-drm",
"protocolList": [
"HLS", "DASH"
],
"segmentDuration": 5,
"accessPrivateFiles": true,
"storageBucketName": "vodstaton-test"
}
Request body (using MediaEncryption Only)
{
"cdn": {
"profileId": 681,
"regionType": "KOREA",
"type": "GLOBAL_EDGE"
},
"createCdn": true,
"encryptionList": [
{
"mediaEncryptTypeCode": 1,
"protocol":"HLS"
}
],
"name": "api-guide-drm",
"protocolList": [
"HLS", "DASH"
],
"segmentDuration": 5,
"accessPrivateFiles": true,
"storageBucketName": "vodstaton-test"
}
응답 예시
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 12 Sep 2018 09:53:32 GMT
Content-Type: application/json;charset=utf-8
Connection: keep-alive
Access-Control-Allow-Origin: *
x-ncp-trace-id: 36c9k60om4p3238cpmc9gm4cj4
{
"content": {
"disabled": false,
"id": "vs-20230628104743-IhwvCgd",
"name": "ey-api-gedge-0628",
"channelStatus": "CREATING",
"storageBucketName": "gjtest",
"segmentDuration": 5,
"protocolList": [
"HLS",
"DASH"
],
"createTime": 1687916863,
"cdnCreatedTime": 1687916864,
"playUrl": "https://kphmlswg1388.beta-edge.naverncp.com/[protocol]/[Object Storage Bucket(encryption name)]/[path]/[video filename]/[manifest]",
"cdnStatus": "CREATING",
"cdnDomain": "kphmlswg1388.beta-edge.naverncp.com",
"cdnServiceName": "edge-vs-20230628104743-IhwvCgd",
"storageBucketStatus": "RUNNING",
"originPath": "beta-vs2-k1.video.media.ntruss.com/86/vs-20230628104743-IhwvCgd",
"encryptList": [
],
"accessPrivateFiles": false,
"encryptedBucketName": "sk3DDQr8sR~23I9msiHAPg__",
"segmentDurationOption": "BASIC",
"cdn": {
"cdnType": "GLOBAL_EDGE",
"cdnDomain": "kphmlswg1388.beta-edge.naverncp.com",
"cdnServiceName": "edge-vs-20230628104743-IhwvCgd",
"profileId": 681,
"regionType": "KOREA",
"cdnInstanceNo": 1388
},
"drm": {
"siteId": "ABCD",
"contentId": "abc-2344-dfd"
}
}
}
이 문서가 도움이 되었습니까?