亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

ios 流媒體播放器實現流程及FreeStreamer的使用的示例

2019-10-21 18:42:31
字體:
來源:轉載
供稿:網友

簡介

最近實現了一個流媒體播放器,使用的是FreeStreamer庫,至于為什么不用avaudioplayer或者avplayer,前一個是不能播放網絡音樂,后一個則是體驗不好,緩存不夠會暫停,然后又要手動播放。去github上搜了下,發現FreeStreamer評分比較高,于是就用它來實現了一個流媒體播放器。

演示效果

ios,流媒體播放器,FreeStreamer

ios,流媒體播放器,FreeStreamer

ios,流媒體播放器,FreeStreamer

ios,流媒體播放器,FreeStreamer

附上項目地址 chenfengxiaoxixi

實現功能

實現了流媒體音樂播放,后臺持續播放,歌曲切換,進度條顯示以及快進后退等功能。

實現技術點及流程

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.后臺持續播放

先在xcode配置里面(TARGETS->Capabilities)打開Background Modes,勾選上Audio那一欄?,F在只是滿足了后臺播放條件,要想連續不斷在后臺播放,還要申請后臺任務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];      }

播放完成一首歌后,這段代碼用來判斷當前處于前臺還是后臺,如果是后臺,那就申請后臺任務繼續播放下一首。

3.鎖屏后對音樂播放的操作及信息顯示

需要重寫remoteControlReceivedWithEvent,用來獲取鎖屏后對播放器的操作

- (void)remoteControlReceivedWithEvent: (UIEvent *) receivedEvent{  [CF_NOTI_CENTER postNotificationName:@"remoteControl" object:nil userInfo:@{@"event":receivedEvent}];}

該通知發送到播放控制器,在播放控制器實現處理邏輯

- (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(@"播放過程中發生錯誤,錯誤信息:%@",description);      [weakSelf showAlertMsg:description];    };    _audioStream.onCompletion=^(){      //播放完成后,執行下一步      [weakSelf autoPlayNext];    };        // 設置聲音    [_audioStream setVolume:1];    //開始播放    [_audioStream play];  }  else  {    _audioStream.url = url;    [_audioStream play];  }}

停止播放

[self.audioStream stop];

暫停播放和繼續播放為同一個方法,別問為什么,作者就是這樣寫的

[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];// 到指定位置播放    }  }}

結語

以上就是實現流媒體音樂播放器的大概知識點,ui是自己自定義的(圖標素材主要源于網上),一些動畫的思路是用了某某云音后,然后根據自己掌握的一些知識來實現的。想看詳細實現流程和源碼的可以去我的項目地址查看。

戳這里 chenfengxiaoxixi

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产91精品久| 97在线观看视频国产| www.亚洲男人天堂| 久久亚洲春色中文字幕| 亚洲精品不卡在线| 久久久精品在线观看| 成人黄色在线观看| 国产精品高清网站| 欧美激情18p| 亚洲精品中文字幕女同| 欧美老女人www| 91精品视频一区| 中文字幕一精品亚洲无线一区| 成人两性免费视频| 欧美成人高清视频| 一区二区欧美久久| 日韩av免费在线| 亚洲二区中文字幕| 日韩av在线看| 美女啪啪无遮挡免费久久网站| 国产精品成人免费电影| 亚洲天堂视频在线观看| 国产精品扒开腿做爽爽爽视频| 国产日韩精品在线播放| 亚洲韩国青草视频| 久久噜噜噜精品国产亚洲综合| 亚洲性线免费观看视频成熟| 久久电影一区二区| 日韩欧美在线播放| 国产成人精品久久亚洲高清不卡| 亚洲精品免费av| 欧美在线xxx| 亚洲精品国偷自产在线99热| 国产精品网站视频| 性色av一区二区咪爱| 日韩欧美高清视频| 欧美日韩精品在线视频| 中文字幕国内精品| 91在线视频九色| 欧美日韩xxx| 九九热精品在线| 51久久精品夜色国产麻豆| 久久久久久久国产精品视频| 精品无人国产偷自产在线| 高清一区二区三区日本久| 精品亚洲永久免费精品| 国产精品一区二区三| 红桃视频成人在线观看| 午夜精品福利视频| 日韩精品高清在线观看| 欧美中文字幕在线| 国产91在线高潮白浆在线观看| 日韩av123| 亚洲天堂av在线免费观看| 成人国产在线激情| 亚洲大胆人体视频| 亚洲精品综合精品自拍| 国产a级全部精品| 亚洲伊人久久大香线蕉av| 欧美激情中文网| 欧美大片欧美激情性色a∨久久| www.日韩免费| 亚洲伊人一本大道中文字幕| 久久久久久久亚洲精品| 久久av在线播放| 91精品视频免费| 国产精品免费福利| 97av在线视频免费播放| 在线日韩av观看| 一区二区三区天堂av| 亚洲色图国产精品| 亚洲伊人成综合成人网| www.xxxx欧美| 亚洲最新av在线| www.日韩不卡电影av| 欧美中文字幕精品| 国产精品视频地址| 欧美黑人视频一区| 国产精品欧美久久久| 97在线观看免费高清| 国产亚洲激情在线| 欧美日韩久久久久| 欧美天堂在线观看| 欧美一级bbbbb性bbbb喷潮片| 国产精品成人观看视频国产奇米| 日韩av手机在线观看| 亚洲小视频在线| 日韩美女视频免费在线观看| 国产情人节一区| 成人观看高清在线观看免费| 久久久综合免费视频| 在线观看久久av| 欧美精品18videos性欧美| 亚洲2020天天堂在线观看| 深夜精品寂寞黄网站在线观看| 亚洲一区亚洲二区| 久久精品国产综合| 国产精品丝袜白浆摸在线| 亚洲最大av在线| 亚洲毛片在线观看.| 精品久久久久久中文字幕| 成人福利在线视频| 成人欧美在线视频| 91九色蝌蚪国产| 亚洲国产另类 国产精品国产免费| 久99久在线视频| 国产伦精品免费视频| 精品国产乱码久久久久久婷婷| 欧美在线视频一区| 九色精品免费永久在线| 国产成人拍精品视频午夜网站| 日韩欧美有码在线| 久久久免费观看视频| 国产成人欧美在线观看| 久久久久亚洲精品成人网小说| 欧美高清视频一区二区| 97碰在线观看| 综合136福利视频在线| 国产精品扒开腿爽爽爽视频| 日韩在线视频中文字幕| 亚洲女人天堂成人av在线| 国产成人一区二区| 国产区亚洲区欧美区| 福利精品视频在线| 日韩女在线观看| 大桥未久av一区二区三区| 亚洲新声在线观看| 欧美性jizz18性欧美| 欧美理论电影在线观看| 久久久国产精品x99av| 日韩美女av在线免费观看| 91久久精品视频| 97色在线观看免费视频| 国产精品精品视频一区二区三区| 日韩在线视频观看正片免费网站| 在线不卡国产精品| 日韩av在线播放资源| 国产精品999| 亚洲欧美日韩一区在线| 国产精品一区久久久| 中文字幕亚洲国产| 欧美国产一区二区三区| 欧美黑人巨大xxx极品| 国产婷婷成人久久av免费高清| 久久久久久久久久久亚洲| 91精品国产99久久久久久| 成人a视频在线观看| 蜜臀久久99精品久久久久久宅男| 欧美另类高清videos| 亚洲www视频| 亚洲第一网中文字幕| 久久免费精品视频| 欧美午夜精品久久久久久久| 欧美多人乱p欧美4p久久| 国产精品欧美一区二区三区奶水| 国产成人精品久久二区二区| 俺去亚洲欧洲欧美日韩| 国产女精品视频网站免费| 亚洲日本aⅴ片在线观看香蕉| 国产在线精品成人一区二区三区| 4438全国成人免费| 日本在线精品视频| 久久久精品一区| 97精品国产97久久久久久春色|