Tencent Cloud TRTC는 Android 시스템에서 화면 공유를 지원하며, TRTC SDK를 통해 현재 시스템의 화면 콘텐츠를 방 안의 다른 사용자에게 공유합니다. 이 기능에 관한 주의 사항은 다음과 같습니다.
TRTC Android 버전의 화면 공유는 데스크톱 버전처럼 '서브 채널 공유'를 지원하지 않으므로, 화면 공유 실행 시 먼저 카메라의 수집을 중지하지 않으면 충돌이 발생할 수 있습니다.
Android 시스템의 백그라운드 App이 지속적으로 CPU를 사용할 경우 시스템에 의해 강제로 종료될 수 있으며, 화면 공유 자체도 CPU를 소모하게 됩니다. 이 충돌을 해결하려면 App에서 화면 공유를 실행함과 동시에 Android 시스템에 플로팅 창을 팝업해야 합니다. Android는 포그라운드 UI의 App 프로세스를 강제 종료하지 않으므로, 해당 방법을 사용하면 다음과 같이 사용자의 App이 계속해서 화면 공유를 진행하고 자동으로 회수되지 않습니다.
화면 공유 실행
Android의 화면 공유를 활성화하고 TRTCCloud의 startScreenCapture() 인터페이스를 호출합니다. 단, 선명하고 안정적인 화면 공유를 위해 다음 세 가지 문제에 유의해야 합니다.
Activity 추가
manifest 파일에 다음 activity를 붙여넣습니다. 프로젝트 코드에 있을 경우에는 추가할 필요 없습니다.
startScreenCapture()의 첫 번째 매개변수인 encParams 설정을 통해 화면 공유의 인코딩 품질을 지정할 수 있습니다. encParams를 null로 지정할 경우 SDK는 자동으로 이전에 설정한 인코딩 매개변수를 사용합니다. 매개변수 권장 설정값은 다음과 같습니다.
매개변수 항목
매개변수 이름
일반 권장 값
텍스트 교육 시나리오
해상도
videoResolution
1280 × 720
1920 × 1080
프레임 레이트
videoFps
10 FPS
8 FPS
최대 비트 레이트
videoBitrate
1600 kbps
2000 kbps
해상도 어댑티브
enableAdjustRes
NO
NO
설명:
일반적으로 화면 공유 콘텐츠는 많은 변화가 없으므로 FPS를 높게 설정하는 것은 비경제적입니다. 권장 설정값은 10FPS입니다.
공유하는 화면 콘텐츠에 텍스트가 많이 포함되어 있는 경우 해상도와 비트 레이트를 알맞게 높이는 것이 좋습니다.
최대 비트 레이트(videoBitrate)란 화면 변화가 심할 때 최대로 출력되는 비트 레이트를 의미하며, 화면 콘텐츠의 변화가 적은 경우 실제 인코딩 비트 레이트는 비교적 낮습니다.
iOS 플랫폼 기반
애플리케이션 내 공유
현재 App의 화면만 공유할 수 있다는 의미입니다. 해당 기능은 iOS 13 버전 이상의 운영 체제에서만 지원됩니다. 현재 App 이외의 화면 콘텐츠를 공유할 수 없으므로 높은 수준의 개인 정보 보호가 필요한 시나리오에 적합합니다.
애플리케이션 간 공유
Apple의 Replaykit 솔루션을 기반으로 시스템 전체의 화면 콘텐츠 공유가 가능합니다. 단, 현재 App에서 별도로 Extension 확장 모듈을 제공해야 하므로 애플리케이션 내 공유보다 연결 절차가 더 많습니다.
주의사항:
TRTC SDK의 모바일 버전은 데스크톱 버전처럼 '서브 채널 공유'를 지원하지 않는다는 것에 주의하십시오. iOS와 Android 시스템은 모두 백그라운드에서 실행되는 App에 카메라 사용 권한을 제한하므로 서브 채널을 공유해도 큰 효과가 없습니다.
방법1: iOS 플랫폼에서의 애플리케이션 내 공유
애플리케이션 내 공유 방법은 매우 간단합니다. TRTC SDK에서 제공하는 startScreenCapture 인터페이스를 호출하여 인코딩 매개변수 TRTCVideoEncParam을 전송하고 매개변수 appGroup을 ''로 설정하면 됩니다. TRTCVideoEncParam 매개변수는 null로 설정할 수 있으며, 이때 SDK는 화면 공유 전에 설정된 인코딩 매개변수를 사용합니다.
iOS 화면 공유 시 다음과 같은 인코딩 매개변수를 권장합니다.
매개변수 항목
매개변수 이름
일반 권장 값
텍스트 교육 시나리오
해상도
videoResolution
1280 × 720
1920 × 1080
프레임 레이트
videoFps
10 FPS
8 FPS
최대 비트 레이트
videoBitrate
1600 kbps
2000 kbps
해상도 어댑티브
enableAdjustRes
NO
NO
설명:
일반적으로 화면 공유 콘텐츠는 많은 변화가 없으므로 FPS를 높게 설정하는 것은 비경제적입니다. 권장 설정값은 10FPS입니다.
공유하는 화면 콘텐츠에 텍스트가 많이 포함되어 있는 경우 해상도와 비트 레이트를 알맞게 높이는 것이 좋습니다.
최대 비트 레이트(videoBitrate)란 화면 변화가 심할 때 최대로 출력되는 비트 레이트를 의미하며, 화면 콘텐츠의 변화가 적은 경우 실제 인코딩 비트 레이트는 비교적 낮습니다.
방법2: iOS 플랫폼에서의 애플리케이션 간 공유
예시 코드
Github의 trtc_demo/ios 디렉터리에 애플리케이션 간 공유 예시 코드가 저장되어 있으며, 다음 파일이 포함되어 있습니다.
├── Broadcast.Upload //녹화 프로세스 Broadcast Upload Extension 코드는 2단계 참고
│ ├── Broadcast.Upload.entitlements //프로세스 간에 통신하는 AppGroup 정보 설정에 사용
│ ├── Broadcast.UploadDebug.entitlements //프로세스 간에 통신하는 AppGroup 정보 설정에 사용(debug 환경)
iOS 시스템에서 애플리케이션 간 화면 공유 시 메인 App 프로세스의 푸시 스트림을 위해 Extension 녹화 프로세스를 추가해야 합니다. Extension 녹화 프로세스는 화면을 녹화해야 할 때 시스템에서 생성하며, 시스템에서 수집한 화면 이미지를 수신합니다. 따라서 다음과 같은 절차를 수행해야 합니다.
1. App Group을 생성하고 XCode에서 설정(옵션)을 진행합니다. Extension 녹화 프로세스와 메인 App 프로세스 간의 통신을 가능하게 하는 과정입니다.
2. 프로그램에 Broadcast Upload Extension의 Target을 생성하고, 여기에 SDK 압축 패키지 중 확장 모듈을 위해 사용자 정의된 TXLiteAVSDK_ReplayKitExt.framework를 통합합니다.
3. 메인 App이 Broadcast Upload Extension에서 수신되는 녹화 데이터를 대기하도록 메인 App의 수신 로직과 연결합니다.
4. pubspec.yaml 파일을 편집하고 replay_kit_launcher 플러그 인을 가져와 TRTC Demo Screen에서 버튼 하나만 클릭하면 화면 공유 효과(옵션)를 호출하는 것과 유사한 기능을 구현합니다.
# trtc sdk와 replay_kit_launcher 가져오기
dependencies:
tencent_trtc_cloud: ^0.2.1
replay_kit_launcher: ^0.2.0+1
주의사항:
1단계를 건너뛴 경우, 즉 App Group을 설정하지 않은 경우(인터페이스가 null 전송)에도 화면 공유를 실행할 수 있습니다. 그러나 안정성이 저하되는 문제가 발생하므로, 절차가 많더라도 최대한 정확한 App Group을 설정하여 화면 공유 기능의 안정성을 확보하십시오.
Android/iOS 공유 화면 시청
사용자가 Android/iOS를 통해 화면 공유를 시작하면 메인 스트림을 통해 공유됩니다. 방 안의 다른 사용자들은 TRTCCloudListener의 onUserVideoAvailable 이벤트를 통해 이 공지를 수신하게 됩니다.
공유 화면을 시청하려는 사용자는 startRemoteView 인터페이스를 통해 원격 사용자의 메인 스트림 화면을 렌더링합니다.
FAQ
한 개의 방에서 동시에 몇 개 채널의 화면을 공유할 수 있나요?
현재 TRTC 멀티미디어 방별로 한 채널의 화면만 공유할 수 있습니다.