RTMP Streaming with TRTC

솔루션 배경

TRTC 통합을 용이하게 하기 위해 표준 프로토콜 RTMP를 통한 푸시/풀 스트림을 지원합니다. OBS, FFmpeg 또는 기타 RTMP 라이브러리를 설치하여 TRTC로 스트림을 푸시할 수 있습니다. OBS는 라이브 스트리밍을 위한 타사 오픈 소스 도구입니다. 사용하기 쉽고 무료이며 OS X, Windows 및 Linux를 지원합니다. OBS는 다양한 시나리오에서 사용할 수 있으며 추가 플러그인 없이 대부분의 라이브 스트리밍 요구 사항을 충족할 수 있습니다. OBS 웹사이트에서 최신 버전을 다운로드할 수 있습니다. TRTC는 RTMP 재생도 지원합니다.
이 기능은 2023년 03월 07일부터 공식 지원됩니다. 이 기능을 사용하려면 TRTC 애플리케이션 월간 패키지 기본 버전 또는 표준 버전을 구독하여 기능을 잠금 해제해야 합니다. 그러나 RTMP 스트림은 TRTC 룸의 사용자(1개 스트림당 1명의 가상 사용자)로 간주되며 통화 시간 요금이 부과됩니다. 자세한 내용은 과금 개요를 참고하십시오.

사용 사례

시나리오
설명
온라인 교육
OBS 또는 FFmpeg의 데스크톱 버전을 사용하여 RTMP를 통해 TRTC 방에 학습 자료(대부분의 미디어 형식 지원)를 게시합니다. 방에 있는 학생들은 TRTC SDK를 통해 스트림을 재생하고 교사가 재생 진행/속도를 제어하거나 챕터 간 전환을 제어하는 것과 동일한 학습 자료를 볼 수 있습니다. 여러 장치 간의 뛰어난 동기화로 더 나은 강의 품질을 보장합니다.
스포츠 시청
스포츠 이벤트 주최자는 RTMP 스트림 형식으로 콘텐츠를 제공합니다. 방에 있는 사용자가 대기 시간이 매우 짧은 이벤트를 볼 수 있도록 스트림을 TRTC 방에 게시할 수 있습니다. TRTC의 인터랙션 기능을 통해 사용자는 이벤트 내내 서로 오디오/비디오 채팅을 할 수도 있습니다.
기타
RTMP 게시 기능을 사용하여 스트리밍을 기반으로 하는 다른 실시간 인터랙티브 애플리케이션을 구현할 수도 있습니다.

네트워크 아키텍처

RTMP 클라이언트는 TRTC의 모듈이며 다른 TRTC 클라이언트와 통신할 수 있습니다. 녹화 및 릴레이와 같은 TRTC 기능도 사용할 수 있습니다.




게시 및 재생 URL

게시 URL

rtmp://intl-rtmp.rtc.qq.com/push/Room ID?sdkappid=애플리케이션&userid=사용자 ID&usersig=서명
RTMP appName은 push입니다.
방 ID, 애플리케이션, 사용자 ID 및 서명을 실제 값으로 바꿉니다.
단순화를 위해 문자열 유형의 방 ID만 지원합니다. 방 ID는 숫자, 알파벳 및 언더바를 포함할 수 있으며 64자를 초과할 수 없습니다.
경고:
다른 TRTC 클라이언트에서 RTMP 스트림을 재생하려면 방에 들어갈 때 문자열 형식의 방 ID를 사용해야 합니다.
usersig 생성하는 방법은 UserSig를 참고하십시오. 귀하의 서명이 유효 기간 내에 있는지 확인하십시오.
예시:
rtmp://intl-rtmp.rtc.qq.com/push/hello-string-room?sdkappid=140*****66&userid=******rtmp2&usersig=eJw1jdE********RBZ8qKGRj8Yp-wVbv*mGMVZqS7w-mMDQL

재생 URL

rtmp://intl-rtmp.rtc.qq.com/pull/Room ID?sdkappid=애플리케이션&userid=사용자 ID&usersig=서명&remoteuserid=원격 사용자 ID&sessionid=세션 id
RTMP 재생의 경우 appName은 pull입니다.
원격 사용자 ID를 RMTP 스트림이 속한 사용자로 설정합니다. 세션 ID는 재생 요청을 고유하게 식별하며 문제 해결에 사용됩니다. 세션 id에 UUID를 사용할 수 있습니다. 다른 필드에 대한 요구 사항은 풀 스트림 URL에 대한 요구 사항과 동일합니다.
예시:
rtmp://intl-rtmp.rtc.qq.com/pull/hello-string-room?sdkappid=140*****66&userid=******rtmp3&usersig=eJw1jdE***************ZLgi5UAgOziXOnEhswHu1iUy8MmMDQL&remoteuserid=strin*****IDtest&sessionid=7CF03***D7134473B3F99A3FC152EBD3

사용 예시

RTMP 또는 프로그래밍 라이브러리를 지원하는 소프트웨어를 사용하여 RTMP 스트림을 푸시할 수 있습니다. 아래 섹션에서는 이 작업을 수행하는 방법을 보여줍니다.

OBS를 사용하여 스트림 게시

전제 조건

OBS 툴을 설치하고 열어 다음 작업을 수행합니다.

1단계: 소스 선택

하단의 소스 패널에서 + 버튼을 클릭하고 필요에 따라 소스를 선택합니다. 일반적인 출처는 다음과 같습니다.
소스
설명
이미지
단일 이미지 게시
이미지 슬라이드 쇼
여러 이미지 게시(재생 순서 및 반복 재생 여부를 결정할 수 있음)
시나리오
전체 장면을 삽입하여 다양한 스트리밍 효과 가능. 또 다른 장면은 소스 형태로 현재 장면에 추가하여 전체 장면 삽입 구현 가능
미디어 소스
로컬 파일을 업로드하고 라이브 스트림으로 푸시
텍스트
스트림에 실시간 텍스트 추가
창 캡처
선택한 창을 실시간으로 캡처하여 게시. 라이브 방송 중에는 현재 창만 표시되고 다른 창은 캡처되지 않습니다.
비디오 캡처 장치
카메라로 캡처한 이미지를 실시간으로 캡처하고 게시
오디오 입력 캡처
오디오 라이브 스트리밍(오디오 입력 장치)
오디오 출력 캡처
오디오 라이브 스트리밍(오디오 출력 장치)




2단계: 게시 매개변수 설정

1. 하단의 컨트롤 패널>설정을 클릭합니다.
img


2. 스트림을 클릭하고 서비스 유형을 사용자 정의로 선택합니다.
3. 서버 입력: rtmp://intl-rtmp.rtc.qq.com/push/.
4. 다음 형식으로 스트림 키 입력:
방 번호?sdkappid=애플리케이션&userid=사용자 이름&usersig=서명
방 ID, 애플리케이션, 사용자 ID 및 서명을 실제 값으로 바꿉니다. 예를 들면 다음과 같습니다.
hello-string-room?sdkappid=140*****66&userid=******rtmp2&usersig=eJw1jdE***************ZLgi5UAgOzoMhrayt*cjbmiCJ699T09juc833IMT94Ld7I0iHZqVDzvVAqkZsG-IKlzLiXOnEhswHu1iUyTc9pv*****D8MQwoA496Ke6U1ip4EAH4UMc5H9pSmv6MeTBWLamhwFnWRBZ8qKGRj8Yp-wVbv*mGMVZqS7w-mMDQL




3단계: 출력 설정

RTMP 백엔드는 B-프레임 전송을 지원하지 않으며, 사용자는 다음 설정을 통해 푸시 스트림 소프트웨어의 비디오 인코딩 매개변수를 조정하여 B-프레임을 제거할 수 있습니다.
1. 컨트롤 설정에서출력으로 이동합니다.
2. 출력 모드에서 고급을 선택합니다. 1 또는 2는 키프레임 간격에 권장됩니다. CPU 사용량 사전 설정으로 ultrafast를 선택하고 프로필로 baseline을, 조정으로 zerolatency를 선택합니다. 확인을 클릭합니다.
경고:
재생 시 지터를 방지하려면 RTMP 스트림에서 B-프레임을 제거해야 합니다. 이렇게 하려면 프로필에서 baseline을 선택하기만 하면 됩니다.




4단계: 비디오 매개변수 설정

설정비디오 탭을 클릭하여 해상도와 프레임 레이트를 설정합니다. 해상도는 시청자가 보는 화질을 결정합니다. 해상도가 높을수록 화면이 선명합니다. FPS는 비디오 프레임 레이트를 뜻하며 비디오의 재생 품질과 관련됩니다. 보통 비디오 프레임 레이트는 24 - 30프레임이며 16프레임 이하 화면은 딜레이되는 듯한 느낌을 줍니다. 그래서 비교적 높은 프레임 레이트를 요구하는 게임의 경우 30프레임 이하로 내려가면 일반적으로 자연스럽지 못한 느낌을 줍니다.



5단계: 고급 설정 설정

엔드 투 엔드 딜레이를 줄이기 위해 스트림 딜레이를 활성화하지 않는 것이 좋습니다.
네트워크 지터로 인해 연결이 끊긴 경우 게시자가 빠르게 다시 연결할 수 있도록 자동 재연결을 활성화하고 가능한 한 짧게 재시도 딜레이를 설정합니다.



6단계: 스트림 게시

1. 하단의 컨트롤 패널에서 스트리밍 시작을 클릭합니다.


2. 스트리밍에 성공하면 하단 바에 스트리밍 통계가 표시되며, 사용자의 입력은 TRTC 모니터링 대시보드에 기록됩니다.



7단계: 다른 클라이언트에서 스트림 재생

상기 푸시 매개변수 설정에서 언급한 것처럼 다른 TRTC 클라이언트에서 RTMP 스트림을 재생하려면 방 입장 시 문자열 형식의 방 ID를 사용해야 합니다. 아래 스크린샷은 브라우저에서 RTMP 스트림을 재생하는 예시입니다. 다른 클라이언트에서 스트림을 재생할 수도 있습니다.



FFmpeg를 사용하여 스트림 게시

FFmpeg 명령 또는 기타 RTMP 라이브러리를 사용하여 RMTP 스트림을 푸시하려면 전체 URL, H.264 비디오 코덱 및 AAC 오디오 코덱을 사용해야 합니다. 컨테이너 형식의 경우 FLV가 권장됩니다. GOP의 경우 1s-2s가 권장됩니다. FFmpeg 매개변수의 구성은 시나리오에 따라 다르므로 FFmpeg를 사용하여 스트림을 푸시하려면 FFmpeg에 대한 지식이 필요합니다. 아래 표에는 몇 가지 일반적인 FFmpeg 명령이 나열되어 있습니다. 더 많은 옵션은 FFmpeg 문서를 참고하십시오.

FFmpeg 명령

ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url}

일반적인 FFmpeg 옵션

옵션
설명
-re
native 프레임 레이트로 입력을 읽습니다. 이것은 일반적으로 로컬 파일을 읽는 데 사용됩니다.
output_file_options 설정 가능한 옵션은 다음과 같습니다.
옵션
설명
-c:v
비디오 인코딩 라이브러리입니다. libx264를 권장합니다.
-b:v
비디오 비트 레이트입니다. 예를 들어 1500k는 1500Kbps를 의미합니다.
-r
비디오 프레임 레이트
-profile:v
비디오 프로필입니다. baseline으로 설정하면 B-프레임은 인코딩되지 않습니다. TRTC 백엔드는 B-프레임을 지원하지 않습니다.
-g
GOP(키프레임 간격)
-c:a
오디오 인코딩 라이브러리입니다. libfdk_aac이 권장됩니다.
-ac
사운드 채널 수, 유효한 값: 1 또는 2
-b:a
오디오 비트 레이트
-f
컨테이너 형식입니다. 'flv'로 설정합니다. TRTC에 게시하려면 FLV 컨테이너 형식이 필요합니다.
다음은 로컬 파일을 읽고 TRTC에 게시하는 예입니다(URL에는 따옴표가 필요함).
ffmpeg -loglevel debug -re -i sample.flv -c:v libx264 -preset ultrafast -profile:v baseline -g 30 -sc_threshold 0 -b:v 1500k -c:a libfdk_aac -ac 2 -b:a 128k -f flv 'rtmp://intl-rtmp.rtc.qq.com/push/hello-string-room?userid=rtmpForFfmpeg&sdkappid=140xxxxxx&usersig=xxxxxxxxxx'

다른 클라이언트에서 재생

아래 스크린샷은 브라우저에서 재생한 예입니다. 다른 클라이언트에서 스트림을 재생할 수도 있습니다.




ffplay 재생

다음은 ffplay를 사용하여 스트림을 재생하는 예입니다(URL에는 따옴표가 필요함).
ffplay -loglevel debug -fflags nobuffer -flags low_delay 'rtmp://intl-rtmp.rtc.qq.com/pull/hello-string-room?userid=rtmpForFfmpeg&sdkappid=140xxxxxx&usersig=xxxxxxxxxx&remoteuserid=bob_anchor&sessionid=7CF036F0***34473B3F99A3FC152EBD3'