서문
이 기능을 사용하면 여러 오디오 언어, 설명 또는 주변 오디오 경험 트랙을 라이브 재생에 사용할 수 있습니다. Live API를 사용하여 여기의 단계를 따를 수 있습니다. Video Cloud Studio를 사용할 수도 있습니다. 자세한 내용은 라이브 모듈이 포함된 다국어 오디오 문서를 참조하십시오.
요구 사항
다국어 오디오 트랙에는 몇 가지 요구 사항이 있습니다.
계정 활성화
- 다국어 오디오 기능으로 Live API를 활성화하려면 고객 지원에 문의하십시오.
- Live API용 API 키가 있는지 확인하십시오(계정 설정 시 제공됨).
인코더 설정
- RTP 프로토콜을 지원하는 인코더를 사용하십시오. 다국어 오디오 지원은
rtp
orsrt
프로토콜로 제한됩니다.
-
인코더에서 다음 값을 가져옵니다. 자세한 내용은 인코더 설명서를 참조하십시오.
- 인코더의 각 오디오 트랙에 대한 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 > 대쉬 > |
video_pid |
정수 | 예 | 비디오 트랙에 대한 MPEG-TS 입력 스트림의 패킷 식별자(PID) |
pid |
정수 | 예 | 특정 오디오 트랙에 대한 MPEG-TS 입력 스트림의 패킷 식별자(PID) |
default |
부울 | 예(기본 트랙의 경우) |
로 표시된 오디오 트랙DEFAULT 에서EXT-X-MEDIA 뿐만 아니라 비디오 스트림으로 다중화될 트랙
없는 경우 첫 번째 트랙이 기본값입니다. 여러 재생 목록이 서로 다른 기본값으로 정의된 경우 최상위 기본 트랙은 다중화된 트랙입니다. |
label |
끈 | 가능한 경우 플레이어가 선호하는 트랙에 사용되는 텍스트 설명입니다. 사용: HLS > NAME 필드
기본값: 각 트랙에 ID가 |
|
variant |
열거형 |
DASH 역할 스키마 값에 매핑:
HLS > 형질 대시 > 역할 기본값: |
|
streams [] |
배열 |
이는 재생목록 출력 유형의 없는 경우 기본 오디오 설정을 사용합니다. HLS > |
예
이 예제 본문은 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가 포함됩니다.