当前位置: 首页 > 知识库问答 >
问题:

在UIView中嵌入AVPlayerViewController,循环并在景观中显示全屏

侯善
2023-03-14

我有一个名为EchoTools的超声波参考应用程序,在那里我循环MP4视频使用下面的Swift 5代码在故事板上的UIView元素中。这个应用程序是垂直定向的,但我想显示全屏控件,可以扩展视频并旋转到横向。

class VideoPlayerLooped {

    public var videoPlayer:AVQueuePlayer?
    public var videoPlayerLayer:AVPlayerLayer?
    var playerLooper: NSObject?
    var queuePlayer: AVQueuePlayer?

    func playVideo(fileName:String, inView:UIView)
    {
        if let path = Bundle.main.path(forResource: fileName, ofType: "mp4")
        {

            let url = URL(fileURLWithPath: path)
            let playerItem = AVPlayerItem(url: url as URL)
            _ = try? AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback, mode: .default, options: .mixWithOthers)
            videoPlayer = AVQueuePlayer(items: [playerItem])
            videoPlayer?.isMuted = true
            videoPlayer?.preventsDisplaySleepDuringVideoPlayback = false
            playerLooper = AVPlayerLooper(player: videoPlayer!, templateItem: playerItem)
            videoPlayerLayer = AVPlayerLayer(player: videoPlayer)
            videoPlayerLayer!.frame = inView.bounds
   
            inView.layer.addSublayer(videoPlayerLayer!)

            videoPlayer?.play()
        }
    }

    func remove()
    {
        videoPlayerLayer?.removeFromSuperlayer()
    }
}

我的理解是,可能需要AVPlayerViewController,但是否可以修改现有代码,以便在仍包含AVPlayerViewController固有控件的情况下按默认方式显示视频(纵向,循环)?

有人能发出的任何光芒都将受到最大的赞赏。到目前为止,我试图寻找解决方案并修改代码,但收效甚微。

共有1个答案

侯涵煦
2023-03-14

在VideoPlayerLooped类中创建一种以横向模式旋转视频的方法:

func degreeToRotate(_ x: CGFloat) -> CGFloat {
    return .pi * x / 180.0
}

并在playVideo(fileName:String,inView:UIView)方法中添加以下代码行,以调用degreeToRotate()方法并在横向模式下旋转视频:

let affineTransform = CGAffineTransform(rotationAngle: degreeToRotate(90))\
videoPlayerLayer?.setAffineTransform(affineTransform)
 类似资料:
  • 我的Android应用程序需要显示一个全屏位图作为背景,然后在上面使用OpenGL ES显示一些动态的3D图形(1.1或2.0--尚未决定)。背景图像是同一个应用程序中WebView组件的快照,因此它的尺寸已经完全适合屏幕。 我是OpenGL新手,但我知道显示位图的常规方法包括将其缩放成一个POT纹理(glTexImage2D)、配置矩阵、为矩形创建一些顶点并使用GLDraWarrays来显示。似

  • 我用For创建了一个嵌套循环,这是程序代码和输出,然后我尝试了同时循环,得到了不同的结果 对于 虽然 请引导我。。谢谢

  • 问题内容: 我有一个使用javafx Scene来渲染某些东西的应用程序,并且我想将该渲染结果放入我在Javafx中创建的某些GUI中。我该怎么做? 基本上,有一些容器可以放入场景,然后将其放入GUI。 抱歉,如果是新手问题,我是JavaFX的新手 问题答案: 该场景只有一个顶级父节点作为根。您可以获取它并放入另一个场景。

  • 制作一个单页的WordPress主题。使用此循环调用所有页面并将其显示为部分(html5标记): 这将创建一个基于页面的漂亮的小循环部分。我唯一关心的是:其中一个“页面”/部分应该显示一些博客文章。正在寻找一种基本上在循环中创建循环的方法——可以随页面一起重新排序。 所以我想我的问题是: 这段代码看起来像什么 谢谢

  • 问题内容: 如果我在一个循环中有一个循环,并且一旦满足一条语句,我想中断主循环,那我应该怎么做? 这是我的代码: 问题答案: 使用标记的中断: 另请参阅 Java代码中的“循环:”。 这是什么,为什么会编译? 文献资料

  • 问题内容: 当用户在inputAccessoryView中点击“附加”按钮时,我想通过键盘创建一个简单的视图。像这样: 有简单的方法吗?或者我应该创建我的自定义键盘? 问题答案: 您可以将该新子视图添加到您的应用程序窗口。