Swift 应用程序中的 AVPlayer 问题

Posted

技术标签:

【中文标题】Swift 应用程序中的 AVPlayer 问题【英文标题】:Issue with AVPlayer in Swift application 【发布时间】:2018-02-07 17:36:34 【问题描述】:

我得到一个带有 AVCaptureMovieFileOutput 类的 mp4 视频并将其保存在应用程序的 Documents 文件夹下,但是当我尝试使用 AVPlayer 类播放视频时,我在自定义 UIView 中什么也看不到。代码下方:

player = AVPlayer(url: videoURL)
let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = videoView.bounds
videoView.layer.addSublayer(playerLayer)
player.play()

我尝试将视频保存在相机胶卷中,我可以正确看到图库下的视频。

编辑:

let path = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let url = NSURL(fileURLWithPath: path.absoluteString)
if let pathComponent = url.appendingPathComponent("video.mp4") 
  let filePath = pathComponent.path
  let fileManager = FileManager.default
  if fileManager.fileExists(atPath: filePath) 
     print("FILE AVAILABLE")
   else 
     print("FILE NOT AVAILABLE")
  
 else 
  print("FILE PATH NOT AVAILABLE")

我尝试了上面的代码,输出是“FILE AVAILABLE”。该文件存储在此路径下:/var/mobile/Containers/Data/Application/27BDD2E1-815B-422B-96A9-E166BE154950/Documents/video.mp4

有人可以帮我找到解决这个问题的方法吗?

【问题讨论】:

你如何构造你传递给AVPlayerURL 我从 'AVCaptureMovieFileOutput' 对象中获得了 'URL'。 我遇到了这个问题,一个hacky的解决方案是将"file://"(如果没有)添加到url的开头(类似于let url = URL(string: "file://\(pathComponent.path)"))。不知道解决它的“正确”方法是什么,但它对我有用 @LëshaTurkowski 我尝试了两种模式,但结果是一样的:黑色视图(作为背景颜色就座)。 【参考方案1】:

尝试使用 Apple 自己的示例 - 使用以下 PlayerView 类:

import AVFoundation
import UIKit

class PlayerView: UIView 
    var player: AVPlayer? 
        get 
            return playerLayer.player
        
        set 
            playerLayer.player = newValue
        
    

    var playerLayer: AVPlayerLayer 
        return layer as! AVPlayerLayer
    

    // Override UIView property
    override static var layerClass: AnyClass 
        return AVPlayerLayer.self
    

然后将其设置为videoView 属性:

let videoView = PlayerView()

然后使用它:

videoView.player = AVPlayer(url: videoURL)
videoView.player?.play()

【讨论】:

@LuigiMargheritti 很好,它适用于其他所有人 - 这一定意味着问题出在您创建 URL 的方式上 - 使用与此相关的代码更新问题 我添加了检查文件可用性的代码。我尝试下载 MP4 文件并将其添加为项目的资源。它没有启动。

以上是关于Swift 应用程序中的 AVPlayer 问题的主要内容,如果未能解决你的问题,请参考以下文章

iOS Swift - 嵌入在 UITableViewCell 中的 AVPlayer

在 AVPlayer [Swift] 中播放 MPMediaItemCollection 中的项目

swift中的AVPlayer状态监听器

swift中的 AVPlayerViewController 和 AVPlayer 不显示任何内容

Swift 应用程序上的 AVPlayer 显示黑屏,但在播放视频时播放音频

如何在 Swift3 iOS 中以特定时间在 AVPlayer 中播放视频