-
StreamingKit
- 由于苹果官方没有自带的音乐音乐流框架,如果需要播放网络流音频需求,自己写的话要了解很多音频解码之类的,这个讲解很详细http://msching.github.io 是网易云音乐的开发者,不过短时间很难啃下,所以推荐用第三方框架!
-
第三方音频框架
-
StreamingKit 是我们要用的
-
GitHub:https://github.com/tumtumtum/StreamingKit
DOUAudioStreamer 我们国内的豆瓣开源音乐播放器
GitHub:https://github.com/douban/DOUAudioStreamer
FreeStreamer
GitHub:https://github.com/muhku/FreeStreamer
以上的Star 都在1000以上, 可以稳定使用
Jukebox 这个框架是Swift版本
GitHub: :https://github.com/teodorpatras/Jukebox
- 一般我们需要一个播放音乐流的框架基本功能有
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
以上已经把一个音乐的第三方框架基本的使用总结!
还有后台如何播放音乐?一张图片就明白
http://www.jianshu.com/p/db07eaab6258
如果有什么问题,可以微薄“梁同桌”私信我。留言都行
-
看我那么可爱n(≧▽≦)n
- 关注我的微薄 (梁同桌):http://weibo.com/tongrenyinsheng
- 个人博客: http://www.liangtongzhuo.com
- iOS 个人写的app (如梦境ASMR)ASMR音乐
网友评论
2.怎么让他播放下一首!
谢谢回答 😄
这是控制层面做的事情:
1.循环:当前歌曲播放时间与歌曲总时间比较,快相等时,让当前播放时间变为0。 就可以实现循环了。
2.播放下一首:当前歌曲播放时间与歌曲总时间比较,快相等时,再一次给audioPlayer复制下一首音乐的url
[audioPlayer play:@"http://mxd.766.com/sdo/music/data/3/m10.mp3"];
这是简单的方法。如果需要深入了解,官方demo里队列能帮到你
https://segmentfault.com/q/1010000005139811
你看一下, 我也具体不知道。 - -
写audioPlayer play:@"http://mxd.766.com/sdo/music/data/3/m10.mp3"];
[self.audioPlayer seekToTime:0]