【问题标题】:Swift: AVPlayer playing video is showing this error: [AVOutputContext] WARNING: AVF context unavailable for sharedAudioPresentationContextSwift:AVPlayer 播放视频显示此错误:[AVOutputContext] WARNING: AVF context available for sharedAudioPresentationContext
【发布时间】:2018-03-18 16:15:34
【问题描述】:

我正在尝试从捆绑目录播放视频,但出现此错误:

视频[29054:2968406] [MediaRemote] [AVOutputContext] 警告:AVF sharedAudioPresentationContext 的上下文不可用

这是我的实现:

import UIKit
import AVKit
import AVFoundation


class ViewController: UIViewController {
    var playerVC = AVPlayerViewController()
    var playerView = AVPlayer()

    override func viewDidLoad() {
        super.viewDidLoad()
        self.playVideo()

    }


    func playVideo() {
        let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last! as NSURL
        guard let fileURL  = documentsDirectory.appendingPathComponent("video.mp4") else{ return }
        self.playerView = AVPlayer(url:fileURL as URL)
        self.playerVC.player = playerView
        self.view.addSubview(self.playerVC.view)
        self.addChildViewController(self.playerVC)
        playerView.play()

    }

你们中的任何人都知道我做错了什么吗?非常感谢您的帮助。

【问题讨论】:

  • 我有同样的问题......但不是所有的视频。只有部分视频有这个问题。也许尝试另一个视频文件。
  • 我也有同样的问题
  • 这里有同样的问题-_-
  • 你有没有机会找到解决方案?
  • 这个问题你解决了吗?

标签: ios swift avplayer avplayerviewcontroller avplayerview


【解决方案1】:

这是我的实现。对我来说效果很好。

import UIKit
import AVFoundation

class ViewController: UIViewController {
    var playerViewController = AVPlayerViewController()
    var player = AVPlayer()


override func viewDidLoad() {
    super.viewDidLoad()
    self.playVideo()

}


func playVideo () {
   //creating your document folder url
    if let documentsDirectoryURL =  FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {
        // creating your destination folder url
        let destinationUrl = documentsDirectoryURL.appendingPathComponent("video.mp4")
        self.player = AVPlayer(url: destinationUrl)
        self.playerViewController.player = self.player
        self.playerViewController.view.frame = self.view.frame
        self.view.addSubview(self.playerViewController.view)
        self.playerViewController.player?.play()
    }
}
}

希望对你有帮助!!

【讨论】:

    【解决方案2】:

    我对存储在设备上的 mp4 文件有类似的问题,通过在文件路径前添加“file://”得到了修复

     guard let strPath = Bundle.main.path(forResource: "demo", ofType: "mp4"), let url = URL(string: "file://\(strPath)") else {
            print("Umm, looks like an invalid URL!")
            return
        }
    

    灵感来自this post

    【讨论】:

      【解决方案3】:
      import UIKit
      import AVKit
      import AVFoundation
      
      
      class ViewController: UIViewController {
          var playerVC = AVPlayerViewController()
          var playerView = AVPlayer()
      
          override func viewDidLoad() {
              super.viewDidLoad()
      
          }
      
      override func viewDidAppear(_ animated: Bool) {
      
             let fileURL = NSURL(fileURLWithPath: "video.mp4")
      
              playerView = AVPlayer(url: fileURL as URL)
              playerViewController.player = playerView
              self.present(playerViewController, animated: true) {
              self.playerViewController.player?.play()
              }
          }
      

      【讨论】:

      • 想解释一下你的答案吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-08
      • 1970-01-01
      相关资源
      最近更新 更多