-
StreamingKit
- 由于苹果官方没有自带的音乐音乐流框架,如果需要播放网络流音频需求,自己写的话要了解很多音频解码之类的,这个讲解很详细msching.github.io 是网易云音乐的开发者,不过短时间很难啃下,所以推荐用第三方框架!
-
第三方音频框架
-
StreamingKit 是我们要用的
-
GitHub:github.com/tumtumtum/S…
DOUAudioStreamer 我们国内的豆瓣开源音乐播放器
GitHub:github.com/douban/DOUA… FreeStreamer
GitHub:github.com/muhku/FreeS…
以上的Star 都在1000以上, 可以稳定使用
Jukebox 这个框架是Swift版本 GitHub: :github.com/teodorpatra…
- 一般我们需要一个播放音乐流的框架基本功能有 1.可以播放流音乐(给一个网址URL就能播放) 2.播放-暂停 3.网速过慢,缓存音乐提示 4.获取正在播放音频的时间和一首歌的总时间 5.可以快进到想要播放的时间点
以上是一个框架最基本功能。
第0步,pod把StreamingKit导进来 ####上代码: 第一步AppDelegate.m: #import <AVFoundation/AVFoundation.h>//记得导入自带框架 -(BOOL) application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions { //1 初始化苹果播放器,用到一些播放模式。 NSError* error; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error]; [[AVAudioSession sharedInstance] setActive:YES error:&error]; return YES; }
第二步初始化一个控制器:
#import "ViewController.h"
#import "STKAudioPlayer.h"
@interface ViewController () <STKAudioPlayerDelegate>
{
STKAudioPlayer* audioPlayer;//保存属性
NSTimer* timer;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
///初始化一个播放器
audioPlayer = [[STKAudioPlayer alloc] init];
///给一个url字符串,并且开始播放音乐
[audioPlayer play:@"http://mxd.766.com/sdo/music/data/3/m10.mp3"];
///设置代理
audioPlayer.delegate = self;
[self setupTimer];
}
//可以开一个定时器
- (void)setupTimer
{
timer = [NSTimer timerWithTimeInterval:0.1 target:self selector:@selector(tick) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
}
//此方法每0.1秒被定时器调用一次
- (void)tick
{
//获取当前播放音频的总时间时间
int duration = audioPlayer.duration;
NSLog(@"%d",duration);
//当前播放的时间
int progress = audioPlayer.progress;
NSLog(@"%d",progress);
if (audioPlayer.state == STKAudioPlayerStateBuffering){
NSLog(@"缓冲了");
}
}
//暂停和播放
- (void)playButtonPressed
{
if (audioPlayer.state == STKAudioPlayerStatePaused)
{ //恢复歌曲
[audioPlayer resume];
}
else
{ //暂停歌曲
[audioPlayer pause];
}
}
// 改变歌曲播放的进度
- (void)changedTime
{
//手动让歌曲从第10秒开始播放音乐。
[audioPlayer seekToTime:10];
}
/// 当播放器 状态发生改变的时候调用, 暂停-开始播放都会调用
- (void)audioPlayer:(STKAudioPlayer*)audioPlayer stateChanged:(STKAudioPlayerState)state previousState:(STKAudioPlayerState)previousState
{
}
/// 引发的意外和可能发生的不可恢复的错误,极少概率会调用。 就是此歌曲不能加载,或者url是不可用的
- (void)audioPlayer:(STKAudioPlayer*)audioPlayer unexpectedError:(STKAudioPlayerErrorCode)errorCode
{
}
///当一个项目开始播放调用
- (void)audioPlayer:(STKAudioPlayer*)audioPlayer didStartPlayingQueueItemId:(NSObject*)queueItemId
{
}
// 一般是歌曲快结束提前5秒调用
- (void)audioPlayer:(STKAudioPlayer*)audioPlayer didFinishBufferingSourceWithQueueItemId:(NSObject*)queueItemId
{
}
///当一个项目完成后,就调用
-(void) audioPlayer:(STKAudioPlayer*)audioPlayer didFinishPlayingQueueItemId:(NSObject*)queueItemId withReason:(STKAudioPlayerStopReason)stopReason andProgress:(double)progress andDuration:(double)duration
{
}
@end
######以上已经把一个音乐的第三方框架基本的使用总结!
还有后台如何播放音乐?一张图片就明白 www.jianshu.com/p/db07eaab6…