TRTCCloud
의 startScreenCapture() 인터페이스를 호출합니다. 단, 선명하고 안정적인 화면 공유를 위해 다음 세 가지 문제에 유의해야 합니다.<activityandroid:name="com.tencent.rtmp.video.TXScreenCapture$TXScreenCaptureAssistantActivity"android:theme="@android:style/Theme.Translucent"/>
encParams
설정을 통해 화면 공유의 인코딩 품질을 지정할 수 있습니다. encParams
를 null로 지정할 경우 SDK는 자동으로 이전에 설정한 인코딩 매개변수를 사용합니다. 매개변수 권장 설정값은 다음과 같습니다.매개변수 항목 | 매개변수 이름 | 일반 권장 값 | 텍스트 교육 시나리오 |
해상도 | videoResolution | 1280 × 720 | 1920 × 1080 |
프레임 레이트 | videoFps | 10 FPS | 8 FPS |
최대 비트 레이트 | videoBitrate | 1600 kbps | 2000 kbps |
해상도 어댑티브 | enableAdjustRes | NO | NO |
TRTCVideoEncParam
을 전송하고 매개변수 appGroup
을 ''
로 설정하면 됩니다. TRTCVideoEncParam
매개변수는 null로 설정할 수 있으며, 이때 SDK는 화면 공유 전에 설정된 인코딩 매개변수를 사용합니다.매개변수 항목 | 매개변수 이름 | 일반 권장 값 | 텍스트 교육 시나리오 |
해상도 | videoResolution | 1280 × 720 | 1920 × 1080 |
프레임 레이트 | videoFps | 10 FPS | 8 FPS |
최대 비트 레이트 | videoBitrate | 1600 kbps | 2000 kbps |
해상도 어댑티브 | enableAdjustRes | NO | NO |
├── Broadcast.Upload //녹화 프로세스 Broadcast Upload Extension 코드는 2단계 참고│ ├── Broadcast.Upload.entitlements //프로세스 간에 통신하는 AppGroup 정보 설정에 사용│ ├── Broadcast.UploadDebug.entitlements //프로세스 간에 통신하는 AppGroup 정보 설정에 사용(debug 환경)│ ├── Info.plist│ └── SampleHandler.swift // 시스템 녹화 데이터 수신에 사용├── Resource // 리소스 파일├── Runner // TRTC 라이트 Demo├── TXLiteAVSDK_ReplayKitExt.framework //TXLiteAVSDK_ReplayKitExt SDK
TXLiteAVSDK_ReplayKitExt.framework
를 통합합니다.pubspec.yaml
파일을 편집하고 replay_kit_launcher
플러그 인을 가져와 TRTC Demo Screen에서 버튼 하나만 클릭하면 화면 공유 효과(옵션)를 호출하는 것과 유사한 기능을 구현합니다.# trtc sdk와 replay_kit_launcher 가져오기dependencies:tencent_trtc_cloud: ^0.2.1replay_kit_launcher: ^0.2.0+1
Target 이름.entitlements
라는 파일이 생성됩니다. 다음 이미지와 같이 해당 파일을 선택한 후 + 버튼을 클릭하여 상기 App Group을 입력하면 됩니다.
import ReplayKitimport TXLiteAVSDK_ReplayKitExtlet APPGROUP = "group.com.tencent.comm.trtc.demo"class SampleHandler: RPBroadcastSampleHandler, TXReplayKitExtDelegate {let recordScreenKey = Notification.Name.init("TRTCRecordScreenKey")override func broadcastStarted(withSetupInfo setupInfo: [String : NSObject]?) {// User has requested to start the broadcast. Setup info from the UI extension can be supplied but optional.TXReplayKitExt.sharedInstance().setup(withAppGroup: APPGROUP, delegate: self)}override func broadcastPaused() {// User has requested to pause the broadcast. Samples will stop being delivered.}override func broadcastResumed() {// User has requested to resume the broadcast. Samples delivery will resume.}override func broadcastFinished() {// User has requested to finish the broadcast.TXReplayKitExt.sharedInstance() .finishBroadcast()}func broadcastFinished(_ broadcast: TXReplayKitExt, reason: TXReplayKitExtReason) {var tip = ""switch reason {case TXReplayKitExtReason.requestedByMain:tip = "화면 공유 종료됨"breakcase TXReplayKitExtReason.disconnected:tip = "애플리케이션 종료"breakcase TXReplayKitExtReason.versionMismatch:tip = "통합 오류(SDK 버전 번호 불일치)"breakdefault:break}let error = NSError(domain: NSStringFromClass(self.classForCoder), code: 0, userInfo: [NSLocalizedFailureReasonErrorKey:tip])finishBroadcastWithError(error)}override func processSampleBuffer(_ sampleBuffer: CMSampleBuffer, with sampleBufferType: RPSampleBufferType) {switch sampleBufferType {case RPSampleBufferType.video:// Handle video sample bufferTXReplayKitExt.sharedInstance() .sendVideoSampleBuffer(sampleBuffer)breakcase RPSampleBufferType.audioApp:// Handle audio sample buffer for app audiobreakcase RPSampleBufferType.audioMic:// Handle audio sample buffer for mic audiobreak@unknown default:// Handle other sample buffer typesfatalError("Unknown type of sample buffer")}}}
// 화면 공유를 시작하려면 APPGROUP을 앞서 생성한 App Group으로 변경해야 합니다.trtcCloud.startScreenCapture(TRTCVideoEncParam(videoFps: 10,videoResolution: TRTCCloudDef.TRTC_VIDEO_RESOLUTION_1280_720,videoBitrate: 1600,videoResolutionMode: TRTCCloudDef.TRTC_VIDEO_RESOLUTION_MODE_PORTRAIT,),iosAppGroup,);// 화면 공유 종료await trtcCloud.stopScreenCapture();// 화면 공유 실행 이벤트 공지는 TRTCCloudListener를 통해 수신할 수 있습니다.onRtcListener(type, param){if (type == TRTCCloudListener.onScreenCaptureStarted) {//화면 공유 시작}}
replay_kit_launcher
플러그 인을 프로그램에 추가합니다.ReplayKitLauncher.launchReplayKitBroadcast(iosExtensionName);
함수를 호출하면 화면 공유 기능을 호출할 수 있습니다.// 사용자 정의 버튼 응답 방법onShareClick() async {if (Platform.isAndroid) {if (await SystemAlertWindow.requestPermissions) {MeetingTool.showOverlayWindow();}} else {//화면 공유 기능은 실제 디바이스에서만 테스트 가능ReplayKitLauncher.launchReplayKitBroadcast(iosExtensionName);}}