iOS开发中音频视频播放的简单实现方法
程序员文章站
2023-12-17 21:08:10
前言
我们在平时的ios开发中,音视频的播放有很多种,目前系统的自带的都属于 avfoundation 框架,更加接近于底层,所以灵活性很强,更加方便自定义
还有就是第...
前言
我们在平时的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() }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。