-
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.lxweimin.com/p/db07eaab6258
如果有什么問題,可以微薄“梁同桌”私信我。留言都行
-
看我那么可愛n(≧▽≦)n
- 關注我的微薄 (梁同桌):http://weibo.com/tongrenyinsheng
- 個人博客: http://www.liangtongzhuo.com
- iOS 個人寫的app (如夢境ASMR)ASMR音樂