您的位置:首页 > 移动开发 > IOS开发

iOS-音视频播放的简单实现

2017-09-20 14:15 417 查看
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()
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: