Create channel
- Print
- PDF
Create channel
- Print
- PDF
Article summary
Did you find this summary helpful?
Thank you for your feedback
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.
Note
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's Region codex-ncp_region_code:{Region Code} |
x-ncp-apigw-timestamp | This is the number of milliseconds that have elapsed since January 1, 1970 00:00:00 UTC, and the 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 | Value of access key ID issued in the 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 value | 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 linked with the channel | ||
accessPrivateFiles | No | Boolean | Set access restrictions in VOD Station for private files in the Object Storage bucket to be linked 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 region |
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 | Note |
---|---|---|---|
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 linked 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 completed | |
content.cdnCreatedTime | Integer | The time when the CDN was automatically created in linkage to 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. This 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"
}
}
}
Was this article helpful?