程序员小葛 2025-03-25 20:41 采纳率: 0%
浏览 18

ios端如何实现pip画中画在打开相机拍摄时还能继续播放

问题:采用pip画中画技术开发,在pip画中画中放入自定义视图,文案写入视图中并设定滚动,达到悬浮窗显示文案滚动效果(已开发实现),但是当打开手机相机准备拍摄时,画中画停止播放,文案就消失了。停止播放是系统层面的拦截,但我希望自定义视图不要消失,并且还能滚动。应用市场有很多提词器应用都实现了这个效果,我想知道技术上是如何实现的?

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2025-03-25 20:41
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    解决方案

    iOS端实现pip画中画在打开相机拍摄时还能继续播放,可以使用AVCaptureVideoPreviewLayersetVideoGravity方法设置视频预览层的填充模式为.resizeAspectFill,这样可以使视频预览层填充整个屏幕,并且可以继续播放视频。

    在你当前的实现中,你可以在打开相机拍摄时,暂停pip画中画的播放,然后在相机拍摄完成后恢复播放。

    以下是一个示例代码:

    import AVFoundation
    
    // ...
    
    // 设置视频预览层的填充模式
    videoPreviewLayer.videoGravity = .resizeAspectFill
    
    // ...
    
    // 打开相机拍摄时暂停pip画中画的播放
    func startCameraCapture() {
        // ...
        videoPlayer.pause()
    }
    
    // 相机拍摄完成后恢复pip画中画的播放
    func stopCameraCapture() {
        // ...
        videoPlayer.play()
    }
    

    在上面的代码中,我们使用AVCaptureVideoPreviewLayersetVideoGravity方法设置视频预览层的填充模式为.resizeAspectFill,这样可以使视频预览层填充整个屏幕,并且可以继续播放视频。

    startCameraCapture方法中,我们暂停pip画中画的播放,以便在相机拍摄完成后恢复播放。

    stopCameraCapture方法中,我们恢复pip画中画的播放,以便继续播放视频。

    代码核心部分

    videoPreviewLayer.videoGravity = .resizeAspectFill
    

    重要提示

    在使用AVCaptureVideoPreviewLayer时,需要确保你已经获取了相机权限,并且已经设置了视频预览层的frame。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月25日