Notice
Recent Posts
Recent Comments
Link
투케이2K
383. (ios/swift5) RPScreenRecorder 사용해 애플리케이션 화면 녹화 수행 실시 - App Record 본문
[개발 환경 설정]
개발 툴 : 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)
}
[결과 출력]



반응형
'IOS' 카테고리의 다른 글
Comments