国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > iOS > 正文

iOS開(kāi)發(fā)中音頻視頻播放的簡(jiǎn)單實(shí)現(xiàn)方法

2020-02-19 15:47:30
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

視頻和音頻是iOS日常開(kāi)發(fā)中經(jīng)常遇到的一個(gè)需求,本文主要介紹了iOS開(kāi)發(fā)中音頻視頻播放的簡(jiǎn)單實(shí)現(xiàn)方法,有需要的朋友可以和武林技術(shù)頻道小編一起來(lái)學(xué)習(xí)這方面的知識(shí)。

前言

我們?cè)谄綍r(shí)的iOS開(kāi)發(fā)中,音視頻的播放有很多種,目前系統(tǒng)的自帶的都屬于 AVFoundation 框架,更加接近于底層,所以靈活性很強(qiáng),更加方便自定義

還有就是第三方音視頻視頻播放,特點(diǎn)是功能強(qiáng)大,實(shí)現(xiàn)簡(jiǎn)單,支持流媒體,下面來(lái)逐一介紹。

播放系統(tǒng)音效或者短音效

注意:

  • 這里的資源長(zhǎ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);}

播放音樂(lè) - AVAudioPlayer

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

定義一個(gè)播放器屬性

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

初始化并開(kāi)始播放音樂(lè)

func playMusic() { // 2.獲取對(duì)應(yīng)音樂(lè)資源 guard let fileUrl = Bundle.main.url(forResource: "309769", withExtension: "mp3") else {  return } // 3.創(chuàng)建對(duì)應(yīng)的播放器 do {  player = try AVAudioPlayer(contentsOf: fileUrl) } catch {  print(error) } // 設(shè)置代理監(jiān)聽(tīng)播放完成 player?.delegate = self // 4.準(zhǔn)備播放 player?.prepareToPlay() // 5.播放音樂(lè) player?.play()}

停止、暫停

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

監(jiān)聽(tīng) AVAudioPlayer 播放完成

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

使用 AVPlayer 進(jìn)行視頻的播放

AVPlayer的對(duì)象要設(shè)置為全局的,否則會(huì)播放不成功

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

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

通過(guò)通知監(jiān)聽(tīng)播放的進(jìn)度及相關(guān)參數(shù)

AVPlayer三要素

  • AVPlayerItem(提供數(shù)據(jù),設(shè)置數(shù)據(jù)源)
  • AVPlayer(負(fù)責(zé)控制播放,暫停、播放、指定時(shí)間播放等)
  • AVPlayerLayer(負(fù)責(zé)顯示如果缺少就只有聲音沒(méi)有視頻)
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é)控制播放,暫停、播放、指定時(shí)間播放等 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 進(jìn)行視頻的播放

ijkPLayer是Bilibili基于ffmpeg開(kāi)發(fā)并開(kāi)源的輕量級(jí)視頻播放器,支持播放本地網(wǎng)絡(luò)視頻,也支持流媒體播放

功能很強(qiáng)大,支持視頻的軟解碼和硬解碼

手動(dòng)導(dǎo)入 IJKMediaFramework.framework SDK, 添加 libz.tbd依賴

import IJKMediaFramework

初始化播放器并進(jìn)行播放

func playVideoByIJKPlayer() { // 1.設(shè)置配置,打開(kāi)硬解碼 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.開(kāi)始進(jìn)行播放 ijkPlayer.prepareToPlay()}

總結(jié)

以上是iOS開(kāi)發(fā)中音頻視頻播放的簡(jiǎn)單實(shí)現(xiàn)方法的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)每個(gè)人的學(xué)習(xí)或工作都有一定的借鑒意義。如果您有任何問(wèn)題,可以留言和交流。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 甘南县| 巴彦县| 万荣县| 威信县| 芷江| 海南省| 罗山县| 藁城市| 交口县| 桐城市| 区。| 镇巴县| 东兴市| 南平市| 内江市| 丹凤县| 随州市| 凤凰县| 枣庄市| 茶陵县| 青铜峡市| 宁阳县| 大名县| 德保县| 黔西| 绥棱县| 从江县| 佛学| 闸北区| 浦东新区| 孝感市| 南丹县| 新建县| 上蔡县| 宁远县| 邵武市| 洛扎县| 阳高县| 醴陵市| 紫金县| 平南县|