채널 생성

Prev Next

VOD 스트리밍을 위한 채널을 생성합니다.

요청

요청 형식을 설명합니다. 요청 형식은 다음과 같습니다.

메서드 URI
POST /api/v2/channels

요청 헤더

VOD Station API에서 공통으로 사용하는 헤더에 대한 정보는 VOD Station 요청 헤더를 참조해 주십시오.

요청 바디

요청 바디에 대한 설명은 다음과 같습니다.

필드 타입 필수 여부 설명
name String Required 채널 이름
  • 영문자, 숫자, 특수 문자 '-'를 허용하며, 3~20자 이내로 입력
storageBucketName String Required 스트리밍 영상 저장 버킷 이름
accessPrivateFiles Boolean Optional 버킷 내 비공개 파일 접근 제한 설정 여부
  • true | false (기본값)
    • true: 허용
    • false: 제한
  • 허용 시 비공개 파일도 스트리밍 가능
protocolList Array Required 스트리밍 프로토콜 목록
  • HLS | DASH
  • 중복 선택 가능
encryptionList Array Optional 채널의 콘텐츠 보호 설정: encryptionList
segmentDuration Integer Required 세그먼트당 재생 시간(초)
  • 5~20
  • 세그먼트 재생 시간이 길면 파일 크기가 커지고 로딩이 길어질 수 있음
  • 세그먼트 재생 시간이 짧으면 파일 크기는 작아지지만, 버퍼링이 발생할 수 있음
segmentDurationOption String Optional 세그먼트 분할 방식 설정
  • BASIC (기본값) | VARIABLE
    • BASIC: segmentDuration 설정 간격으로 일정하게 세그먼트 생성
    • VARIABLE: 모든 세그먼트가 키 프레임(keyframe)으로 시작하도록 세그먼트 생성
  • VARIABLE 옵션을 선택한 경우, segmentDuration 값과 실제 생성된 세그먼트 재생 시간에 차이 발생 가능성 존재
  • 안정적인 스트리밍 서비스를 위해서는 BASIC 옵션 사용 권장
createCdn Boolean Required CDN 신규 생성 여부
cdnTypeList String Optional CDN+
  • createCdn = true인 경우, 필수 입력
  • 현재 자동 채널 생성은 CDN+만 지원하고 있으며, 별도 CDN 생성은 CDN+ 연동 가이드 참조

encryptionList

encryptionList에 대한 설명은 다음과 같습니다.

필드 타입 필수 여부 설명
drmContentId String Optional DRM 콘텐츠 아이디
  • 영문자, 숫자를 허용하며, 3~100자 이내로 입력
  • DRM Key 요청 시 해당 값을 포함해 요청하며, 라이선스(License) 발급 시 필요
drmKeyUrl String Optional DRM Key URL
  • DRM 제공사의 CPIX API URL
  • VOD Station은 공식적으로 Inka Pallyacon DRM의 CPIX v1 API와의 연동을 지원
  • DRM 패키징을 위해 VOD Station은 xml body를 포함해 POST로 요청
  • http(s):// 포함
  • Media Encryption를 설정하는 경우, 불필요
systemIdList Array Optional DRM 시스템 아이디
  • DRM 시스템 고유 식별자
  • 영문자, 숫자, 특수문자 '-'를 허용하며, 공백 없이 1~256자 이내로 입력
  • Media Encryption를 설정하는 경우, 불필요
  • DRM 유형에 맞게 1~2개의 시스템 아이디 포함 필수
drmTypeCode Integer Optional DRM 유형
  • 21 | 22
    • 21: FairPlay
    • 22: Widevine/PlayReady
  • Media Encryption를 설정하는 경우, 불필요
mediaEncryptTypeCode Integer Optional Media Encryption(HLS AES-128) 코드 설정
  • 1 | 2 | 3
    • 1: AES-128
    • 2: Sample-AES
    • 3: CENC
  • drmTypeCode21인 경우, 설정 불가
  • DRM을 설정하는 경우, 불필요
protocol String Required 프로토콜 설정
  • HLS | DASH
    • HLS: FairPlay/Media Encryption
    • DASH: Widevine/PlayReady
참고

송출 영상 보안 설정 관련 필드는 송출 영상 보안 설정을 참조하여 입력해 주십시오.

요청 예시

요청 예시는 다음과 같습니다.

curl --location --request POST 'https://vodstation.apigw.fin-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}'

Reqeust body (non DRM)
{
  "cdnTypeList": [
    "CDN+"
  ],
  "name": "api-guide",
  "protocolList": [
    "HLS", "DASH"
  ],
  "segmentDuration": 5,
  "storageBucketName": "vodstation-bucket"
}

Request body (DRM using MediaEncryption and Widevine/PlayReady)
{
  "cdnTypeList": [
    "CDN+"
  ],
  "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,
  "accessPrivateFiles": true,
  "storageBucketName": "vodstaton-test"
}

Request body (DRM using FairPlay and Widevine/PlayReady)
{
  "cdnTypeList": [
    "CDN+"
  ],
  "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)
{
  "cdnTypeList": [
    "CDN+"
  ],
  "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)
{
  "cdnTypeList": [
    "CDN+"
  ],
  "createCdn": true,
  "encryptionList": [
    {
      "mediaEncryptTypeCode": 1,
      "protocol":"HLS"
    }
  ],
  "name": "api-guide-drm",
  "protocolList": [
    "HLS", "DASH"
  ],
  "segmentDuration": 5,
  "accessPrivateFiles": true,
  "storageBucketName": "vodstaton-test"
}

응답

응답 형식을 설명합니다.

응답 바디

응답 바디에 대한 설명은 다음과 같습니다.

필드 타입 필수 여부 설명
content Object - 응답 결과
content.id String - 채널 아이디
content.name String - 채널 이름
content.channelStatus String - 채널 상태
  • CREATING | READY | STOPPING | STOPPED | TERMINATING | TERMINATED | FORCE_STOPPING | FORCE_STOPPED | FORCETERMINATING | FORCETERMINATED
    • CREATING: 생성 중
    • READY: 운영 중
    • STOPPING: 정지 중
    • STOPPED: 정지 완료
    • TERMINATING: 삭제 중
    • TERMINATED: 삭제 완료
    • FORCE_STOPPING: 강제 정지 중
    • FORCE_STOPPED: 강제 정지 완료
    • FORCETERMINATING: 강제 삭제 중
    • FORCETERMINATED: 강제 삭제 완료
content.storageBucketName String - 채널이 스트리밍할 영상이 저장되어 있는 버킷 이름
content.segmentDuration Integer - 세그먼트당 재생 시간(초)
content.protocolList Array - 스트리밍 프로토콜 목록
  • HLS | DASH
content.createTime Integer - 채널 생성 시작 일시(초)
  • Unix Timestamp 형식
content.cdnCreatedTime Integer - 채널에 연동하여 자동 생성된 CDN의 생성 일시(초)
  • Unix Timestamp 형식
content.playUrl String - CDN을 통한 재생 URL 템플릿
content.cdnStatus String - 채널에 연동된 CDN의 상태
  • 자동 생성하지 않으면 NOT_FOUND로 표시
content.cdnDomain String - 자동 생성된 Global Edge 도메인
content.cdnServiceName String - 자동 생성된 Global Edge 서비스 이름
content.storageBucketStatus String - 채널에 연동된 Object Storage 버킷의 상태
content.originPath String - 생성한 채널의 원본 경로
  • 별도 CDN 생성 시 사용
content.encryptList Array - 채널의 콘텐츠 보호 설정 정보: encryptList
content.accessPrivateFiles Boolean - 버킷 내 비공개 파일 접근 제한 설정 여부
  • true | false
    • true: 제한
    • false: 허용
  • 허용 시 비공개 파일도 스트리밍 가능
content.encryptedBucketName String - 채널에 연동된 버킷의 암호화된 이름
  • 재생 URL 생성 시 사용
content.segmentDurationOption String - 세그먼트 분할 방식 설정
  • BASIC | VARIABLE
    • BASIC: segmentDuration 설정 간격으로 일정하게 세그먼트 생성
    • VARIABLE: 모든 세그먼트가 키 프레임(keyframe)으로 시작하도록 세그먼트 생성
  • VARIABLE 옵션을 선택한 경우, segmentDuration 값과 실제 생성된 세그먼트 재생 시간에 차이 발생 가능성 존재

encryptList

encryptList에 대한 설명은 다음과 같습니다.

필드 타입 필수 여부 설명
drmContentId String - DRM 콘텐츠 아이디
  • DRM Key 요청 시 해당 값을 포함해 요청하며, 라이선스(License) 발급 시 필요
drmKeyUrl String - DRM Key URL
  • DRM 제공사의 CPIX API URL
  • VOD Station은 공식적으로 Inka Pallyacon DRM의 CPIX v1 API와의 연동을 지원
systemIdList Array - DRM 시스템 아이디
  • DRM 시스템 고유 식별자
drmTypeCode Integer - DRM 유형
  • 21 | 22
    • 21: FairPlay
    • 22: Widevine/PlayReady
drmTypeName String - DRM 유형 이름
protocol String - 설정된 프로토콜
  • HLS | DASH
    • HLS: FairPlay/Media Encryption
    • DASH: Widevine/PlayReady
mediaEncryptTypeCode Integer - 설정된 Media Encryption(HLS AES-128) 코드 설정
  • 1 | 2 | 3
    • 1: AES-128
    • 2: Sample-AES
    • 3: CENC
mediaEncryptionTypeName String - 설정된 Media Encryption(HLS AES-128) 타입 이름
  • AES-128 | Sample-AES | CENC

응답 상태 코드

VOD Station API에서 공통으로 사용하는 응답 상태 코드에 대한 정보는 VOD Station 응답 상태 코드를 참조해 주십시오.

응답 예시

응답 예시는 다음과 같습니다.

{
  "content": {
    "id": "vs-20201112113327-Icwk9YO",
    "name": "api-guide-drm",
    "channelStatus": "CREATING",
    "storageBucketName": "vodstation-bucket",
    "encryptedBucketName": "zz0G2Esbn14HUBlaiZSVkg__",
    "segmentDuration": 5,
    "segmentDurationOption": "BASIC",
    "accessPrivateFiles": true,
    "protocolList": [
      "HLS",
      "DASH"
    ],
    "createTime": 1605148407,
    "cdnCreatedTime": 1605148407,
    "playUrl": "https://example.cdn.ntruss.com/[protocol]/[Object Storage Bucket(encryption name)]/[path]/[video filename]/[manifest]",
    "cdnStatus": "CREATING",
    "cdnDomain": "example.cdn.ntruss.com",
    "cdnServiceName": "vscdn-Icwk9YO",
    "storageBucketStatus": "RUNNING",
    "originPath": "vs-k1.video.media.ntruss.com/132/vs-20201112113327-Icwk9YO",
    "encryptList": [
      {
        "protocol": "DASH",
        "mediaEncryptTypeCode": 3,
        "mediaEncryptionTypeName": "AES-128",
        "drmTypeCode": 22,
        "drmTypeName": "Widevine/PlayReady",
        "drmContentId": "openapi",
        "systemIdList": ["9A04F079-9840-4286-AB92-E65BE0885F95", "EDEF8BA9-79D6-4ACE-A3C8-27DCD51D21ED"],
        "drmKeyUrl": "https://kms.example.com/cpix/token"
      },
      {
        "protocol": "HLS",
        "mediaEncryptTypeCode": 1,
        "mediaEncryptionTypeName": "AES-128"
      }
    ]
  }
}

송출 영상 보안 설정

생성한 채널에서 송출할 영상 콘텐츠의 보안을 위해 다양한 설정을 지원합니다.

콘텐츠 접근 제어

VOD Station과 연동된 CDN+에서 콘텐츠 인증(Secure Token) 사용 시 유의 사항은 다음과 같습니다.

  • CDN+의 Viewer 설정 중 Secure Token을 아래와 같이 설정해야 합니다. CDN+ Viewer 설정 변경 방법은 사용 가이드를 참조해 주십시오.
    • 인증 예외 대상 확장자
      • .ts, .mp4, .m4s, .vtt, .key
    • 원본에 Token 전달하는 확장자
      • .m3u8, .mpd
  • 인증 토큰 발급 시 ACL에 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/*'
    • Adaptive 비트레이트 재생: '/[protocol]/[encryptedBucketName]/[path]/[prefix],[video filenames],[suffix].smil/*'
      • <예시>
        • HLS: https://example.cdn.ntruss.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/*'