Create channel
    • PDF

    Create channel

    • PDF

    Article summary

    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
    • 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/*'
      • 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/*'

    Request

    POST https://vodstation.apigw.ntruss.com/api/v2/channels
    

    Request headers

    Header nameDescription
    x-ncp-region_codeNAVER Cloud Platform Region code
    x-ncp_region_code:{Region Code}
    x-ncp-apigw-timestampIt 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 minutes
    x-ncp-apigw-timestamp:{Timestamp}
    x-ncp-iam-access-keyAccess key ID value issued on NAVER Cloud Platform portal
    x-ncp-iam-access-key:{Sub Account Access Key}
    x-ncp-apigw-signature-v2Signature encrypted with the access key ID value and secret key
    x-ncp-apigw-signature-v2:{API Gateway Signature}
    Content-TypeSpecify the request body content type as application/json
    Content-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"
        }
      }
    }
    

    Was this article helpful?

    What's Next
    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.