AVKit 播放(AVFoundation, AVKit, 音視頻, Swift 4, 配代碼)

音視頻,簡單點,上手就用,當然是 AVKit.
更加靈活的控制,就要用到 AVFoundation 了。


要點:

  • 使用資源(一般就是照片庫裏面的視頻,圖片,live photo),
  • 播放,
  • 編輯,
  • 捕捉(拍照和錄視頻)
  • 導出資源(就處理過的資源,拍的照片,編輯的視頻,導出到相冊)

AVFoundation , 視頻的加載與導出,大量使用異步。
簡單的發消息, 肯定是不行的。阻塞當前線程, 卡頓很久很久。
AVFoundation 就是爲了充分利用64位的硬件和多線程設計的。


首先是播放,

播放本地的視頻文件, 和遠程的視頻與流媒體。

本地文件,單個播放

先講 AVKit 裏面的 AVPlayerViewController.
AVPlayerViewController 是 ViewController 的子類,

AVPlayerViewController

AVPlayerViewController 在 TV OS 上,非常強大。(本文僅介紹 iOS 平臺下)

AVPlayerViewController 裏面有很多播放的控件。
回播中,就是播放本地文件中,可以播放、暫停、快進、快退,調整視頻的長寬比例( 即畫面在屏幕中適中,或者鋪滿屏幕)。

播放視頻,蘋果設計的很簡單,代碼如下:

    //  拿一個 url , 建立一個 AVPlayer 實例
    let player = AVPlayer(url: "你的 url")
    //  再建立一個 AVPlayerViewController 實例
    let playerViewController = AVPlayerViewController()
    
    playerViewController.player = queuePlayer
    
    present(playerViewController, animated: true) {
        playerViewController.player!.play()
    }// 這裏有一個閉包, 出現了,再播放。

本地文件,多個連續播放

連着放,使用 AVQueuePlayer,把多個視頻放在一個視頻隊列中,依次連續播放
AVQueuePlayer 是 AVPlayer 的子類。
按順序,播放多個資源。
AVQueuePlayer

AVPlayerItem 包含很多視頻資源信息,除了資源定位 URI , 還有軌跡信息,視頻的持續時長等。

蘋果文檔上說, AVPlayerItem 用於管理播放器播放的資源的計時和呈現狀態。他有一個 AVAsset 播放資源的屬性。

   var queue = [AVPlayerItem]()   
   let videoClip = AVPlayerItem(url: url)
   queue.append(videoClip)
    //   queue 隊列可以繼續添加 AVPlayerItem 實例
    let queuePlayer = AVQueuePlayer(items: queue)

    let playerViewController = AVPlayerViewController()
    playerViewController.player = queuePlayer
    
    present(playerViewController, animated: true) {
        playerViewController.player!.play()
    }

iPad 中的畫中畫功能

iPad 中的畫中畫功能,通過給 AVAudioSession 支持後臺音效,
AppdelegatedidFinishLaunchingWithOptions 中添加下面的這段代碼,使用後臺模式,
首先在Xcode 的 target 的 Capability 中勾選相關的後臺功能。

    let session = AVAudioSession.sharedInstance()
    do {
        try session.setCategory(AVAudioSessionCategoryPlayback)
        try session.setActive(true)
    } catch let error {
        print("AVFoundation configuration error: \(error.localizedDescription) \n\n AV 配置 有問題")
    }
    // 很有必要這樣,因爲畫中畫的視頻功能,apple 是當後臺任務處理的。

流媒體播放和網絡視頻播放

本地的資源路徑 URL ,替換爲網絡的 URL, 就可以了。

優化,播放完成後,退出播放界面

   override func viewDidLoad() {
        super.viewDidLoad()
        // 添加播放完成的監聽
        NotificationCenter.default.addObserver(self, selector: #selector(playerItemDidReachEnd), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)
    }

  //  執行退出的界面控制
   @objc func playerItemDidReachEnd(){
        self.presentedViewController?.dismiss(animated: true, completion: {})
    }

代碼見: https://github.com/BoxDengJZ/...

More:

其次是設置捕捉的 session ,並預覽。

設置前後攝像頭,聚焦與曝光,拍照(靜態圖片)


接下來,是導出拍的視頻文件( movie file )。

怎麼設置聚焦


還有視頻的合成,將多個視頻片段合成爲一個視頻文件。


最後是,關於給視頻添加圖形覆蓋和動畫。


推薦資源:
AVFoundation Programming Guide 蘋果文檔

視頻教程

大佬博客, AVPlayer 本地、網絡視頻播放相關

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章