2017-08-25 110 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 
     } 
    } 
}