iOS利用AVPlayer播放网络音乐的方法教程

2020-01-20 23:06:02王冬梅

前言

假如你现在打算做一个类似百度音乐、豆瓣电台的在线音乐类APP,你会怎样做?

首先了解一下音频播放的实现级别:

       (1) 离线播放:这里并不是指应用不联网,而是指播放本地音频文件,包括先下完完成音频文件再进行播放的情况,这种使用AVFoundation里的AVAudioPlayer可以满足

       (2) 在线播放:使用AVFoundation的AVPlayer可以满足

       (3) 在线播放同时存储文件:使用AudioFileStreamer + AudioQueue 可以满足

       (4) 在线播放且带有音效处理:使用AudioFileStreamer + AudioQueue + 音效模块(系统自带或者自行开发)来满足

本文主要针对第二种级别,介绍如何使用AVPlayer实现网络音乐的播放。

什么是AVPlayer

AVPlayer存在于AVFoundation中,其实它是一个视频播放器,但是用它来播放音乐是没问题的,当然播放音乐不需要呈现界面,因此我们不需要实现它的界面。

跟AVPlayer联系密切的名词:

Asset:AVAsset是抽象类,不能直接使用,其子类AVURLAsset可以根据URL生成包含媒体信息的Asset对象。

AVPlayerItem:和媒体资源存在对应关系,管理媒体资源的信息和状态。

功能需求

通常音乐播放并展示到界面上需要我们实现的功能如下:

       1、(核心)播放器通过一个网络链接播放音乐

       2、(基本)播放器的常用操作:暂停、播放、上一首、下一首等等

       3、(基本)监听该音乐的播放进度、获取音乐的总时间、当前播放时间

       4、(基本)监听改播放器状态:

     (1)媒体加载状态

     (2)数据缓冲状态

     (3)播放完毕状态

       5、(可选)Remote Control控制音乐的播放

       6、(可选)Now Playing Center展示正在播放的音乐

功能实现

1、通过一个网络链接播放音乐


NSURL * url = [NSURL URLWithString:self.currentSong.url];
AVPlayerItem * songItem = [[AVPlayerItem alloc]initWithURL:url];
AVPlayer * player = [[AVPlayer alloc]initWithPlayerItem:songItem];

这里是用一个asset来初始化player,当然你也可以直接用URL初始化:


AVPlayer * player = [[AVPlayer alloc] initWithURL:url];

需要获取当前播放的item可以这样获取:


AVPlayerItem * songItem = player.currentItem;