如何以编程方式录制IOS屏幕

如何以编程方式录制IOS屏幕,ios,swift,screen,recording,Ios,Swift,Screen,Recording,有没有办法以编程方式记录IOS屏幕。表示您正在执行的任何活动,如单击按钮、滚动表格视图 即使正在播放的视频将与其他活动一起再次捕获 你试过这些吗 但这些图书馆无法提供高质量的视频。我需要高质量的视频 问题是,当我捕获屏幕时,在后台播放视频时,它不会显示平滑的视频。它显示一帧视频,然后在3-4秒后显示第二帧,依此类推。此外,视频质量也不好,其模糊性请查看ScreenCaptureView,它内置了视频录制支持(请参见链接) 这样做的目的是将UIView的内容保存到UIImage。作者建议您可以

有没有办法以编程方式记录IOS屏幕。表示您正在执行的任何活动,如单击按钮、滚动表格视图

即使正在播放的视频将与其他活动一起再次捕获

你试过这些吗

  • 但这些图书馆无法提供高质量的视频。我需要高质量的视频


    问题是,当我捕获屏幕时,在后台播放视频时,它不会显示平滑的视频。它显示一帧视频,然后在3-4秒后显示第二帧,依此类推。此外,视频质量也不好,其模糊性

    请查看ScreenCaptureView,它内置了视频录制支持(请参见链接)

    这样做的目的是将UIView的内容保存到UIImage。作者建议您可以通过AVCaptureSession传递帧来保存正在使用的应用程序的视频

    我相信它还没有经过OpenGL子视图的测试,但是假设它可以工作,你可以稍微修改一下它以包含音频,然后就可以设置了

    AVCaptureSession示例


    从iOS 9开始,似乎可以使用ReplayKit来大大简化这一过程

    更新:由于iOS 11内置了屏幕记录器,这一点可能不太重要,但以下Swift 3代码对我很有用:

    import ReplayKit
    
    @IBAction func toggleRecording(_ sender: UIBarButtonItem) {
        let r = RPScreenRecorder.shared()
    
        guard r.isAvailable else {
            print("ReplayKit unavailable")
            return
        }
        
        if r.isRecording {
            self.stopRecording(sender, r)
            
        }
        else {
            self.startRecording(sender, r)
        }
    }
    
    func startRecording(_ sender: UIBarButtonItem, _ r: RPScreenRecorder) {
        
        r.startRecording(handler: { (error: Error?) -> Void in
            if error == nil { // Recording has started
                sender.title = "Stop"
            } else {
                // Handle error
                print(error?.localizedDescription ?? "Unknown error")
            }
        })
    }
    
    func stopRecording(_ sender: UIBarButtonItem, _ r: RPScreenRecorder) {
        r.stopRecording( handler: { previewViewController, error in
    
            sender.title = "Record"
            
            if let pvc = previewViewController {
    
                if UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiom.pad {
                    pvc.modalPresentationStyle = UIModalPresentationStyle.popover
                    pvc.popoverPresentationController?.sourceRect = CGRect.zero
                    pvc.popoverPresentationController?.sourceView = self.view
                }
    
                pvc.previewControllerDelegate = self
                self.present(pvc, animated: true, completion: nil)
            }
            else if let error = error {
                print(error.localizedDescription)
            }
            
        })
    }
    
    // MARK: RPPreviewViewControllerDelegate
    func previewControllerDidFinish(_ previewController: RPPreviewViewController) {
        previewController.dismiss(animated: true, completion: nil)
    }
    

    ReplayKit是可用的,虽然不允许您访问结果视频,但到目前为止,我发现的唯一方法是制作大量屏幕截图(将其存储在图像阵列中),然后将这些图像转换为视频,但从性能角度来看,效率不高,但是,当你不需要30/60 fps的屏幕录制时,它可能会起作用,并且可以使用6-20 pfs。以下是。

    您可以使用此库记录视图:可在GitHub上使用Objective C编写

    **And to use it in swift:**
    
    --> Drag and drop the .m and .h files in your xcode project.
    
    --> Make a header file and import the this file in that : *#import "IAScreenCaptureView.h"*
    
    --> Then give a View this class from the PropertyInspector and then make a IBOutlet for that view . Something like this:
    *@IBOutlet weak var contentView: IAScreenCaptureView!*
    
    --> Then Finally just simply start and stop the recording of the view where ever and when ever you want and for that the code will be like this :
    
    For Starting the Recording : *contentView.startRecording()*
    For Stoping the Recording : *contentView.stopRecording()*
    
    
    //Hope this helps.Happy coding.  \o/ , ¯\_(ツ)_/¯ ,(╯°□°)╯︵ ┻━┻
    

    第二个图书馆制作的视频样本对我来说似乎很好。请更详细地解释问题是什么问题是,当我捕获屏幕时,在后台播放视频时,它不会显示平滑的视频。它显示一帧视频,然后在3-4秒后显示第二帧,依此类推。而且视频的质量也不好,它模糊了。您能告诉我您使用的是哪一个库吗?还有一个问题,我在使用ASCreenRecorder时遇到,它只记录了2秒钟,我不知道为什么!!此外,我在ASScreenRecorder.m文件-->BOOL success=[\u avAdaptor appendPixelBuffer:pixelBuffer With PresentationTime:time]中的代码崩溃;这不是使用stackoverflow的方式。你在一个问题中提出了许多不同的问题。编辑此问题或删除此问题并添加新问题添加所有这些详细信息:1。清楚地描述你想要达到的目标。2.演示执行此操作的尝试的示例代码。3.此方法的问题/错误列表。4.任何相关控制台日志或错误。“我要崩溃了”不是任何人都可以帮助你的,我们需要知道错误,它在哪里,并看到它周围的代码。由于这些问题,这个问题目前有几张投票关闭它。我也尝试过这个问题,因为我是新手,所以Stackoverflow限制我只发布2个链接。你可以使用默认的iOS框架AVFouncation框架,而不是第三方框架,还有一个问题我在ASScreenRecorder上遇到,它只记录了2秒,我不知道为什么!!很早以前就更新了。。。请尝试苹果的Framework,而不是第三方。我不想录制相机,而是想录制屏幕。您能告诉我如何录制屏幕上显示的特定视图内容作为视频。使用回放工具包,我指的不是整个视图(屏幕)但是只有一个特定的视图,因为这些链接显示了如何记录全屏,而不是特定的视图。任何有关这方面的帮助都将不胜感激,提前感谢!那很有用,谢谢。我在iPad Pro上试过,它非常完美。值得注意的是,ReplayKit在像iPhone5这样的旧设备上不起作用(isAvailable=false)。我也在模拟器中尝试过,isAvailable为true,但是stopRecording从不调用模拟器中的完成回调(iOS 11.4,Xcode 9.4.1)。这里有一条关于类似问题的线索:已经有一段时间了,但为了以防万一,这个解决方案在iOS 14/Swift 5中非常有效。只需确保导入它即可。谢谢这是记录特定视图的代码,即您可以记录主视图或主视图上的哪个UIView。是否缺少ImageUtils类?这是我们将视频录制为图像的主要部分。在您提供的页面中找不到它。
    **And to use it in swift:**
    
    --> Drag and drop the .m and .h files in your xcode project.
    
    --> Make a header file and import the this file in that : *#import "IAScreenCaptureView.h"*
    
    --> Then give a View this class from the PropertyInspector and then make a IBOutlet for that view . Something like this:
    *@IBOutlet weak var contentView: IAScreenCaptureView!*
    
    --> Then Finally just simply start and stop the recording of the view where ever and when ever you want and for that the code will be like this :
    
    For Starting the Recording : *contentView.startRecording()*
    For Stoping the Recording : *contentView.stopRecording()*
    
    
    //Hope this helps.Happy coding.  \o/ , ¯\_(ツ)_/¯ ,(╯°□°)╯︵ ┻━┻