iOS开发中音频视频播放的简单实现方法

 更新时间:2017年10月26日 09:58:52   作者:Mazy_ma  
视频音频是我们在ios日常开发中经常会遇到的一个需求,所以下面这篇文章主要给大家介绍了关于iOS开发中音频视频播放的简单实现方法,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧。

前言

我们在平时的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()
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • iOS自定义UIBarButtonItem的target和action示例代码

    iOS自定义UIBarButtonItem的target和action示例代码

    这篇文章主要给大家介绍了关于iOS自定义UIBarButtonItem的target和action的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-02-02
  • IOS实现上滑隐藏NvaigtionBar而下拉则显示效果

    IOS实现上滑隐藏NvaigtionBar而下拉则显示效果

    这篇文章给大家介绍了如何实现APP上滑时隐藏navigationBar而下拉则又会显示,虽然也是隐藏但是效果和其他完全不一样,因为以前没做过所以试着去实现一下,现在分享给大家,有需要的可以参考借鉴。
    2016-09-09
  • iOS如何获取屏幕宽高、设备型号、系统版本信息

    iOS如何获取屏幕宽高、设备型号、系统版本信息

    这篇文章主要介绍了iOS如何获取屏幕宽高、设备型号、系统版本信息的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • ios设备使用iframe宽度超出屏幕的解决方法

    ios设备使用iframe宽度超出屏幕的解决方法

    这篇文章主要给大家介绍了关于ios设备使用iframe宽度超出屏幕的解决方法,文中通过示例代码介绍的非常详细,对各位ios开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • 详解iOS应用的设计模式开发中Mediator中介者模式的使用

    详解iOS应用的设计模式开发中Mediator中介者模式的使用

    这篇文章主要介绍了iOS应用的设计模式开发中Mediator中介者模式的使用,示例代码为传统的Objective-C语言,需要的朋友可以参考下
    2016-03-03
  • ios下OC与JS交互之WKWebView

    ios下OC与JS交互之WKWebView

    本篇文章主要介绍了ios下OC与JS交互之WKWebView,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • iOS自定义View实现卡片滑动

    iOS自定义View实现卡片滑动

    这篇文章主要为大家详细介绍了ios自定义View实现卡片滑动效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • iOS 拦截重定向302跳转的方法详解

    iOS 拦截重定向302跳转的方法详解

    这篇文章主要介绍了iOS 拦截重定向302跳转的方法详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • ios启动页强制竖屏(进入App后允许横屏与竖屏)

    ios启动页强制竖屏(进入App后允许横屏与竖屏)

    最近工作遇到这样一个需要,当进入启动页需要强制竖屏,而进入APP后就允许横屏与竖屏,通过查找相关的资料找到了解决的方法,所以将实现的方法整理后分享出来,需要的朋友们可以参考借鉴,下面来一起看看吧。
    2017-03-03
  • 深入解析设计模式中的装饰器模式在iOS应用开发中的实现

    深入解析设计模式中的装饰器模式在iOS应用开发中的实现

    这篇文章主要介绍了设计模式中的装饰器模式在iOS应用开发中的实现,包括对分类和委托的深入讲解,需要的朋友可以参考下
    2016-03-03

最新评论