- Print
- PDF
Create channel
- Print
- PDF
VOD Station provides an API to create channels, as well as the Channel list search API and Channel information search API for searching created channels.
The following are precautions when using the content authentication (Signed URL/JWT) control of Global Edge in integration with VOD Station.
- In the cache settings of Global Edge, you need to set Edge Auth as follows. For more information on how to change Global Edge Edge Auth settings, see the API Guide.
- Extensions excluded from authentication
- .ts, .mp4, .m4s, .vtt, .key
- Extension that forwards the authentication token to the source
- .m3u8, .mpd
- Extensions excluded from authentication
- When issuing an authentication token, you must enter wildcard path under acl for Signed URL and path for JWT respectively. For more information on how to issue authentication tokens, see the User Guide.
- Single bitrate playback: '/[protocol]/[encryptedBucketName]/[path]/[video filename]/*'
- Example:
- 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
- Example:
- Adaptive bitrate playback: '/[protocol]/[encryptedBucketName]/[path]/[prefix],[video filenames],[suffix].smil/*'
- Example:
- HLS playback address: 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 playback address: 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 playback address: https://example.edge.navercorp.com/hls/guide/abr/vod-,5400,2400,1200,0900,0600,0300,k.mp4.smil/master.m3u8
- Example:
- Single bitrate playback: '/[protocol]/[encryptedBucketName]/[path]/[video filename]/*'
Request
POST https://vodstation.apigw.ntruss.com/api/v2/channels
Request headers
Header name | Description |
---|---|
x-ncp-region_code | NAVER Cloud Platform Region code x-ncp_region_code:{Region Code} |
x-ncp-apigw-timestamp | It indicates the elapsed time in milliseconds since January 1, 1970 00:00:00 UTC. Request is considered invalid if the timestamp differs from the current time by more than 5 minutesx-ncp-apigw-timestamp:{Timestamp} |
x-ncp-iam-access-key | Access key ID value issued on NAVER Cloud Platform portalx-ncp-iam-access-key:{Sub Account Access Key} |
x-ncp-apigw-signature-v2 | Signature encrypted with the access key ID value and secret keyx-ncp-apigw-signature-v2:{API Gateway Signature} |
Content-Type | Specify the request body content type as application/jsonContent-Type: application/json |
Request body
Field names in API requests are case sensitive.
| Field name | Required | Type | Restrictions | Default | Description |
|--- |--- |--- |--- |--- |--- |
| name | Yes | String | | | Name of the channel to be created |
| storageBucketName | Yes | String | | | Name of the NAVER Cloud Platform Object Storage bucket to be integrated with the channel |
| accessPrivateFiles | No | Boolean | | | Set access restrictions in VOD Station for private files in the Object Storage bucket to be integrated
If allowed, files can be streamed without processing them to be public |
| protocolList[] | Yes | Array(String) | HLS, DASH | | Streaming protocol for the channel
HLS and DASH are supported, with duplicate selections available |
| encryptionList[] | No | Array | | | Media protection settings for the channel
It provides media encryption feature and DRM (FairPlay, Widevine/PlayReady) integration interface |
| encryptionList[].drmContentId | Optional | String | Numbers and English letters between 1 and 200 characters
Not needed when setting up media encryption | | DRM Content ID
The value is included for DRM key requests and needed for license issuing |
| encryptionList[].drmKeyUrl | Optional | String | URL including http(s)://
Not needed when setting up media encryption | | The CPIX API URL of the DRM provider
VOD Station officially supports the integration with Inka Pallyacon DRM's CPIX v1 API
For DRM packaging, VOD Station includes the xml body at POST request |
| encryptionList[].systemIdList | Optional | Array(String) | Spaces not allowed, "-" allowed, must be less than 256 characters
Not needed when setting up media encryption | | SystemID by DRM type
Required to enter a value for the type you're setting |
| encryptionList[].drmTypeCode | Optional | Integer | FairPlay: 21
Widevine/PlayReady: 22
Not required when setting up media encryption | | DRM type settings required |
| encryptionList[].mediaEncryptionTypeCode | Optional | Integer | AES-128: 1
Unnecessary when DRM is set | | Set HLS AES-128
Can't be configured with FairPlay |
| encryptionList[].protocol | Yes | String | HLS, DASH | | Set the appropriate protocol for DRM or media encryption
Widevine/PlayReady: DASH
FairPlay: HLS
MediaEncryption: HLS |
| segmentDuration | Yes | Integer | An integer between 5 and 20 | | Play time per segment
The longer the duration, the longer the segment size becomes. This may result in a longer loading time, depending on the client network conditions
On the other hand, the shorter the segment duration, the smaller the segment size will become. If set too small, buffering may occur, depending on the client network conditions
(Unit: second) |
| segmentDurationOption | No | String | BASIC, VARIABLE | BASIC | Create segments so that all segments start with a keyframe
When selecting the VARIABLE option, a difference may occur between configured segmentDuration value and segment duration actually created, and the segment duration may not be constant |
| createCdn | Yes | Boolean | true, false | | VOD Station requires CDN integration
Can be created together upon channel creation or separately |
| cdn | Optional | Object | Required when auto-generating Global Edge | ||
| cdn.profileId | Optional | Integer | New Global Edge profile ID to create | |Profile ID to create the Global Edge from |
|cdn.regionType | Optional | String | Utilized when integrating Global Edge | KOREA, JAPAN, GLOBAL | Global Edge service area|
| cdn.type | Optional | String | Utilized when integrating Global Edge |GLOBAL_EDGE |Type for creating a new Global Edge|
| drm | No | Object | Required to enter when selecting One Click Multi DRM | | |
| drm.siteId | No | String | Required to enter when selecting One Click Multi DRM | | |
| drm.contentId | No | String | Required to enter when selecting One Click Multi DRM | contentId is the unique ID of the content to be played, and it is used when packaging DRM. You can enter 3 to 100 characters consisting of English letters, numbers, "-" (hyphens), and "_" (underscores) | |
Response
| Field name | Type | Description | Remarks |
|--- |--- |--- |--- |
| content | Object | VOD Station open API response object | |
| content.id | String | ID of the created channel | |
| content.name | Object | Channel name | |
| content.channelStatus | Integer | Channel's current status | CREATING, READY, STOPPING, STOPPED, TERMINATING, TERMINATED, FORCE_STOPPING, FORCE_STOPPED, FORCETERMINATING, FORCETERMINATED |
| content.storageBucketName | String | Name of the Object Storage bucket integrated with the channel | |
| content.encryptedBucketName | String | Encrypted name of the Object Storage bucket integrated with the channel, used when creating the playback URL | |
| content.accessPrivateFiles | Boolean | Set access restrictions in VOD Station for private files in the bucket | |
| content.segmentDuration | Integer | Segment duration of the channel (unit: second) | |
| content.segmentDurationOption | String | Channel's segment keyframe sorting options | |
| content.protocolList[] | Array(String) | List of streaming protocols of the channel | |
| content.createTime | Integer | The time channel creation started | |
| content.readyTime | Integer | The time channel creation was completed | |
| content.cdnCreatedTime | Integer | The time when the CDN was automatically created in integration with the channel | |
| content.playUrl | String | CDN-based playback URL template | |
| content.cdnStatus | String | Status of the CDN integrated with the channel
If not auto-generated, displayed as NOT_FOUND | |
| content.cdnDomain | String | Auto-generated Global Edge's domain | |
| content.cdnServiceName | String | Auto-generated Global Edge's service name | |
| content.cdn | Object | Auto-generated Global Edge information | |
| content.cdn.cdnType | String | Auto-generated CDN type | |
| content.cdn.cdnDomain | String | Auto-generated Global Edge's domain | |
| content.cdn.cdnServiceName | String | Auto-generated Global Edge's service name | |
| content.cdn.profileId | String | Auto-generated Global Edge's profile ID | |
| content.cdn.regionType | String | Auto-generated Global Edge's service area | |
| content.cdn.cdnInstanceNo | Integer | Auto-generated Global Edge's instance information | |
| content.storageBucketStatus | String | Status of the Object Storage bucket integrated with the channel | |
| content.originPath | String | Source path of the created channel, which is referred to when an independent CDN is created | |
| content.encryptionList[] | Array | Media security settings of the channel | |
| content.encryptionList[].protocol | String | Media security target protocol | |
| content.encryptionList[].mediaEncryptionTypeCode | Integer | Media security setting's encryption type
1: AES-128
2: Sample-AES
3: CENC | |
| content.encryptionList[].drmTypeCode | Intenger | Media security setting's DRM type
21: FairPlay
22: Widevine/PlayReady | |
| content.encryptionList[].drmTypeName | String | Name of the media security setting's DRM type | |
| content.encryptionList[].drmContentId | String | Content ID to be requested when packaging from VOD Station | |
| content.encryptionList[].systemIdList | Array(String) | DRM system ID to be requested when packaging from VOD Station | |
| content.encryptionList[].drmKeyUrl | String | DRM CPIX API URL to be requested when packaging from VOD Station | |
| content.drm | Object | DRM encryption settings using VOD Station | |
| content.drm.siteId | String | Site id created with One Click Multi DRM product | |
| content.drm.contentId | String | Unique ID of the content to apply DRM encryption to
It is used for DRM packaging and can be at least 3 characters and up to 100 characters, including English letter, numbers, "-" (hyphen), and "_" (underscore) | |
| error | Object | Error response code and message | |
| error.errorCode | String | Error response code | |
| error.message | String | Error response message | |
| error.details | String | Detailed description of the error message
It responds when an error occurs in the API Gateway | |
Examples
Request example
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"
}
Response example
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"
}
}
}