首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReplayKit: RPScreenRecorder.shared().startCapture()不能工作

ReplayKit: RPScreenRecorder.shared().startCapture()不能工作
EN

Stack Overflow用户
提问于 2018-08-11 03:01:01
回答 2查看 3K关注 0票数 2

ReplayKit最近真的让我很沮丧。出于某种原因

代码语言:javascript
复制
RPScreenRecorder.shared().startCapture(handler: { (sample, bufferType, error) in

当我调用它时,实际上不起作用,因为我在其中有一个print()语句,而且它从未被调用过。

我在ViewController中的代码是:

代码语言:javascript
复制
import UIKit
import AVFoundation
import SpriteKit
import ReplayKit
import AVKit

class ViewController: UIViewController, AVCaptureVideoDataOutputSampleBufferDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate, RPPreviewViewControllerDelegate {

    var assetWriter:AVAssetWriter!
    var videoInput:AVAssetWriterInput!

func startRecording(withFileName fileName: String) {
        if #available(iOS 11.0, *)
        {

            assetWriter = try! AVAssetWriter(outputURL: fileURL, fileType:
                AVFileType.mp4)
            let videoOutputSettings: Dictionary<String, Any> = [
                AVVideoCodecKey : AVVideoCodecType.h264,
                AVVideoWidthKey : UIScreen.main.bounds.size.width,
                AVVideoHeightKey : UIScreen.main.bounds.size.height
            ];

            videoInput  = AVAssetWriterInput (mediaType: AVMediaType.video, outputSettings: videoOutputSettings)
            videoInput.expectsMediaDataInRealTime = true
            assetWriter.add(videoInput)
            print("HERE")
            RPScreenRecorder.shared().startCapture(handler: { (sample, bufferType, error) in
                print("RECORDING")
            }
      }
}

func stopRecording(handler: @escaping (Error?) -> Void)
    {
        if #available(iOS 11.0, *)
        {
            RPScreenRecorder.shared().stopCapture
                {    (error) in
                    handler(error)
                    self.assetWriter.finishWriting
                        {
                            print("STOPPED")
                    }
            }
        }
    }

“这里”是印刷的,而不是“录音”的。

附注:对不起,代码格式错误,我相信您会理解的:)

我也尝试过一种不同的方法:

代码语言:javascript
复制
let recorder = RPScreenRecorder.shared()
recorder.startRecording{ [unowned self] (error) in
    guard error == nil else {
        print("There was an error starting the recording.")
        return
    }
    print("Started Recording Successfully")
 }

为了停止录音..。

代码语言:javascript
复制
    recorder.stopRecording { [unowned self] (preview, error) in
        print("Stopped recording")
        guard preview != nil else {
            print("Preview controller is not available.")
            return
        }
        onGoingScene = true
        preview?.previewControllerDelegate = self
        self.present(preview!, animated: true, completion: nil)
    }

当我调用recorder.stopRecording()函数时,这个方法不会停止,“停止记录”永远不会被调用。

有人能帮我吗?因为这真的让我很沮丧,你怎么能正确地使用ReplayKit在iOS 11中记录你的屏幕呢?我在网上到处搜索,没有一种方法对我有用,我不知道为什么。我的Info.plist里有必要的许可密钥。

谢谢

EN

回答 2

Stack Overflow用户

发布于 2020-01-21 20:42:19

一个巨大的提醒,ReplayKit不工作在模拟器。我在同样的问题上浪费了几个小时,直到我意识到ReplayKit永远不会触发startCapture处理程序,因为它从不在模拟器中记录。

票数 5
EN

Stack Overflow用户

发布于 2018-10-08 06:40:28

这个问题没有多少可能的原因。其中一些人在这里:

  1. 您的重放工具包共享记录器可能会崩溃,因此可以重新启动设备并再次检查.
  2. 在您的重放套件中可能有可打印的问题。为此,请遵守RPScreenRecorderDelegate协议,并将Recording Changes screenRecorder:didStopRecordingWithPreviewViewController:error:方法添加到类中,并检查此方法中是否出现任何错误。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51796101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档