개요
이 튜토리얼에서는 API 수준에서브라이트코브 라이브에서 MPEG2-TS 입력을받아들이는 라이브 스트리밍 작업을 만드는 방법을 설명합니다. MPEG2-TS 입력 사용의 핵심은 MPEG2-TS 지원 및 인코더가 제공할 수 있는protocol
a를 선택하는 것입니다. Live API에서 지원하는 TS 지원 프로토콜은 다음과 같습니다.
rtp
rtp-fec
srt
기본 입력 프로토콜은 이므로 TS 입력을 사용하려면 이러한 프로토콜 중 하나를 명시적으로 지정해야rtmp
합니다.
클리핑, SSAI 큐 포인트 또는 ID3 태그에 SMPTE 타임코드를 사용하려면 SEI Picture Timing 메시지의 H.264(AVC) 비디오에 삽입해야 합니다.
이러한 프로토콜은 인코더와 Live 간의 통신에 TCP가 아닌 UDP (사용자 데이터 그램 프로토콜)를 사용하므로 방화벽 / 라우터를 올바르게 구성하고 인코더의 IP에서 인터넷으로 UDP 출력을 허용해야합니다.
를 사용하는rtp-fec
경우 FEC 정보는 미디어와 다른 포트로 전송되므로, 예를 들어 포트 2000을 사용하는 경우 포트 2002와 2004 (2D FEC를 사용하는 경우) 도 열어야 합니다.
이 튜토리얼은curl API 요청을 만들 수 있지만 다음에서 쉽게 만들 수 있습니다. Insomnia , Postman또는 다른 REST 클라이언트 대신.
라이브 작업 만들기
먼저, 우리는 라이브 직업을 만들 것입니다. 라이브 API에는API-KEY
가 필요합니다. 그렇지 않고 액세스 권한을 얻는 데 관심이 있는 경우 고객 성공 관리자에게 문의하십시오.
-
다음curl명령을 복사하여 텍스트 편집기에 붙여넣습니다.
curl -X POST \ https://api.bcovlive.io/v1/jobs \ -H 'Content-Type: application/json' \ -H 'x-api-key: ' \ -d '{ "live_stream": true, "region": "", "protocol": "", "cidr_whitelist": ["", ""], "outputs": [{ "label": "hls360p", "live_stream": true, "height": 360, "video_bitrate": 365, "segment_seconds": 6, "keyframe_interval": 60 }, { "label": "hls432p", "live_stream": true, "height": 432, "video_bitrate": 730, "segment_seconds": 6, "keyframe_interval": 60 }, { "label": "hls540p", "live_stream": true, "height": 540, "video_bitrate": 2000, "segment_seconds": 6, "keyframe_interval": 60 }, { "label": "hls720p3M", "live_stream": true, "height": 540, "video_bitrate": 2000, "segment_seconds": 6, "keyframe_interval": 60 }, { "label": "hls720p4.5M", "live_stream": true, "height": 720, "video_bitrate": 4500, "segment_seconds": 6, "keyframe_interval": 60 }] }'
-
다음과 같이 교체하십시오.
브라이트코브 라이브 API 키와 함께 예를 들면 다음과 같습니다.
abcdfeg-this-is-a-fake-api-key-FgJajjasd12hJHsZ
사용 가능한 영역이 엔코더에서 가장 가까운 경우 엔코더에서가장 가까운 사용 가능한 영역을확인할 수 있습니다. 예를 들면 다음과 같습니다.
us-west-2
인코더가 전달하는 입력 프로토콜을 사용하면:
rpt
rtp-fec
, 또는srt
엔코더가 사용할 IP 범위를 다음과 같은 형태로
1.2.3.4/32
(있는 경우) 백업 인코더가 사용할 IP 범위를 다음과 같은 형태로
1.2.3.4/32
- 변경 한 후 코드를 터미널 또는 사용하는 명령 줄 앱에 복사하여 붙여 넣고 실행하십시오.
-
rtp-fec
프로토콜을 사용하는 경우 응답은 다음과 같아야 합니다.{ "id": "42c913e5373844a99a6285367f2704ec", "outputs": [... removed for simplicity ...], "stream_url": "rtp://ec2-34-212-0-224.us-west-2.compute.amazonaws.com:12675", "stream_name": "42c913e5373844a99a6285367f2704ec.stream", "static": false, "encryption": {}, "playback_url": "https://bcovlive-a.akamaihd.net/42c913e5373844a99a6285367f2704ec/us-west-2/NA/playlist.m3u8", "playback_url_dvr": "https://bcovlive-a.akamaihd.net/42c913e5373844a99a6285367f2704ec/us-west-2/NA/playlist_dvr.m3u8" }
또는 다음과 같은 경우
srt
:{ "id": "cdb820f2d7764b91a79536dac799fb77", "outputs": [... removed for simplicity ...], "stream_url": "srt://ec2-34-212-0-224.us-west-2.compute.amazonaws.com:13820", "stream_name": "cdb820f2d7764b91a79536dac799fb77.stream", "static": false, "encryption": {}, "playback_url": "https://bcovlive-a.akamaihd.net/cdb820f2d7764b91a79536dac799fb77/us-west-2/NA/playlist.m3u8", "playback_url_dvr": "https://bcovlive-a.akamaihd.net/cdb820f2d7764b91a79536dac799fb77/us-west-2/NA/playlist_dvr.m3u8" }
이 작업은 5개의 변환을 생성합니다. 기반을 둔 ~에애플 추천 .
인코더 구성 (TS + FEC)
여기에 표시된 단계는 이 튜토리얼의 단계를 테스트하는 데 사용된 Elemental 라이브 박스인코더를 가정합니다. 인코더가 다른 경우 설정이 비슷해야합니다.
이rtp-fec
입력의 가장 중요한 설정은 다음과 같습니다.
- 시간 코드 소스를 “시스템 클럭”으로 구성
- "Forward error correction"을 "Column and Row"로 설정하고 "Column Depth"및 "Row length"값을 설정합니다.
- 컬럼 깊이: 4 (“컬럼 깊이” TS 패킷마다 1개의 추가 FEC 패킷이 추가됩니다.)
- 행 길이: 10 (“행 길이” TS 패킷마다 1개의 추가 FEC 패킷이 추가됨)
- 추가 된 추가 데이터를 계산할 수 있습니다. TotalBitrate = MediaBitrate * (1 / (ColumnDepth + 1) + 1 / (RowLength + 1)
- 비디오 내에서 “시간 코드 삽입”을 확인하십시오.
- 권장: 프레임 속도 = 소스 따르기
다음은이 TS + FEC 샘플에 사용한 구성입니다.
인코더 (SRT) 구성
여기에 표시된 설정은 이 자습서의 단계를 테스트하는 데 사용된 Haivision KB인코더를 기반으로 합니다. 인코더가 다른 경우 설정이 비슷해야합니다.
다음은이 SRT 샘플에 사용한 구성입니다.
재생 테스트
이 VideoJS HLS 데모 페이지를 사용하여 재생을테스트할 수 있습니다. 생성 작업 응답에playback_url
반환된 값을 붙여넣기만 하면 됩니다.