tencent cloud

Tencent Real-Time Communication

문서Tencent Real-Time Communication

라이브 방송 모드 실행(iOS&Mac)

포커스 모드
폰트 크기
마지막 업데이트 시간: 2024-07-24 15:00:17

적용 시나리오

TRTC는 4가지 입장 모드를 지원합니다. 영상 통화(VideoCall), 음성 통화(VoiceCall)는 통화 모드라고 부르고, 비디오 ILVB(Live)와 오디오 ILVB(VoiceChatRoom)는 라이브 방송 모드라고 부릅니다. 라이브 방송 모드의 TRTC는 단일 방에 최대 10만 명이 동시에 접속할 수 있으며 300ms 미만의 마이크 연결 딜레이 및 1000ms 미만의 시청 딜레이, 매끄러운 마이크 켜짐/꺼짐 등의 기능을 갖추고 있습니다. 저지연 ILVB, 10만 인터랙션 강의, 화상 소개팅, 온라인 교육, 원격 교육, 초대형 회의 등의 응용 시나리오에 적합합니다.

원리 분석

TRTC 클라우드 서비스는 '인터페이스 노드'와 '프록시 노드'라는 두 가지 서버 노드로 구성되어 있습니다.
인터페이스 노드 최고 품질의 회선과 고성능 기기를 사용해 단말 간의 저지연 마이크 연결 통화 처리에 적합합니다.
프록시 노드 이 종류의 노드는 일반 회선과 일반 성능 기기를 사용하므로 동시성이 높은 풀 스트림 시청 수요 처리에 적합합니다.
라이브 방송 모드에서 TRTC는 역할의 개념을 도입했습니다. 사용자는 '호스트'와 '시청자' 역할로 나뉘고, '호스트'는 인터페이스 노드에, '시청자'는 프록시 노드에 할당됩니다. 하나의 방에 들어가는 시청자 수의 최댓값은 10만 명입니다. '시청자'가 마이크를 켜려면 먼저 역할 전환(switchRole)을 통해 '호스트'가 되어야만 발언할 수 있습니다. 역할 전환의 과정에서 사용자는 프록시 노드에서 인터페이스 노드로 마이그레이션되며, TRTC 고유의 저 딜레이 시청 기술과 매끄러운 마이크 켜짐/꺼짐 전환 기술 덕분에 전체 전환 시간이 대폭 단축되었습니다.




예시 코드

Github에 로그인하여 본 문서와 관련된 예시 코드를 확인할 수 있습니다.


설명:
Github 액세스 속도가 느리다면 TXLiteAVSDK_TRTC_iOS_latest.zip을 직접 다운로드할 수도 있습니다.

작업 단계



1단계: SDK 통합

아래의 방법 중에서 하나를 택해 TRTC SDK를 프로젝트에 통합할 수 있습니다.

방법1: CocoaPods를 사용한 통합

1. CocoaPods를 설치합니다. 자세한 작업은 CocoaPods 공식 홈페이지 설치 설명을 참고하십시오.
2. 현재 프로젝트 디렉터리 하위의 Podfile 파일을 열고 아래의 내용을 추가합니다.
설명:
해당 디렉터리 하위에 Podfile 파일이 없을 경우, pod init 명령어로 먼저 파일을 새로 생성한 다음 아래의 내용을 추가합니다.
target 'Your Project' do
pod ’TXLiteAVSDK_TRTC’
end
3. 다음 명령어를 실행하여 TRTC SDK를 설치합니다.
pod install
설치에 성공하면 현재 프로젝트의 디렉터리 하위에 xcworkspace 파일이 하나 생성됩니다.
4. 새로 생성된 xcworkspace 파일을 엽니다.

방법2: ZIP 패키지를 다운로드하여 수동으로 통합

현재 CocoaPods 환경 설치를 원하지 않거나, 설치되었지만 CocoaPods 라이브러리 액세스가 느릴 경우 ZIP 압축 패키지를 다운로드하고 빠른 통합(iOS)을 참고하여 SDK를 프로세스에 통합할 수 있습니다.

2단계: 미디어 디바이스 권한 추가

Info.plist 파일에 카메라 및 마이크 신청 권한을 추가합니다.
Key
Value
Privacy - Camera Usage Description
카메라 권한을 사용하는 이유를 설명합니다. 예를 들어, 카메라 액세스 권한이 필요한 경우 카메라 활성화 후 비디오 채팅을 해야만 화면이 나타나게 됩니다.
Privacy - Microphone Usage Description
마이크 권한을 사용하는 이유를 설명합니다. 예를 들어, 마이크 액세스 권한이 필요한 경우 마이크 활성화 후 채팅을 해야만 소리가 나게 됩니다.

3단계: SDK 인스턴스 초기화 및 이벤트 콜백 수신

1. sharedInstance() 인터페이스를 사용해 TRTCCloud 인스턴스를 생성합니다.
// trtcCloud 인스턴스 생성
_trtcCloud = [TRTCCloud sharedInstance];
_trtcCloud.delegate = self;

2. delegate 속성을 설정하고 이벤트 콜백을 등록한 다음, 관련 이벤트와 오류 공지를 리슨합니다.
// 오류 공지를 수신하여 사용자에게 공지해야 함
- (void)onError:(TXLiteAVError)errCode errMsg:(NSString *)errMsg extInfo:(NSDictionary *)extInfo {
if (ERR_ROOM_ENTER_FAIL == errCode) {
[self toastTip:@"방 입장 실패"];
[self.trtcCloud exitRoom];
}
}


4단계: 입장 매개변수 TRTCParams 어셈블리

enterRoom() 인터페이스를 호출할 경우, 핵심 매개변수 TRTCParams를 입력해야 합니다. 해당 매개변수가 포함하는 필수 입력 필드는 다음과 같습니다.
매개변수 이름
필드 유형
보충 설명
입력 예시
sdkAppId
숫자
애플리케이션 ID, TRTC 콘솔에서 SDKAppID를 확인할 수 있습니다.
1400000123
userId
문자열
영어 알파벳 대소문자(a-z, A-Z)와 숫자(0-9), 언더바(_), 대시 부호(-)만 허용됩니다. 실제 계정 시스템에 맞게 설정할 것을 권장합니다.
test_user_001
userSig
문자열
userId를 기반으로 userSig를 계산할 수 있습니다. 계산 방법은 UserSig 계산 방법을 참고하십시오.
eJyrVareCeYrSy1SslI...
roomId
숫자
숫자 유형의 방 번호입니다. 문자열 형식의 방 번호를 사용하려면 TRTCParams에서 strRoomId를 사용하십시오.
29834
주의사항:
TRTC에서는 같은 userId 2개로 방에 동시 입장하면 서로 영향을 미칠 수 있으므로 이를 지원하지 않습니다.
각 엔드는 appScene에서 통일되어야 합니다. 그렇지 않으면 예기치 않은 문제가 발생할 수 있습니다.

5단계: 호스트의 카메라 미리보기 및 마이크 음성 수집 활성화

1. 호스트는 startLocalPreview()를 호출하여 로컬 카메라 미리보기를 활성화할 수 있습니다. SDK가 시스템에 카메라 사용 권한을 요청하게 됩니다.
2. 호스트는 setLocalViewFillMode()를 호출하여 로컬 비디오 화면의 표시 모드를 설정할 수 있습니다.
Fill 모드는 채우기를 의미합니다. 화면은 같은 비율로 확대되거나 잘릴 수 있지만, 검은 부분은 없습니다.
Fit 모드는 맞추기를 의미합니다. 화면은 해당 콘텐츠가 다 표시되도록 같은 비율로 축소될 수 있고, 검은 부분이 있을 수 있습니다.
3. 호스트는 setVideoEncoderParam() 인터페이스를 호출하여 로컬 비디오의 인코딩 매개변수를 설정할 수 있습니다. 해당 매개변수는 방에 있는 다른 사용자가 사용자의 화면을 시청할 때 느끼는 화질을 결정합니다.
4. 호스트는 startLocalAudio()를 호출하여 마이크를 활성화합니다. SDK가 시스템에 마이크 사용 권한을 요청하게 됩니다.
//예시 코드: 로컬 멀티미디어 스트림 배포
[self.trtcCloud startLocalPreview:_isFrontCamera view:self.view];

//로컬 비디오 인코딩 매개변수 설정
TRTCVideoEncParam *encParams = [TRTCVideoEncParam new];
encParams.videoResolution = TRTCVideoResolution_640_360;
encParams.videoBitrate = 550;
encParams.videoFps = 15;

[self.trtcCloud setVideoEncoderParam:encParams];


6단계: 호스트의 뷰티 필터 효과 설정

1. 호스트는 getBeautyManager()를 호출하여 뷰티 필터 설정 인터페이스TXBeautyManager를 획득할 수 있습니다.
2. 호스트는 setBeautyStyle()을 호출하여 뷰티 필터 스타일을 설정할 수 있습니다.
Smooth: 매끈하게. SNS 인플루언서 느낌의 뚜렷한 효과를 줍니다.
Nature: 내추럴. 피부 보정 알고리즘은 얼굴의 디테일을 더 많이 유지하여 자연스러운 느낌을 줍니다.
Pitu: 다기능 버전에서만 지원합니다.
3. 호스트는 setBeautyLevel()을 호출하여 피부 보정 레벨을 설정할 수 있습니다. 일반적으로 5로 설정합니다.
4. 호스트는 setWhitenessLevel()을 호출하여 미백 레벨을 설정할 수 있습니다. 일반적으로 5로 설정합니다.
5. iPhone 카메라의 색상 기본값은 노란 편이므로 setFilter()를 호출하여 호스트의 미백 특수 효과를 올리길 권장합니다. 미백 특수 효과가 매치되는 필터 파일의 다운로드 주소는 필터 파일입니다.

7단계: 호스트의 방 생성 및 푸시 스트리밍 시작

1. 호스트는 TRTCParams에서 필드 role을 **TRTCRoleType.anchor**로 설정하여 현재 사용자의 역할이 호스트라는 것을 표시합니다.
2. 호스트는 enterRoom()을 호출하여 TRTCParams 매개변수 필드 roomId의 값이 방 번호인 멀티미디어 방을 생성하고 appScene 매개변수를 지정할 수 있습니다.
TRTCAppScene.LIVE: 비디오 ILVB 모드(이 문서에서 예시에 사용된 모드).
TRTCAppScene.voiceChatRoom: 오디오 ILVB 모드.
3. 방 생성에 성공하면 호스트는 멀티미디어 데이터의 인코딩과 전송 프로세스를 시작합니다. 이와 동시에, SDK는 onEnterRoom(result) 이벤트를 콜백합니다. 매개변수 result가 0보다 크면 입장 성공이며, 해당 값은 입장에 걸리는 시간을 밀리초(ms) 단위로 나타냅니다. result가 0보다 작으면 입장 실패이며, 해당 값은 입장 실패의 에러 코드입니다.
- (void)enterRoom() {
TRTCParams *params = [TRTCParams new];
params.sdkAppId = SDKAppID;
params.roomId = _roomId;
params.userId = _userId;
params.role = TRTCRoleAnchor;
params.userSig = [GenerateTestUserSig genTestUserSig:params.userId];
[self.trtcCloud enterRoom:params appScene:TRTCAppSceneLIVE];
}

- (void)onEnterRoom:(NSInteger)result {
if (result > 0) {
[self toastTip:@"방 입장 성공"];
} else {
[self toastTip:@"방 입장 실패"];
}
}


8단계: 시청자의 방 입장 후 라이브 방송 시청

1. 시청자는 TRTCParams의 필드 role을 **TRTCRoleType.audience**로 설정하여 현재 사용자의 역할이 시청자라는 것을 표시합니다.
2. 시청자는 enterRoom()을 호출하여 TRTCParams 매개변수 중 roomId가 가리키는 멀티미디어 룸에 입장하고 appScene 매개변수를 지정할 수 있습니다.
TRTCAppScene.LIVE: 비디오 ILVB 모드(이 문서에서 예시에 사용된 모드).
TRTCAppScene.voiceChatRoom: 오디오 ILVB 모드.
3. 호스트 화면 시청:
시청자가 사전에 호스트의 userId를 알고 있을 경우, 입장 성공 후 곧바로 호스트 userId를 사용해 startRemoteView(userId, view: view)를 호출하여 호스트의 화면을 볼 수 있습니다.
시청자는 입장 성공 후 onUserVideoAvailable() 이벤트 공지를 받게 됩니다. 시청자가 사전에 호스트의 userId를 모를 경우, 콜백에서 확인한 호스트 userId를 사용해 startRemoteView(userId, view: view)를 호출하여 호스트의 화면을 볼 수 있습니다.

9단계: 시청자와 호스트의 마이크 연결

1. 시청자는 switch(TRTCRoleType.TRTCRoleAnchor)를 호출하여 역할을 호스트(TRTCRoleType.TRTCRoleAnchor)로 전환합니다.
2. 시청자는 startLocalPreview()를 호출하여 로컬 화면을 활성화할 수 있습니다.
3. 시청자는 startLocalAudio()를 호출하여 마이크 음성 수집을 활성화합니다.
//예시 코드: 시청자 마이크 켜짐
[self.trtcCloud switchRole:TRTCRoleAnchor];
[self.trtcCloud startLocalAudio:TRTCAudioQualityMusic];
[self.trtcCloud startLocalPreview:_isFrontCamera view:self.view];

//예시 코드: 시청자 마이크 꺼짐
[self.trtcCloud switchRole:TRTCRoleAudience];
[self.trtcCloud stopLocalAudio];
[self.trtcCloud stopLocalPreview];


10단계: 호스트 간 크로스 룸 마이크 연결 PK

TRTC에서는 서로 다른 멀티미디어 룸의 두 호스트가 기존의 라이브 룸 시나리오에서 퇴장하지 않고도 '크로스 룸 통화' 기능을 통해 마이크를 연결하여 '크로스 룸 마이크 연결 PK'가 가능합니다.
1. 호스트 A는 connectOtherRoom() 인터페이스를 호출합니다. 현재 인터페이스 매개변수는 JSON 포맷입니다. 호스트 B의 roomIduserId를 {"roomId": "978","userId": "userB"}` 포맷으로 만든 매개변수를 인터페이스 함수에 전달해야 합니다.
2. 크로스 룸에 성공하면 호스트 A는 onConnectOtherRoom() 이벤트 콜백을 받게 됩니다. 이와 동시에 두 라이브 방송 방에 있는 모든 사용자는 onUserVideoAvailable()onUserAudioAvailable() 이벤트 공지를 받게 됩니다. 예를 들어, 방 '001'의 호스트 A는 connectOtherRoom()을 통해 방 '002'의 호스트 B와 크로스 룸 통화가 연결됩니다. 그 후, 방 '001'의 사용자는 호스트 B의 onUserVideoAvailable(B, available: true) 콜백과 onUserAudioAvailable(B, available: true) 콜백을 받게 됩니다. 방 '002'의 사용자는 호스트 A의 onUserVideoAvailable(A, available: true) 콜백과 onUserAudioAvailable(A, available: true) 콜백을 받게 됩니다.
3. 두 방의 사용자는 startRemoteView(userId, view: view)를 호출하여 상대 방 호스트의 화면을 볼 수 있게 되고, 소리는 자동으로 재생됩니다.
//예시 코드: 크로스 룸 마이크 연결 PK
NSMutableDictionary * jsonDict = [[NSMutableDictionary alloc] init];
[jsonDict setObject:@([_otherRoomIdTextField.text intValue]) forKey:@"roomId"];
[jsonDict setObject:_otherUserIdTextField.text forKey:@"userId"];
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:jsonDict options:NSJSONWritingPrettyPrinted error:nil];
NSString* jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
[self.trtcCloud connectOtherRoom:jsonString];


11단계: 현재 방 퇴장

exitRoom()을 호출하여 퇴장합니다. SDK는 퇴장 시 카메라, 마이크 등 하드웨어 디바이스를 비활성화 및 릴리스해야 합니다. 따라서 퇴장은 금방 완료되는 동작이 아니며, onExitRoom() 콜백을 받아야만 퇴장이 완료되었다고 할 수 있습니다.
// 퇴장 호출 후 onExitRoom 이벤트 콜백 대기
[self.trtcCloud exitRoom];

- (void)onExitRoom:(NSInteger)reason {
NSLog(@"방 퇴장: reason: %ld", reason)
}

주의사항:
애플리케이션에서 여러 개의 멀티미디어 SDK가 동시에 통합되었을 경우, onExitRoom 콜백을 받은 후 다른 멀티미디어 SDK를 재실행하십시오. 그렇지 않으면 하드웨어 점유율 문제가 나타날 수 있습니다.

도움말 및 지원

문제 해결에 도움이 되었나요?

피드백