채널 생성
- 인쇄
- PDF
채널 생성
- 인쇄
- PDF
Article Summary
Share feedback
Thanks for sharing your feedback!
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
- 인증 토큰을 원본에 전달할 확장자
- .m3u8, .mpd
- 인증 제외 확장자
- 인증 토큰 발급 시 Signed URL, JWT 각각 acl, path에 wildcard path를 입력해야합니다. 자세한 인증 토큰 발급 방식은 사용 가이드를 참조해 주십시오.
- 단일 비트레이트 재생 : '/[protocol]/[encryptedBucketName]/[path]/[video filename]/*'
- 예시)
- HLS : https://example.cdn.ntruss.com/hls/guide/vod-5100k.mp4/index.m3u8
- wildcard path : '/hls/guide/vod-5100k.mp4/*'
- DASH : https://example.cdn.ntruss.com/dash/guide/vod-5100k.mp4/index.m3u8
- wildcard path : '/dash/guide/vod-5100k.mp4/*'
- HLS : https://example.cdn.ntruss.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.cdn.ntruss.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 연동이 필수 채널 생성 시 함께 생성하거나 별도로 생성해 사용 가능 | |
cdnTypeList[] | Optional | String | Supported value: CDN+ | CDN+ 를 통한 자동 생성 CDN 을 활용 할 경우 활용. Global Edge 자동 생성 CDN 은 cdn object 를 활용합니다. 별도 CDN 생성은 VOD Station CDN 수동 연동 가이드 참고 바람 | |
cdn | Optional | Object | Global Edge 를 자동 생성 할 경우 필수로 요청 합니다. | CDN+ 를 통한 자동 생성 할 경우 활용 하지 않음 | |
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 | 자동 생성된 CDN+ 도메인 | |
content.cdnServiceName | String | 자동 생성된 CDN+ 서비스명 | |
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)
{
"cdnTypeList": [
"CDN+"
],
"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"
}
}
}
이 문서가 도움이 되었습니까?