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

57 篇文章 1 订阅
7 篇文章 0 订阅

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()
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值