-
StreamingKit
- 由于蘋果官方?jīng)]有自帶的音樂(lè)音樂(lè)流框架迅耘,如果需要播放網(wǎng)絡(luò)流音頻需求,自己寫的話要了解很多音頻解碼之類的冤馏,這個(gè)講解很詳細(xì)http://msching.github.io 是網(wǎng)易云音樂(lè)的開(kāi)發(fā)者日麸,不過(guò)短時(shí)間很難啃下,所以推薦用第三方框架逮光!
第三方音頻框架
StreamingKit 是我們要用的
GitHub:https://github.com/tumtumtum/StreamingKit
DOUAudioStreamer 我們國(guó)內(nèi)的豆瓣開(kāi)源音樂(lè)播放器
GitHub:https://github.com/douban/DOUAudioStreamer
FreeStreamer
GitHub:https://github.com/muhku/FreeStreamer
以上的Star 都在1000以上代箭, 可以穩(wěn)定使用
Jukebox 這個(gè)框架是Swift版本
GitHub: :https://github.com/teodorpatras/Jukebox
- 一般我們需要一個(gè)播放音樂(lè)流的框架基本功能有
1.可以播放流音樂(lè)(給一個(gè)網(wǎng)址URL就能播放)
2.播放-暫停
3.網(wǎng)速過(guò)慢,緩存音樂(lè)提示
4.獲取正在播放音頻的時(shí)間和一首歌的總時(shí)間
5.可以快進(jìn)到想要播放的時(shí)間點(diǎn)
以上是一個(gè)框架最基本功能涕刚。
第0步嗡综,pod把StreamingKit導(dǎo)進(jìn)來(lái)
上代碼:
第一步
AppDelegate.m:
#import <AVFoundation/AVFoundation.h>//記得導(dǎo)入自帶框架
-(BOOL) application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{ //1 初始化蘋果播放器,用到一些播放模式杜漠。
NSError* error;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error];
[[AVAudioSession sharedInstance] setActive:YES error:&error];
return YES;
}
第二步初始化一個(gè)控制器:
#import "ViewController.h"
#import "STKAudioPlayer.h"
@interface ViewController () <STKAudioPlayerDelegate>
{
STKAudioPlayer* audioPlayer;//保存屬性
NSTimer* timer;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
///初始化一個(gè)播放器
audioPlayer = [[STKAudioPlayer alloc] init];
///給一個(gè)url字符串极景,并且開(kāi)始播放音樂(lè)
[audioPlayer play:@"http://mxd.766.com/sdo/music/data/3/m10.mp3"];
///設(shè)置代理
audioPlayer.delegate = self;
[self setupTimer];
}
//可以開(kāi)一個(gè)定時(shí)器
- (void)setupTimer
{
timer = [NSTimer timerWithTimeInterval:0.1 target:self selector:@selector(tick) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
}
//此方法每0.1秒被定時(shí)器調(diào)用一次
- (void)tick
{
//獲取當(dāng)前播放音頻的總時(shí)間時(shí)間
int duration = audioPlayer.duration;
NSLog(@"%d",duration);
//當(dāng)前播放的時(shí)間
int progress = audioPlayer.progress;
NSLog(@"%d",progress);
if (audioPlayer.state == STKAudioPlayerStateBuffering){
NSLog(@"緩沖了");
}
}
//暫停和播放
- (void)playButtonPressed
{
if (audioPlayer.state == STKAudioPlayerStatePaused)
{ //恢復(fù)歌曲
[audioPlayer resume];
}
else
{ //暫停歌曲
[audioPlayer pause];
}
}
// 改變歌曲播放的進(jìn)度
- (void)changedTime
{
//手動(dòng)讓歌曲從第10秒開(kāi)始播放音樂(lè)察净。
[audioPlayer seekToTime:10];
}
/// 當(dāng)播放器 狀態(tài)發(fā)生改變的時(shí)候調(diào)用, 暫停-開(kāi)始播放都會(huì)調(diào)用
- (void)audioPlayer:(STKAudioPlayer*)audioPlayer stateChanged:(STKAudioPlayerState)state previousState:(STKAudioPlayerState)previousState
{
}
/// 引發(fā)的意外和可能發(fā)生的不可恢復(fù)的錯(cuò)誤盼樟,極少概率會(huì)調(diào)用氢卡。 就是此歌曲不能加載,或者url是不可用的
- (void)audioPlayer:(STKAudioPlayer*)audioPlayer unexpectedError:(STKAudioPlayerErrorCode)errorCode
{
}
///當(dāng)一個(gè)項(xiàng)目開(kāi)始播放調(diào)用
- (void)audioPlayer:(STKAudioPlayer*)audioPlayer didStartPlayingQueueItemId:(NSObject*)queueItemId
{
}
// 一般是歌曲快結(jié)束提前5秒調(diào)用
- (void)audioPlayer:(STKAudioPlayer*)audioPlayer didFinishBufferingSourceWithQueueItemId:(NSObject*)queueItemId
{
}
///當(dāng)一個(gè)項(xiàng)目完成后晨缴,就調(diào)用
-(void) audioPlayer:(STKAudioPlayer*)audioPlayer didFinishPlayingQueueItemId:(NSObject*)queueItemId withReason:(STKAudioPlayerStopReason)stopReason andProgress:(double)progress andDuration:(double)duration
{
}
@end
以上已經(jīng)把一個(gè)音樂(lè)的第三方框架基本的使用總結(jié)译秦!
還有后臺(tái)如何播放音樂(lè)?一張圖片就明白
http://www.reibang.com/p/db07eaab6258
如果有什么問(wèn)題喜庞,可以微薄“梁同桌”私信我诀浪。留言都行
-
看我那么可愛(ài)n(≧▽≦)n
- 關(guān)注我的微薄 (梁同桌):http://weibo.com/tongrenyinsheng
- 個(gè)人博客: http://www.liangtongzhuo.com
- iOS 個(gè)人寫的app (如夢(mèng)境ASMR)ASMR音樂(lè)