Live API를 사용한 다국어 오디오

이 항목에서는 여러 언어로 된 여러 오디오 트랙을 사용하여 라이브 작업을 만드는 방법에 대해 설명합니다.

서문

이 기능을 사용하면 여러 오디오 언어, 설명 또는 주변 오디오 경험 트랙을 라이브 재생에 사용할 수 있습니다. Live API를 사용하여 여기의 단계를 따를 수 있습니다. Video Cloud Studio를 사용할 수도 있습니다. 자세한 내용은 라이브 모듈이 포함된 다국어 오디오 문서를 참조하십시오.

요구 사항

다국어 오디오 트랙에는 몇 가지 요구 사항이 있습니다.

계정 활성화

  • 다국어 오디오 기능으로 Live API를 활성화하려면 고객 지원에 문의하십시오.
  • Live API용 API 키가 있는지 확인하십시오(계정 설정 시 제공됨).

인코더 설정

  • RTP 프로토콜을 지원하는 인코더를 사용하십시오. 다국어 오디오 지원은rtp or srt프로토콜로 제한됩니다.
  • 인코더에서 다음 값을 가져옵니다. 자세한 내용은 인코더 설명서를 참조하십시오.
    • 인코더의 각 오디오 트랙에 대한 PID(패킷 식별자) 정의
    • 인코더의 비디오와 관련된 비디오 PID 정의

    인코더의 PID 값을 모르는 경우 인코더 구성 섹션을 참조하세요.

라이브 작업 생성

작업에 여러 오디오 트랙을 추가하려면 라이브 작업을 만들 때 요청 본문에 오디오 트랙 목록을 제공해야합니다.

{
  "live_stream": true,
  "region": "us-west-2",
  "protocol": "rtp",
  "cidr_whitelist": [ /* omitted… */ ],
  "outputs": [ /* omitted… */ ],
  "alternate_audio": {
    "tracks": [ { Track Details } ]
  }
}

Track객체에 지원되는 필드

아래 표에는track객체에서 지원되는 필드에 대한 전체 설명이 나와 있습니다.

트랙 필드
필드 유형 필수 설명
language

사용할 언어의 코드입니다. 현재 이것은 유연하며 사양에서 요구하거나 지원하는 다양한 언어 형식, 특히 요구 사항에 따라 ISO-639도 다루는 RFC5456/BCP47 일 수 있습니다.

HLS > LANGUAGE필드

대쉬 > AdaptationSet:lang필드

video_pid 정수 비디오 트랙에 대한 MPEG-TS 입력 스트림의 패킷 식별자(PID)
pid 정수 특정 오디오 트랙에 대한 MPEG-TS 입력 스트림의 패킷 식별자(PID)
default 부울 예(기본 트랙의 경우) 로 표시된 오디오 트랙DEFAULT에서EXT-X-MEDIA뿐만 아니라 비디오 스트림으로 다중화될 트랙

없는 경우 첫 번째 트랙이 기본값입니다.

여러 재생 목록이 서로 다른 기본값으로 정의된 경우 최상위 기본 트랙은 다중화된 트랙입니다.

label 가능한 경우 플레이어가 선호하는 트랙에 사용되는 텍스트 설명입니다. 사용: HLS > NAME필드

기본값: 각 트랙에 ID가language있는en-0경우 (예: 지정되지 않은 경우)

variant 열거형 DASH 역할 스키마 값에 매핑:
  • main
  • alternate
  • commentary
  • supplementary
  • dub

HLS > 형질

대시 > 역할urn:mpeg:dash:role:2011 .

기본값: main

streams [] 배열

이는 재생목록 출력 유형의streams필드를 모방합니다. 예: { “source”: “720p” } - 출력 소스의 레이블과 일치합니다.

없는 경우 기본 오디오 설정을 사용합니다.

HLS > GROUP-ID . (목적)

이 예제 본문은 2 개의 오디오 트랙이있는 작업을 만듭니다.

요청

POST https://api.bcovlive.io/v1/jobs
  Content-Type: application/json
  X-API-KEY: your_API_key

요청 본문

{
  "live_stream": true,
  "region": "us-west-2",
  "protocol": "rtp",
  "cidr_whitelist": [
    "0.0.0.0/0"
  ],
  "outputs": [
    {
      "label": "hls720p",
      "live_stream": true,
      "height": 720,
      "video_bitrate": 2400,
      "segment_seconds": 6,
      "keyframe_interval": 90
    },
    {
      "label": "hls540p",
      "live_stream": true,
      "height": 540,
      "video_bitrate": 1200,
      "segment_seconds": 6,
      "keyframe_interval": 90
    }
  ],
  "alternate_audio": {
    "tracks": [
      {
        "label": "English",
        "language": "en",
        "variant": "main",
        "video_pid": 256,
        "pid": 257,
        "default": true
      },
      {
        "label": "Spanish",
        "language": "es",
        "variant": "main",
        "video_pid": 256,
        "pid": 258
      }
    ]
  }
}

샘플 응답

{
  "id": "76f814fbcd7840e99ebf0e335c933730",
  "outputs": [
      {
          "id": "0-76f814fbcd7840e99ebf0e335c933730",
          "playback_url": "https://playback-qa.a-live.io/76f814fbcd7840e99ebf0e335c933730/us-west-2/NA/profile_0/chunklist.m3u8",
          "playback_url_dvr": "https://playback-qa.a-live.io/76f814fbcd7840e99ebf0e335c933730/us-west-2/NA/profile_0/chunklist_dvr.m3u8",
          "playback_url_vod": "https://playback-qa.a-live.io/76f814fbcd7840e99ebf0e335c933730/us-west-2/NA/profile_0/chunklist_vod.m3u8",
          "playback_added_cdns": [],
          "label": "hls720p"
      },
      {
          "id": "1-76f814fbcd7840e99ebf0e335c933730",
          "playback_url": "https://playback-qa.a-live.io/76f814fbcd7840e99ebf0e335c933730/us-west-2/NA/profile_1/chunklist.m3u8",
          "playback_url_dvr": "https://playback-qa.a-live.io/76f814fbcd7840e99ebf0e335c933730/us-west-2/NA/profile_1/chunklist_dvr.m3u8",
          "playback_url_vod": "https://playback-qa.a-live.io/76f814fbcd7840e99ebf0e335c933730/us-west-2/NA/profile_1/chunklist_vod.m3u8",
          "playback_added_cdns": [],
          "label": "hls540p"
      },
      {
          "id": "2-76f814fbcd7840e99ebf0e335c933730",
          "playlist_type": "defaultS3",
          "type": "playlist",
          "alternate_audio": {
              "tracks": [
                  {
                      "label": "English",
                      "language": "en",
                      "name": "Alt0",
                      
                      "pid": 257,
                      "playlistDefault": true,
                      "default": true,
                      "variant": "main",
                      "profile_sources": [
                          "profile_0"
                      ]
                  },
                  {
                      "label": "Spanish",
                      "language": "es",
                      "name": "Alt1",
                      
                      "pid": 258,
                      "playlistDefault": false,
                      "default": false,
                      "variant": "main",
                      "profile_sources": [
                          "profile_0"
                      ]
                  }
              ]
          },
          "filename": "playlist.m3u8",
          "dvr_filename": "playlist_dvr.m3u8",
          "playback_url": "https://playback-qa.a-live.io/76f814fbcd7840e99ebf0e335c933730/us-west-2/NA/playlist.m3u8",
          "playback_url_dvr": "https://playback-qa.a-live.io/76f814fbcd7840e99ebf0e335c933730/us-west-2/NA/playlist_dvr.m3u8",
          "playback_added_cdns": []
      }
  ],
  "stream_url": "rtp://ep3-usw2.a-live.io:11780",
  "stream_name": "76f814fbcd7840e99ebf0e335c933730.stream",
  "static": false,
  "alternate_audio": {
      "tracks": [
          {
              "label": "English",
              "language": "en",
              "pid": 257,
              "default": true,
              "variant": "main",
              "name": "Alt0"
          },
          {
              "label": "Spanish",
              "language": "es",
              "pid": 258,
              "default": false,
              "variant": "main",
              "name": "Alt1"
          }
      ]
  },
  "event_length": 93600,
  "encryption": {},
  "playback_url": "https://playback-qa.a-live.io/76f814fbcd7840e99ebf0e335c933730/us-west-2/NA/playlist.m3u8",
  "playback_url_dvr": "https://playback-qa.a-live.io/76f814fbcd7840e99ebf0e335c933730/us-west-2/NA/playlist_dvr.m3u8",
  "playback_added_cdns": []
}

인코더 구성

RTP를 통해 MPEG-TS를 생성 응답에서 stream_url로 전달하도록 인코더를 구성합니다. 요청 본문에 제공된 오디오 트랙이 인코더에서 올바른 PID로 구성되어 있는지 확인합니다.

ffprobe를 사용한 예제

인코더의 PID를 모르는 경우 ffprobe(ffmpeg에 포함됨)와 같은 도구를 사용하여 스트림의 PID를 검사할 수 있습니다.

ffprobe /tmp/ma.ts
ffprobe version 5.0.1 Copyright (c) 2007-2022 the FFmpeg developers
  built with Apple clang version 13.0.0 (clang-1300.0.29.3)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/5.0.1-with-options_1 --enable-shared --cc=clang --host-cflags= --host-ldflags= --enable-gpl --enable-libaom --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-libsnappy --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-demuxer=dash --enable-opencl --enable-audiotoolbox --enable-videotoolbox --disable-htmlpages --enable-libvmaf --enable-version3
  libavutil      57. 17.100 / 57. 17.100
  libavcodec     59. 18.100 / 59. 18.100
  libavformat    59. 16.100 / 59. 16.100
  libavdevice    59.  4.100 / 59.  4.100
  libavfilter     8. 24.100 /  8. 24.100
  libswscale      6.  4.100 /  6.  4.100
  libswresample   4.  3.100 /  4.  3.100
  libpostproc    56.  3.100 / 56.  3.100
Input #0, mpegts, from '/tmp/ma.ts':
  Duration: 00:00:04.86, start: 1.400000, bitrate: 502 kb/s
  Program 1
    Metadata:
      service_name    : Service01
      service_provider: FFmpeg
  Stream #0:0[0xff]: Video: h264 (Constrained Baseline) ([27][0][0][0] / 0x001B), yuv420p(progressive), 360x240 [SAR 1:1 DAR 3:2], 30 fps, 30 tbr, 90k tbn
  Stream #0:1[0x100]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, mono, fltp, 98 kb/s
  Stream #0:2[0x102]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, mono, fltp, 98 kb/s

스트림 뒤의 16진수는 PID를 나타냅니다. 예:

  • 0xff == 255
  • 0x100 == 256
  • 0x101 == 257

재생 테스트

playback_url을브라이트코브 플레이어또는 Safari에 로드하여 재생을 확인합니다.

DRM_Playback

현재 DRM은 Catch-up (timeshift) 서비스를 통해서만 지원됩니다. 작업 만들기 요청 본문에 다음 필드를 추가합니다.

{
  "drm": {
    "modes": [
      "all"
    ]
  },
  "timeshift": {
    "type": "single",
    "startover_duration": 36000,
    "skip_live_output": true
  }
}

응답에는timeshift_url재생에 사용할 DRM 출력과 a가 포함됩니다.