Available in Classic and VPC
Create a channel for VOD streaming.
Request
This section describes the request format. The method and URI are as follows:
Method | URI |
---|---|
POST | /api/v2/channels |
Request headers
For information about the headers common to all VOD Station APIs, see VOD Station request headers.
Request body
You can include the following data in the body of your request:
Field | Type | Required | Description |
---|---|---|---|
name |
String | Required | Channel name
|
storageBucketName |
String | Required | Streaming video storage bucket name |
accessPrivateFiles |
Boolean | Optional | Whether to restrict access to private files in the bucket
|
protocolList |
Array | Required | List of streaming protocols
|
encryptionList |
Array | Optional | Content protection settings for the channel: encryptionList |
segmentDuration |
Integer | Required | Playback time per segment (second)
|
segmentDurationOption |
String | Optional | Segmentation method settings
|
createCdn |
Boolean | Required | Whether to create a new CDN
|
cdn |
Object | Conditional | CDN settings
|
cdn.profileId |
Integer | Conditional | Profile ID
|
cdn.regionType |
String | Conditional | Global Edge Service Region
|
cdn.type |
String | Conditional | CDN type
|
drm |
Object | Optional | Multi DRM settings
|
drm.siteId |
String | Conditional | Site ID
|
drm.contentId |
String | Conditional | Content ID
|
encryptionList
The following describes encryptionList
.
Field | Type | Required | Description |
---|---|---|---|
drmContentId |
String | Optional | DRM content ID
|
drmKeyUrl |
String | Optional | DRM key URL
|
systemIdList |
Array | Optional | DRM system ID
|
drmTypeCode |
Integer | Optional | DRM type
|
mediaEncryptTypeCode |
Integer | Optional | Media Encryption (HLS AES-128) code settings
|
protocol |
String | Required | Protocol settings
|
For fields related to streaming video security settings, see Set streaming video security.
Request example
The request example is as follows:
- When applying media encryption (MediaEncryption; AES-128)
curl --location --request POST 'https://vodstation.apigw.ntruss.com/api/v2/channels' \ --header 'x-ncp-apigw-timestamp: {Timestamp}' \ --header 'x-ncp-iam-access-key: {Access Key}' \ --header 'x-ncp-apigw-signature-v2: {API Gateway Signature}' \ --data '{ "name": "ch-media-encrypt", "storageBucketName": "station-000", "accessPrivateFiles": true, "protocolList": ["HLS"], "encryptionList": [ { "protocol": "HLS", "mediaEncryptTypeCode": 1 } ], "segmentDuration": 10, "segmentDurationOption": "BASIC", "createCdn": true, "cdn": { "profileId": ****, "regionType": "KOREA", "type": "GLOBAL_EDGE" } }'
Response
This section describes the response format.
Response body
The response body includes the following data:
Field | Type | Required | Description |
---|---|---|---|
content |
Object | - | Response result |
content.disabled |
Boolean | - | Whether Sub Account is disabled
|
content.id |
String | - | Channel ID |
content.name |
String | - | Channel name |
content.channelStatus |
String | - | Channel status
|
content.storageBucketName |
String | - | Name of the bucket where the video the channel will stream is stored |
content.segmentDuration |
Integer | - | Playback time per segment (second) |
content.protocolList |
Array | - | List of streaming protocols
|
content.createTime |
Integer | - | Channel creation start date and time (millisecond)
|
content.cdnCreatedTime |
Integer | - | Date and time when the CDN was automatically created in integration with the channel
|
content.playUrl |
String | - | Playback URL template via CDN |
content.cdnStatus |
String | - | Status of the CDN integrated with the channel
|
content.cdnDomain |
String | - | Auto-generated Global Edge's domain |
content.cdnServiceName |
String | - | Auto-generated Global Edge's service name |
content.storageBucketStatus |
String | - | Status of the Object Storage bucket integrated with the channel |
content.originPath |
String | - | Source path of the created channel
|
content.encryptList |
Array | - | Content protection settings information for the channel: encryptList |
content.accessPrivateFiles |
Boolean | - | Whether to restrict access to private files in the bucket
|
content.encryptedBucketName |
String | - | Encrypted name of the bucket integrated with the channel
|
content.segmentDurationOption |
String | - | Segmentation method settings
|
content.cdn |
Object | - | Auto-generated CDN (Global Edge) information |
content.cdn.cdnType |
String | - | 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 |
Integer | - | Auto-generated Global Edge's profile ID |
content.cdn.regionType |
String | - | Auto-generated Global Edge Service Region |
content.cdn.cdnInstanceNo |
Integer | - | Auto-generated Global Edge's instance ID |
encryptList
The following describes encryptList
.
Field | Type | Required | Description |
---|---|---|---|
drmContentId |
String | - | DRM content ID
|
drmKeyUrl |
String | - | DRM key URL
|
systemIdList |
Array | - | DRM system ID
|
drmTypeCode |
Integer | - | DRM type
|
drmTypeName |
String | - | DRM type name |
protocol |
String | - | Set protocol
|
mediaEncryptTypeCode |
Integer | - | Set Media Encryption (HLS AES-128) code settings
|
mediaEncryptionTypeName |
String | - | Set Media Encryption (HLS AES-128) type name
|
Response status codes
For information about the HTTP status codes common to all VOD Station APIs, see VOD Station response status codes.
Response example
The response example is as follows:
{
"content": {
"disabled": false,
"id": "vs-20250821095732-*******",
"name": "ch-media-encrypt",
"channelStatus": "CREATING",
"storageBucketName": "station-000",
"segmentDuration": 10,
"protocolList": [
"HLS"
],
"createTime": 1755737852,
"cdnCreatedTime": 1755737852,
"playUrl": "https://cpzplvi******.edge.naverncp.com/[protocol]/[Object Storage Bucket(encryption name)]/[path]/[video filename]/[manifest]",
"cdnStatus": "CREATING",
"cdnDomain": "cpzplvi******.edge.naverncp.com",
"cdnServiceName": "edge-vs-20250821095732-*******",
"storageBucketStatus": "RUNNING",
"originPath": "vs2-k1.video.media.ntruss.com/2706412/vs-20250821095732-*******",
"encryptList": [
{
"protocol": "HLS",
"mediaEncryptTypeCode": 1
}
],
"accessPrivateFiles": true,
"encryptedBucketName": "*****VzPmKvIthkozoufHw__",
"segmentDurationOption": "BASIC",
"cdn": {
"cdnType": "GLOBAL_EDGE",
"cdnDomain": "cpzplvi******.edge.naverncp.com",
"cdnServiceName": "edge-vs-20250821095732-*******",
"profileId": ****,
"regionType": "KOREA",
"cdnInstanceNo": *****
}
}
}
Set streaming video security
Various settings are available to secure video content for streaming on the channel you create.
Content access control
By integrating with the Global Edge service, you can restrict access to streaming video content through Global Edge's content authentication control. Content authentication control methods include Signed URL and JSON Web Token. See Signed URL and JSON Web Token in the Global Edge user guide for how to use each method.
- When issuing an authentication token, you must enter the wildcard path under ACL for Signed URL and path for JSON Web Token respectively.
- 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]/*
- You must set Edge Auth to the output protocol of the channel that created Edge Auth in the cache settings of Global Edge. For more information, see the Global Edge 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
Content protection
By integrating with the One Click Multi DRM service, you can encrypt and stream video content through multi DRM to prevent piracy and distribution. You can easily set DRM features through the drm
object when creating a channel, and multi DRM is applied according to the selected output protocol. For more information on encryption methods by DRM technology, supported devices, platforms, and versions, etc., see the VOD Station user guide and DoveRunner (formerly PallyCon) guide.
Encryption method | Protocol | DRM type | Encryption algorithm | Supported devices |
---|---|---|---|---|
HLS AES-128 | HLS | - | AES-128 | MS Edge, IE11, Chrome, Firefox, Opera HLS HTML5 |
DRM | HLS |
|
SAMPLE-AES | Mac/iOS Safari browser, iOS/iPadOS/tvOS app, HLS HTML5 |
DRM | DASH |
|
CENC (Common Encryption) | MS Edge, IE11, Chrome, Firefox, Opera DASH HTML5 |