2017-08-25 116 views
0

我目前使用'AVKit'和'AVFoundation'来启用通过我的应用程序播放的视频,但我只能通过点击按钮启动视频来完成。但是我目前面临着一个问题,就是在我们启动iOS设备上的应用程序后立即开始播放视频片段等自动功能。Ios Swift 3在页面加载后自动播放视频

override func viewDidLoad() 
{ 
    super.viewDidLoad() 
    self.playingVideo() 
    self.nowPlaying(self) 
} 

@IBAction func nowPlaying(_ sender: Any) 
{ 
    self.present(self.playerController, animated: true, completion:{ 
    self.playerController.player?.play()     
}) 

后,我编译它,系统打印出:

警告:试图提出有关谁的观点是不是在窗口层次!

+0

向我们展示您的一点点代码 –

+1

从'viewDidAppear'或'viewWillAppear'调用'nowPlaying'。你会得到警告,因为当调用'viewDidLoad'时,视图刚刚被加载,而没有添加到视图层次结构 –

+0

所以你的问题是什么?播放视频或上述错误或其他? –

回答

0

请尝试以下工作代码。

import AVFoundation 
import UIKit 

class SomeViewController: UIViewController { 

    func openVideo() { 
     let playerController = SomeMediaPlayer() 
     playerController.audioURL = URL(string: "Some audio/video url string") 
     self.present(playerController, animated: true, completion: nil) 
    } 
} 

class SomeMediaPlayer: UIViewController { 
    public var audioURL:URL! 
    private var player = AVPlayer() 
    private var playerLayer: AVPlayerLayer! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.playerLayer = AVPlayerLayer(player: self.player) 
     self.view.layer.insertSublayer(self.playerLayer, at: 0) 
     let playerItem = AVPlayerItem(url: self.audioURL) 
     self.player.replaceCurrentItem(with: playerItem) 
    } 

    override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 
     self.player.play() 
    } 

    override func viewWillLayoutSubviews() { 
     super.viewWillLayoutSubviews() 
     self.playerLayer.frame = self.view.bounds 
    } 

    // Force the view into landscape mode if you need to 
    override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 
     get { 
      return .landscape 
     } 
    } 
}