91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS開發中音頻視頻播放的簡單實現方法

發布時間:2020-09-11 09:03:39 來源:腳本之家 閱讀:217 作者:Mazy_ma 欄目:移動開發

前言

我們在平時的iOS開發中,音視頻的播放有很多種,目前系統的自帶的都屬于 AVFoundation 框架,更加接近于底層,所以靈活性很強,更加方便自定義

還有就是第三方音視頻視頻播放,特點是功能強大,實現簡單,支持流媒體,下面來逐一介紹,給大家參考學習,下面來一起看看詳細的介紹吧。

播放系統音效或者短音效

注意:

  • 這里的資源長度最多30秒
  • 資源必須在 Target --> Build Phases --> Copy Bundle Resources 引入資源文件,否則獲取不到文件
if let soundURL = Bundle.main.url(forResource: "sourceName", withExtension: "wav") {
 var mySound: SystemSoundID = 0
 AudioServicesCreateSystemSoundID(soundURL as CFURL, &mySound)
 // Play
 AudioServicesPlaySystemSound(mySound);
}

播放音樂 - AVAudioPlayer

  • 資源必須在 Target --> Build Phases --> Copy Bundle Resources 引入資源文件,否則獲取不到文件
  • 支持多種音頻格式,而且能夠進行進度、音量、播放速度等控制。

定義一個播放器屬性

// 定義一個播放器屬性
fileprivate var player: AVAudioPlayer?

初始化并開始播放音樂

func playMusic() {

 // 2.獲取對應音樂資源
 guard let fileUrl = Bundle.main.url(forResource: "309769", withExtension: "mp3") else {
  return }
 // 3.創建對應的播放器
 do {
  player = try AVAudioPlayer(contentsOf: fileUrl)
 } catch {
  print(error)
 }

 // 設置代理監聽播放完成
 player?.delegate = self

 // 4.準備播放
 player?.prepareToPlay()

 // 5.播放音樂
 player?.play()
}

停止、暫停

// 停止、暫停
player?.stop()

監聽 AVAudioPlayer 播放完成

// MARK: - AVAudioPlayerDelegate
extension ViewController: AVAudioPlayerDelegate {
 /// 完成播放
 func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
  if flag {
   print("播放完成")
  }
 }
}

使用 AVPlayer 進行視頻的播放

AVPlayer的對象要設置為全局的,否則會播放不成功

AVPlayer存在于AVFoundation中,可以播放音樂、本地音頻和流媒體播放

但是它對視屏有很高自由度的控制,而且能夠自定義視屏播放界面

通過通知監聽播放的進度及相關參數

AVPlayer三要素

  • AVPlayerItem(提供數據,設置數據源)
  • AVPlayer(負責控制播放,暫停、播放、指定時間播放等)
  • AVPlayerLayer(負責顯示如果缺少就只有聲音沒有視頻)
func playVideo() {
 // 1.創建AVPlayer
 guard let url = URL(string: "http://baobab.wdjcdn.com/14559682994064.mp4") else { return }

 // 2.創建播放器
 // 提供數據,設置數據源
 let item = AVPlayerItem(url: url)
 // 負責控制播放,暫停、播放、指定時間播放等
 let player = AVPlayer(playerItem: item)

 // 3.創建圖層,負責顯示
 let layer = AVPlayerLayer(player: player)
 layer.frame = playerView.bounds
 playerView.layer.addSublayer(layer)

 // 4.播放視頻
 player.play()
}

使用 IJKMediaFramework 進行視頻的播放

ijkPLayer是Bilibili基于ffmpeg開發并開源的輕量級視頻播放器,支持播放本地網絡視頻,也支持流媒體播放

功能很強大,支持視頻的軟解碼和硬解碼

手動導入 IJKMediaFramework.framework SDK, 添加 libz.tbd依賴

import IJKMediaFramework

初始化播放器并進行播放

func playVideoByIJKPlayer() {

 // 1.設置配置,打開硬解碼
 let options = IJKFFOptions.byDefault()
 options?.setOptionIntValue(1, forKey: "videotoolbox", of: kIJKFFOptionCategoryPlayer)

 // 2.初始化播放器
 guard let ijkPlayer = IJKFFMoviePlayerController(contentURLString: "http://baobab.wdjcdn.com/14559682994064.mp4", with: options) else { return }
 ijkPlayer.view.frame = playerView.bounds
 playerView.addSubview(ijkPlayer.view)

 // 3.開始進行播放
 ijkPlayer.prepareToPlay()
}

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南汇区| 苍山县| 高淳县| 富平县| 福贡县| 定边县| 洪江市| 云阳县| 呼伦贝尔市| 琼海市| 望都县| 诏安县| 百色市| 阿拉善左旗| 石河子市| 溧阳市| 嘉峪关市| 额济纳旗| 喀喇沁旗| 闽清县| 法库县| 饶河县| 屯留县| 固始县| 肇源县| 南涧| 剑河县| 博客| 分宜县| 洛宁县| 周宁县| 方正县| 维西| 崇左市| 汪清县| 商洛市| 文登市| 永年县| 黄石市| 斗六市| 西丰县|