iOS開發(fā)中音頻視頻播放的簡單實現(xiàn)方法
前言
我們在平時的iOS開發(fā)中,音視頻的播放有很多種,目前系統(tǒng)的自帶的都屬于 AVFoundation 框架,更加接近于底層,所以靈活性很強,更加方便自定義
還有就是第三方音視頻視頻播放,特點是功能強大,實現(xiàn)簡單,支持流媒體,下面來逐一介紹,給大家參考學(xué)習(xí),下面來一起看看詳細(xì)的介紹吧。
播放系統(tǒng)音效或者短音效
注意:
- 這里的資源長度最多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.獲取對應(yīng)音樂資源
guard let fileUrl = Bundle.main.url(forResource: "309769", withExtension: "mp3") else {
return }
// 3.創(chuàng)建對應(yīng)的播放器
do {
player = try AVAudioPlayer(contentsOf: fileUrl)
} catch {
print(error)
}
// 設(shè)置代理監(jiān)聽播放完成
player?.delegate = self
// 4.準(zhǔn)備播放
player?.prepareToPlay()
// 5.播放音樂
player?.play()
}
停止、暫停
// 停止、暫停 player?.stop()
監(jiān)聽 AVAudioPlayer 播放完成
// MARK: - AVAudioPlayerDelegate
extension ViewController: AVAudioPlayerDelegate {
/// 完成播放
func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
if flag {
print("播放完成")
}
}
}
使用 AVPlayer 進行視頻的播放
AVPlayer的對象要設(shè)置為全局的,否則會播放不成功
AVPlayer存在于AVFoundation中,可以播放音樂、本地音頻和流媒體播放
但是它對視屏有很高自由度的控制,而且能夠自定義視屏播放界面
通過通知監(jiān)聽播放的進度及相關(guān)參數(shù)
AVPlayer三要素
- AVPlayerItem(提供數(shù)據(jù),設(shè)置數(shù)據(jù)源)
- AVPlayer(負(fù)責(zé)控制播放,暫停、播放、指定時間播放等)
- AVPlayerLayer(負(fù)責(zé)顯示如果缺少就只有聲音沒有視頻)
func playVideo() {
// 1.創(chuàng)建AVPlayer
guard let url = URL(string: "http://baobab.wdjcdn.com/14559682994064.mp4") else { return }
// 2.創(chuàng)建播放器
// 提供數(shù)據(jù),設(shè)置數(shù)據(jù)源
let item = AVPlayerItem(url: url)
// 負(fù)責(zé)控制播放,暫停、播放、指定時間播放等
let player = AVPlayer(playerItem: item)
// 3.創(chuàng)建圖層,負(fù)責(zé)顯示
let layer = AVPlayerLayer(player: player)
layer.frame = playerView.bounds
playerView.layer.addSublayer(layer)
// 4.播放視頻
player.play()
}
使用 IJKMediaFramework 進行視頻的播放
ijkPLayer是Bilibili基于ffmpeg開發(fā)并開源的輕量級視頻播放器,支持播放本地網(wǎng)絡(luò)視頻,也支持流媒體播放
功能很強大,支持視頻的軟解碼和硬解碼
手動導(dǎo)入 IJKMediaFramework.framework SDK, 添加 libz.tbd依賴
import IJKMediaFramework
初始化播放器并進行播放
func playVideoByIJKPlayer() {
// 1.設(shè)置配置,打開硬解碼
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()
}
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
- 詳解iOS App中調(diào)用AVAudioPlayer播放音頻文件的用法
- 小程序ios音頻播放沒聲音問題的解決
- 詳解iOS應(yīng)用中播放本地視頻以及選取本地音頻的組件用法
- IOS中微信小程序播放緩存的音頻文件的方法
- iOS開發(fā)中音頻工具類的封裝以及音樂播放器的細(xì)節(jié)控制
- iOS開發(fā)實現(xiàn)音頻播放功能
- iOS獲取本地音頻文件(屬性/信息)
- iOS中的音頻服務(wù)和音頻AVAudioPlayer音頻播放器使用指南
- 解決ios微信下vue項目組件切換并自動播放音頻問題
- iOS使用音頻處理框架The Amazing Audio Engine實現(xiàn)音頻錄制播放
相關(guān)文章
IOS開發(fā)中異步網(wǎng)絡(luò)請求上實現(xiàn)同步邏輯
這篇文章主要介紹了IOS開發(fā)中異步網(wǎng)絡(luò)請求上實現(xiàn)同步邏輯的相關(guān)資料,需要的朋友可以參考下2017-03-03
iOS應(yīng)用中UISearchDisplayController搜索效果的用法
這篇文章主要介紹了iOS應(yīng)用中UISearchDisplayController搜索效果的用法,包括點擊搜索出現(xiàn)黑條問題的解決方法,代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下2016-02-02
ios動態(tài)設(shè)置lbl文字標(biāo)簽的高度
本文給大家分享的是ios動態(tài)設(shè)置lbl文字標(biāo)簽的高度寬度的方法,一共給大家匯總了3種方法,小伙伴們根據(jù)自己的項目需求自由選擇。2015-05-05
iOS之UIWebView無法獲取web標(biāo)題的解決方法
這篇文章主要為大家詳細(xì)介紹了iOS之UIWebView無法獲取web標(biāo)題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07
IOS之構(gòu)造方法與自定義構(gòu)造方法的區(qū)別與實現(xiàn)
本篇文章主要介紹了構(gòu)造方法以及自定義構(gòu)造方法的實現(xiàn),需要的朋友可以參考下2015-07-07
iOS中使用UItableviewcell實現(xiàn)團購和微博界面的示例
這篇文章主要介紹了iOS中使用UItableviewcell實現(xiàn)團購和微博界面的示例,開發(fā)語言基于傳統(tǒng)的Objective-C,需要的朋友可以參考下2016-01-01
iOS開發(fā)中使用Quartz2D繪制上下文棧和矩陣的方法
這篇文章主要介紹了iOS開發(fā)中使用Quartz2D繪制上下文棧和矩陣的方法,代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下2015-11-11

