Swift: AVPlayer播放视频时显示此错误:[AVOutputContext]警告:共享音频呈现上下文不可用的AVF上下文。

37

我试图从捆绑目录播放视频,但是出现了以下错误:

video[29054:2968406] [MediaRemote] [AVOutputContext] WARNING: AVF context unavailable for sharedAudioPresentationContex

这是我的实现:

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()

    }

你们中有谁知道我做错了什么吗?我真的很感激你们的帮助。


1
我有同样的问题...但并非所有视频都有这个问题。只有一些视频存在此问题。也许尝试另一个视频文件。 - Skyborg
1
我也遇到了同样的问题。 - Karan Alangat
1
同样的问题在这里 -_- - MohyG
1
你有没有找到解决方案的机会? - Ali Faris
1
你解决了这个问题吗? - CocaCola
1
你是在模拟器上尝试吗?你可能需要在设备上进行测试。 - mmm
3个回答

1
我曾遇到存储在设备上的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
    }

这篇帖子的启发。

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()
    }
}
}

希望这能帮助到您!

-4
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()
        }
    }

能否解释一下你的答案? - Nick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接