iOS視頻錄制與播放

畢業(yè)后一直在搞 SDK 開發(fā),說真的,對面 UI 層的知識完全不重視,但工作不是不學(xué)習(xí)的理由,現(xiàn)在空閑時間,補全下自己對 UI 層的基礎(chǔ),也順便熟悉下 Swift。

首先 Demo 點這里 ,整個工程也就一個頁面,四十行的代碼:

圖片.png

視頻錄制

這里使用UIImagePickerController進行視頻錄制,這里其實很簡單,主要就是配置下相關(guān)的參數(shù),因為UIImagePickerController可以實現(xiàn)拍照、錄制視頻、獲取相冊照片和視頻等功能:

private lazy var picker: UIImagePickerController = {
        var picker = UIImagePickerController()
        picker.mediaTypes = [kUTTypeMovie as String]
        picker.sourceType = .camera
        picker.cameraCaptureMode = .video
        picker.delegate = self
        return picker
    }()

這里直接使用懶加載的方式設(shè)置picker,我想,很多從oc轉(zhuǎn)到swift時,肯定會糾結(jié)如何實現(xiàn)setter和懶加載這個問題,我承認(rèn)我也入坑過~~~

在頁面實現(xiàn)一個點擊按鈕進行錄制跳轉(zhuǎn):

@IBAction func recordVideo(_ sender: AnyObject) {
    present(picker, animated: true, completion: nil)
}

這樣,一個簡單的錄制功能就已經(jīng)完成了,但我們還是需要監(jiān)聽下錄制完成或者取消錄制的回調(diào),從而獲取所需的值:

// MARK: - UIImagePickerControllerDelegate
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
    picker.dismiss(animated: true, completion: nil)
}
    
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    videoUrl = info[UIImagePickerControllerMediaURL] as! URL?
    picker.dismiss(animated: true, completion: nil)
}

這里在錄制完成后,獲取保存的url進行訪問。如果 ViewController 內(nèi)容太多,這里是建議通過extension ViewController 來實現(xiàn)對應(yīng)的delegate的回調(diào)方法:

extension ViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    // MARK: - UIImagePickerControllerDelegate
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        picker.dismiss(animated: true, completion: nil)
    }
    
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        videoUrl = info[UIImagePickerControllerMediaURL] as! URL?
        picker.dismiss(animated: true, completion: nil)
    }
}

但這里需要注意的是,如果用 extension 時,就要把 videoUrl 的 private 改為 fileprivate。

視頻播放

錄制完成后,就可以使用獲得的視頻url進行播放:

private lazy var playVC: AVPlayerViewController = AVPlayerViewController()

@IBAction func playVideo(_ sender: AnyObject) {      
    if videoUrl != nil {
        let player = AVPlayer(url: videoUrl!)
        playVC.player = player
        present(playVC, animated: true, completion: nil)
    }
}

這里一樣使用了lazy的方法,這里就說明什么使用lazy,用過oc的應(yīng)該懂的。還有,這里使用的雖然是剛才錄制的視頻,但其它的本地視頻文件也是一樣的,傳相應(yīng)url就可以了,但并不是所有格式的視頻都能解碼,詳細(xì)可以看下官方文檔的說明,這里就不詳細(xì)介紹了。

擴展

UIImagePickerController 是實現(xiàn)照片視頻拍攝的,還能獲取本地照片和視頻,看下UIImagePickerControllerSourceType:

public enum UIImagePickerControllerSourceType : Int {

    
    case photoLibrary // 圖庫

    case camera  // 相機

    case savedPhotosAlbum  // 相冊
}

UIImagePickerControllerCameraCaptureMode:

public enum UIImagePickerControllerCameraCaptureMode : Int {

    
    case photo   // 拍攝照片

    case video  // 錄制視頻
}

通過設(shè)置相應(yīng)的參數(shù),就可以實現(xiàn)不同的功能,這里就不一一說了,直接看下UIImagePickerController相應(yīng)的api應(yīng)該就可以了。

小結(jié)

工作不是不學(xué)習(xí)的理由,你會就是會,不會就是不會。千里之行,始于足下。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容