투케이2K

383. (ios/swift5) RPScreenRecorder 사용해 애플리케이션 화면 녹화 수행 실시 - App Record 본문

IOS

383. (ios/swift5) RPScreenRecorder 사용해 애플리케이션 화면 녹화 수행 실시 - App Record

투케이2K 2023. 12. 2. 13:03

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT5

 

[소스 코드]

 
    // -----------------------------------------------------------------------------------------
    // MARK: - [테스트 메인 함수 정의 실시]
    // -----------------------------------------------------------------------------------------
    func testMain() {
        S_Log._D_(description: "테스트 함수 시작 실시", data: nil)
        
        
        /*
         ------------------------------------
         [요약 설명]
         ------------------------------------
         1. 필요 info plist :
         
         Privacy - Photo Library Additions Usage Description
         ------------------------------------
         2. 필요 Delegate :
         
         RPPreviewViewControllerDelegate
         
         ex : class A_Webview: UIViewController, RPPreviewViewControllerDelegate { }
         ------------------------------------
         2. 필요 Import :
         
         import ReplayKit
         -----------------------------------
         3. 제약 조건 :
         
         ReplayKit 은 iOS 9 이후 버전에서 사용 가능한 화면 공유 기술
         해당 앱 내에서의 활동을 기록 하며, 앱을 벗어나면 녹화 안됨
         ------------------------------------
         */
        
        
        // ---------------------------------------------
        // [로직 처리 실시]
        // ---------------------------------------------
        //*
        DispatchQueue.main.async { // [비동기 요청]
            
            // [RPScreenRecorder 선언]
            let recorder = RPScreenRecorder.shared()
            
            // [화면 공유 설정 지정]
            recorder.isMicrophoneEnabled = true // [마이크]
            recorder.isCameraEnabled = true // [카메라]
            
            // [화면 녹화 수행]
            recorder.startRecording(handler: { (error) in
                if let unwrappedError = error {
                    S_Log._D_(description: "[Error] : startRecording", data: ["\(unwrappedError.localizedDescription)"])
                } else {
                    S_Log._D_(description: "[Success] : startRecording", data: nil)
                    
                    DispatchQueue.main.asyncAfter(deadline: .now() + 10) { // [10초 시간 설정]
                        
                        recorder.stopRecording { [unowned self] (preview, error) in
                            if let unwrappedPreview = preview {
                                unwrappedPreview.previewControllerDelegate = self   // 녹화 종료 버튼을 눌렀을 경우 Preview 화면이 출력됩니다.
                                self.present(unwrappedPreview, animated: true, completion: nil)
                                
                                S_Log._D_(description: "[Success] : stopRecording Preview Display", data: nil)
                            }
                            if let unwrappedError = error {
                                S_Log._D_(description: "[Error] : stopRecording", data: ["\(unwrappedError.localizedDescription)"])
                            }
                        }
                        
                    }
                }
            })
            
        }
        // */
        // ---------------------------------------------

    }
    
    
    
    
    
    // -----------------------------------------------------------------------------------------
    // MARK: - [RPPreviewViewControllerDelegate] : ReplayKit 으로 녹화를 종료하고 녹화된 동영상의 Preview 를 보여주는 화면에서 "취소" 버튼이나 "저장" 버튼을 눌렀을 때 호출되는 함수
    // -----------------------------------------------------------------------------------------
    func previewControllerDidFinish(_ previewController: RPPreviewViewController) {
        S_Log._D_(description: "녹화 종료 프리뷰 [취소] 및 [저장] 버튼 클릭 이벤트 발생", data: nil)
        previewController.dismiss(animated: true)
    }
 

[결과 출력]

 


반응형
Comments