问题有:

1.  关于网络上的数据流播放,之前是使用github上的AudioStream库进行网络歌曲的播放。但是这么做之后发现跟AVPlayer(播放ipod歌曲)发生冲突,于是AudioSteamer库就只能放弃了。

2.  关于ipod的歌曲播放,基本上无法操作ipod的歌曲,如果要通过dlna传送本机ipod的歌曲,那么必须先将ipod的歌转存到本地,这个过程比较麻烦,于是放弃了。

3.  ipod的歌曲读取需要通过MediaPlayer、MediaItem来读取ipod的数据。

4.  在线音乐、流媒体、直播流都可以通过AVPlayer来播放,而不再使用AudioStreamer。

5.  ipod的歌曲播放可以用MediaPlayer中的IpodPlayer来播放,但是保存方便还是使用AVPlayer。

6.  AVPlayer可以播放本地歌曲,因此从网络下载的本地歌曲也可以是用这个来播放。

7.  AVPlayer类有个子类,AVQueuePlayer,可以添加队列进行控制播放。

总结:音乐播放器必须使用AVPlayer,可以播放应用内保存的音乐,播放网络音乐,播放网络电台、播放ipod音乐,设置后台播放,设置封面,还可以创建播放队列。

关于AVPlayer的使用有几个问题:

  1.  设置后台播放

    在info.plist中需要添加Required background modes,并且添加值App plays audio

    在应用的delegate中Launch函数里添加代码

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{// Override point for customization after application launch.
{if([application respondsToSelector:@selector(beginReceivingRemoteControlEvents)])[application beginReceivingRemoteControlEvents];[self becomeFirstResponder]; // this enables listening for events
[[AVAudioSessionsharedInstance] setCategory:AVAudioSessionCategory Playbackerror:nil];[[AVAudioSessionsharedInstance] setActive: YES error: nil];}return YES;}- (BOOL)canBecomeFirstResponder{return YES;}

    setCategory这个方法设定了这个应用的声音播放实例可以在后台播放,并且音频播放是可打断或被打断的。

    delegate要继承UIResponser借口,beginReceivingControlEvents调用后就可以接受ipod control的消息。

    becomeFirstResponder方法使用后会在ipod control有响应后将消失传递到这个类做响应。

2.  后台播放时,ipod control的点击事件响应。

    在appdelegate中(因为设置成了响应者)加入响应代码

- (void)remoteControlReceivedWithEvent:(UIEvent *)event {switch (event.subtype) {case UIEventSubtypeRemoteControlTogglePlayPause:NSLog(@"play btn toggle");break;case UIEventSubtypeRemoteControlPlay:NSLog(@"play event");break;case UIEventSubtypeRemoteControlPause:NSLog(@"pause event");break;case UIEventSubtypeRemoteControlStop:NSLog(@"stop event");break;case UIEventSubtypeRemoteControlPreviousTrack:NSLog(@"prev event");break;case UIEventSubtypeRemoteControlNextTrack:NSLog(@"next event");break;default:break;}
}

    这里做音乐播放器后台ipod操作的响应控制。

3.  后台播放时,设置ipod control的封面图片,歌曲名等信息。通过设置当前媒体播放器的信息来实现。

    在应用弹出去或者歌曲切换事件出发的时候调用该函数。

    

- (void)configNowPlayingInfoCenter {if (NSClassFromString(@"MPNowPlayingInfoCenter")) {MPNowPlayingInfoCenter *center = [MPNowPlayingInfoCenter defaultCenter];UIImage *image = [UIImage imageNamed:@"figo.png"];MPMediaItemArtwork *artwork = [[MPMediaItemArtwork alloc] initWithImage:image];NSDictionary*songInfo = [NSDictionary dictionaryWithObjectsAndKeys:@"华哥", MPMediaItemPropertyArtist,@"嘿嘿", MPMediaItemPropertyTitle,artwork, MPMediaItemPropertyArtwork,@"嘿嘿", MPMediaItemPropertyAlbumTitle,nil];center.nowPlayingInfo = songInfo;}
}

在这些时候可以触发:

- (void)applicationDidEnterBackground:(UIApplication *)application
{[self configNowPlayingInfoCenter];
}

-(void)playerItemDidReachEnd:(NSNotification *)notification {[self configNowPlayingInfoCenter];
}

4.  音乐播放队列的播放顺序是通过监听音乐播放结束或开始,再做相应的处理,在appdelegat中监听事件。这些事件需要Audio框架中开启。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd:)name:AVPlayerItemDidPlayToEndTimeNotification object:[player currentItem]];

    监听这些事件后,进行播放队列调整。或者是ipod control切换歌曲的时候调整ipod封面和歌名。

5.  使用AVPlayer播放歌曲

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd:)name:AVPlayerItemDidPlayToEndTimeNotification object:[player currentItem]];AVPlayerItem *item1 = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:@"http://192.168.1.127/5.mp3"]];AVPlayerItem *item2 = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:@"http://192.168.1.127/1.mp3"]];AVPlayerItem *item3 = [AVPlayerItem playerItemWithAsset:[AVAsset assetWithURL:[NSURL URLWithString:@"http://shoutmedia.abc.net.au:10326"]]];AVPlayerItem *item4 = [AVPlayerItem playerItemWithAsset:[AVAsset assetWithURL:[NSURL URLWithString:@"http://192.168.1.127/1.mp3"]]];NSArray *items = @[item3,item4];queuePlayer = [AVQueuePlayer queuePlayerWithItems:items];  [queuePlayer play];

   有队列,通过事件回调控制封面和播放顺序的方式。

6.  播放ipod的歌曲

    要使用Mediaplayer库,Audio库

MPMediaQuery *myPlaylistsQuery = [MPMediaQuery songsQuery];NSArray *playlists = [myPlaylistsQuery collections];GDSongNet *newSong;NSMutableArray *array = [[NSMutableArray alloc] init];;for (MPMediaPlaylist *playlist in playlists) {newSong = nil;newSong = [[GDSongNet alloc] init];NSArray *songs = [playlist items];for (MPMediaItem *song in songs) {newSong.songStatusType = [NSNumber numberWithInt:PLAYER_LOCAL];newSong.songCoverUrl = @"/Public/Images/nopic_80x80.jpg";newSong.songMusic_id = [song valueForProperty:MPMediaItemPropertyPersistentID];//MPMediaItemPropertyPersistentIDnewSong.songMusic_name = [song valueForProperty:MPMediaItemPropertyTitle];newSong.songSinger = [song valueForProperty:MPMediaItemPropertyArtist];//newSong.songType_id = [NSNumber numberWithInt:1];newSong.songUrl =  [song valueForProperty:MPMediaItemPropertyAssetURL];[array addObject:newSong];}}self.localMusics = array;

7.  AVPlayer检索元数据

    元数据的数组:

NSArray *metaDatas = [[[mPlayercurrentItem] asset] commonMetadata];

     遍历获取数据

    for (AVMetadataItem* item in mMetadata){NSString* commonKey = [item commonKey];if ([commonKey isEqualToString:AVMetadataCommonKeyTitle]){[mTitleLabel setText:[item stringValue]];[mTitleLabel setHidden:NO];}if ([commonKey isEqualToString:AVMetadataCommonKeyCopyrights]){[mCopyrightLabel setText:[item stringValue]];[mCopyrightLabel setHidden:NO];}}

附件:测试项目

转载于:https://www.cnblogs.com/chemandy/archive/2012/12/20/2827214.html

ios音乐播放器使用综述相关推荐

  1. ios音乐播放器-仿QQ音乐

    这篇文章主要写一个iOS系统下的音乐播放器 , 包括简单的仿QQ音乐播放器界面.音乐播放.歌词解析.后台控制等  ,如果你正好需要 , 希望你看完后能够对你的提升有所帮助 , 当然,阅读中如果发现什么 ...

  2. 卡拉OK效果的实现-iOS音乐播放器

    自己编写的音乐播放器偶然用到这个模块,发现没有思路,而且上网搜了搜,关于这方面的文章不是很多,没找到满意的结果,然后自己也是想了想,最终实现了这种效果,想通了发现其实很简单. 直接上原理: 第一种: ...

  3. 基于IOS音乐播放器在线歌词同步小程序系统(音乐小程序)

    目 录 目 录 1 摘 要 3 Abstract 4 1 导论 6 1.1 背景问题 6 1.2 选题意义 6 1.3 本文内容 7 2 核心功能 9 2.1 功能调研 9 2.2 可行性分析 12 ...

  4. android+仿ios+音乐播放器,iOS简单的音乐播放器(仿QQ音乐)

    AVPlayer实现基本的播放,暂停,上一首,下一首,调节音量,调节进度等,正在学习的新人可以看下,有什么不足可以互相学习,谢谢支持 qq音乐.gif 这个是我写的一个简单的低仿QQ音乐, 如果你也喜 ...

  5. iOS音乐播放器小技巧

    在没有网络的情况下,音频的后台播放比较简单,google一下可以搜到很多资料,但是如果每次歌曲的请求都是通过网络,就不成了,有时可以也扛不了几首,这里总结下实现方法,可以实现像电台一样的功能,后台播放 ...

  6. iOS音乐播放器的后台播放和远程控制

    iOS的后台任务一直有很严格的限制,一般情况下只有几类情况能使用后台任务,下面介绍其中的一种 音乐的后台播放. 1.要支持后台任务,首先你得告诉系统你需要后台任务,所以你首先在Info.plist文件 ...

  7. iOS高仿微信悬浮窗、忍者小猪游戏、音乐播放器、支付宝、今日头条布局滚动效果等源码...

    iOS精选源码 iOS WKWebView的使用源码 模仿apple music 小播放器的交互实现 高仿微信的悬浮小窗口 iOS仿支付宝首页效果 [swift]仿微信悬浮窗 类似于今日头条,网易新闻 ...

  8. iOS之基于FreeStreamer的简单音乐播放器(模仿QQ音乐)

    代码地址如下: http://www.demodashi.com/demo/11944.html 天道酬勤 前言 作为一名iOS开发者,每当使用APP的时候,总难免会情不自禁的去想想,这个怎么做的?该 ...

  9. iOS开发拓展篇—音频处理(音乐播放器3)

    iOS开发拓展篇-音频处理(音乐播放器3) 说明:这篇文章主要介绍音频工具类和播放工具类的封装. 一.控制器间数据传递 1.两个控制器之间数据的传递 第一种方法:self.parentViewCont ...

  10. iOS开发:音乐播放器

    /******************       iOS开发:音乐播放器     *****************/ 要求:给button一个触发事件,点击一下播放歌曲,显示暂停提示: 再点击一下 ...

最新文章

  1. 如何用数学函数去理解机器学习?
  2. IE浏览器支持响应式网站设计
  3. 用asp.net编写冒泡排序法
  4. 自定义ant中table表格的展开图标 修改ant-vue-design中嵌套表格table的expandIcon自定义图标
  5. idea install 失败_idea maven install 卡住,无报错排查。
  6. 星益云聚合收银台系统源码
  7. 为什么代码规范要求SQL语句不要过多的join?
  8. ros 开源物体检测_ROS传感器之LIDAR简介
  9. PHP 生成csv的遇到的分隔符问题
  10. Linq 分组(group by)求和(sum)并且按照分隔符(join)分割列数据
  11. 颠覆传统-面向对象的设计思想(序章续)
  12. 如何对下载的文件进行MD5校验
  13. 淘宝订单API接口参数详解
  14. 4、Unity商店,导入资源
  15. 可伸缩系统的架构经验
  16. YC孵化创业营2020-Adora Cheung - How to Prioritize Your Time 如何分配你时间的优先级
  17. Camera 之水波纹和banding现象
  18. 王 第潜艇三天 引用类型 继承
  19. ffmpeg新手成长之路——使用av_seek_frame做seek定位
  20. altera/xlinx pcie dma应用

热门文章

  1. C向Python正确传递数组的代码
  2. Ubuntu 16.04上安装Code::Blocks
  3. linux卸载rpm安装的golang,linux下go安装/卸载重装-Go语言中文社区
  4. C# List;数组[] 转 List 和 List 拼接
  5. 计算机管理没有Android手机项,我可以从计算机控制Android手机吗? | MOS86
  6. win7系统网络计算机,Win7系统打开局域网没看到其他计算机的修复方法
  7. Django学习(二)
  8. Scrapy基础(八)————图片下载后将本地路径添加到Item中
  9. flex bison 下载
  10. 在单链表中删除指定值的节点