這篇文章主要為大家展示了“ios如何實現(xiàn)流媒體播放器”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“ios如何實現(xiàn)流媒體播放器”這篇文章吧。
創(chuàng)新互聯(lián)建站服務項目包括西吉網站建設、西吉網站制作、西吉網頁制作以及西吉網絡營銷策劃等。多年來,我們專注于互聯(lián)網行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網行業(yè)的解決方案,西吉網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到西吉省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!
演示效果


.jpg)

附上項目地址 chenfengxiaoxixi
實現(xiàn)功能
實現(xiàn)了流媒體音樂播放,后臺持續(xù)播放,歌曲切換,進度條顯示以及快進后退等功能。
實現(xiàn)技術點及流程
1.單例
播放器所在controller我是使用單例初始化的,不然pop到上一級控制器后,當前對象釋放掉,就無法播放了
+ (instancetype)sharePlayerController
{
@synchronized(self)
{
static CFPlayerController *_instance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instance = [[self alloc] init];
});
return _instance;
}
}這里使用了線程同步,避免由卡頓造成的多次初始化。
2.后臺持續(xù)播放
先在xcode配置里面(TARGETS->Capabilities)打開Background Modes,勾選上Audio那一欄。現(xiàn)在只是滿足了后臺播放條件,要想連續(xù)不斷在后臺播放,還要申請后臺任務id。
//添加后臺播放任務
UIBackgroundTaskIdentifier bgTask = 0;
if([UIApplication sharedApplication].applicationState== UIApplicationStateBackground) {
NSLog(@"后臺播放");
UIApplication*app = [UIApplication sharedApplication];
UIBackgroundTaskIdentifier newTask = [app beginBackgroundTaskWithExpirationHandler:nil];
if(bgTask!= UIBackgroundTaskInvalid) {
[app endBackgroundTask: bgTask];
}
bgTask = newTask;
[self next];
}
else {
NSLog(@"前臺播放");
[self.cdView scrollRightWIthNext];
}播放完成一首歌后,這段代碼用來判斷當前處于前臺還是后臺,如果是后臺,那就申請后臺任務繼續(xù)播放下一首。
3.鎖屏后對音樂播放的操作及信息顯示
需要重寫remoteControlReceivedWithEvent,用來獲取鎖屏后對播放器的操作
- (void)remoteControlReceivedWithEvent: (UIEvent *) receivedEvent
{
[CF_NOTI_CENTER postNotificationName:@"remoteControl" object:nil userInfo:@{@"event":receivedEvent}];
}該通知發(fā)送到播放控制器,在播放控制器實現(xiàn)處理邏輯
- (void)remoteControl:(NSNotification *)note
{
UIEvent *receivedEvent = note.userInfo[@"event"];
if (receivedEvent.type == UIEventTypeRemoteControl)
{
switch (receivedEvent.subtype)
{
case UIEventSubtypeRemoteControlTogglePlayPause:
[self.audioStream stop];
break;
case UIEventSubtypeRemoteControlPreviousTrack:
[self.cdView scrollLeftWithPrev];
break;
case UIEventSubtypeRemoteControlNextTrack:
[self.cdView scrollRightWIthNext];
break;
case UIEventSubtypeRemoteControlPlay:
[self.cdView playOrPause];
break;
case UIEventSubtypeRemoteControlPause:
//暫停歌曲時,動畫也要暫停
[self.cdView playOrPause];
break;
default:
break;
}
}
}更新鎖屏后音樂的顯示信息
//鎖屏顯示信息
- (void)configNowPlayingInfoCenter
{
if (NSClassFromString(@"MPNowPlayingInfoCenter")) {
NSMutableDictionary * dict = [[NSMutableDictionary alloc] init];
[dict setObject:CFUSER.currentSong.songName forKey:MPMediaItemPropertyTitle];
[dict setObject:@(self.playTime)forKey:MPNowPlayingInfoPropertyElapsedPlaybackTime];
//音樂的總時間
[dict setObject:@(self.totalTime)forKey:MPMediaItemPropertyPlaybackDuration];
[[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:dict];
}
}4.關于FreeStreamer的使用
初始化,開始播放
- (void)buildStreamer
{
weakSELF;
// 網絡文件
NSURL *url = [NSURL URLWithString:CFUSER.currentSong.url];
if (!_audioStream) {
_audioStream = [[FSAudioStream alloc] initWithUrl:url];
_audioStream.onFailure = ^(FSAudioStreamError error,NSString *description){
NSLog(@"播放過程中發(fā)生錯誤,錯誤信息:%@",description);
[weakSelf showAlertMsg:description];
};
_audioStream.onCompletion=^(){
//播放完成后,執(zhí)行下一步
[weakSelf autoPlayNext];
};
// 設置聲音
[_audioStream setVolume:1];
//開始播放
[_audioStream play];
}
else
{
_audioStream.url = url;
[_audioStream play];
}
}停止播放
[self.audioStream stop];
暫停播放和繼續(xù)播放為同一個方法,別問為什么,作者就是這樣寫的
[self.audioStream pause];
快進后退播放
- (void)dragSliderEnd:(UISlider *)slider{
//滑動到底時,播放下一曲
if (slider.value == 1) {
[self.cdView scrollRightWIthNext];
}
else
{
if (slider.value > 0)
{
//初始化一個FSStreamPosition結構體
FSStreamPosition pos;
//只對position賦值,value由slider控制
pos.position = slider.value;
[self.audioStream seekToPosition:pos];// 到指定位置播放
}
}
}以上是“ios如何實現(xiàn)流媒體播放器”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網頁題目:ios如何實現(xiàn)流媒體播放器
標題鏈接:http://www.chinadenli.net/article48/iiodhp.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供品牌網站建設、小程序開發(fā)、營銷型網站建設、網站收錄、企業(yè)網站制作、電子商務
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)