ios音乐播放器使用综述
问题有:
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音乐播放器使用综述相关推荐
- ios音乐播放器-仿QQ音乐
这篇文章主要写一个iOS系统下的音乐播放器 , 包括简单的仿QQ音乐播放器界面.音乐播放.歌词解析.后台控制等 ,如果你正好需要 , 希望你看完后能够对你的提升有所帮助 , 当然,阅读中如果发现什么 ...
- 卡拉OK效果的实现-iOS音乐播放器
自己编写的音乐播放器偶然用到这个模块,发现没有思路,而且上网搜了搜,关于这方面的文章不是很多,没找到满意的结果,然后自己也是想了想,最终实现了这种效果,想通了发现其实很简单. 直接上原理: 第一种: ...
- 基于IOS音乐播放器在线歌词同步小程序系统(音乐小程序)
目 录 目 录 1 摘 要 3 Abstract 4 1 导论 6 1.1 背景问题 6 1.2 选题意义 6 1.3 本文内容 7 2 核心功能 9 2.1 功能调研 9 2.2 可行性分析 12 ...
- android+仿ios+音乐播放器,iOS简单的音乐播放器(仿QQ音乐)
AVPlayer实现基本的播放,暂停,上一首,下一首,调节音量,调节进度等,正在学习的新人可以看下,有什么不足可以互相学习,谢谢支持 qq音乐.gif 这个是我写的一个简单的低仿QQ音乐, 如果你也喜 ...
- iOS音乐播放器小技巧
在没有网络的情况下,音频的后台播放比较简单,google一下可以搜到很多资料,但是如果每次歌曲的请求都是通过网络,就不成了,有时可以也扛不了几首,这里总结下实现方法,可以实现像电台一样的功能,后台播放 ...
- iOS音乐播放器的后台播放和远程控制
iOS的后台任务一直有很严格的限制,一般情况下只有几类情况能使用后台任务,下面介绍其中的一种 音乐的后台播放. 1.要支持后台任务,首先你得告诉系统你需要后台任务,所以你首先在Info.plist文件 ...
- iOS高仿微信悬浮窗、忍者小猪游戏、音乐播放器、支付宝、今日头条布局滚动效果等源码...
iOS精选源码 iOS WKWebView的使用源码 模仿apple music 小播放器的交互实现 高仿微信的悬浮小窗口 iOS仿支付宝首页效果 [swift]仿微信悬浮窗 类似于今日头条,网易新闻 ...
- iOS之基于FreeStreamer的简单音乐播放器(模仿QQ音乐)
代码地址如下: http://www.demodashi.com/demo/11944.html 天道酬勤 前言 作为一名iOS开发者,每当使用APP的时候,总难免会情不自禁的去想想,这个怎么做的?该 ...
- iOS开发拓展篇—音频处理(音乐播放器3)
iOS开发拓展篇-音频处理(音乐播放器3) 说明:这篇文章主要介绍音频工具类和播放工具类的封装. 一.控制器间数据传递 1.两个控制器之间数据的传递 第一种方法:self.parentViewCont ...
- iOS开发:音乐播放器
/****************** iOS开发:音乐播放器 *****************/ 要求:给button一个触发事件,点击一下播放歌曲,显示暂停提示: 再点击一下 ...
最新文章
- 如何用数学函数去理解机器学习?
- IE浏览器支持响应式网站设计
- 用asp.net编写冒泡排序法
- 自定义ant中table表格的展开图标 修改ant-vue-design中嵌套表格table的expandIcon自定义图标
- idea install 失败_idea maven install 卡住,无报错排查。
- 星益云聚合收银台系统源码
- 为什么代码规范要求SQL语句不要过多的join?
- ros 开源物体检测_ROS传感器之LIDAR简介
- PHP 生成csv的遇到的分隔符问题
- Linq 分组(group by)求和(sum)并且按照分隔符(join)分割列数据
- 颠覆传统-面向对象的设计思想(序章续)
- 如何对下载的文件进行MD5校验
- 淘宝订单API接口参数详解
- 4、Unity商店,导入资源
- 可伸缩系统的架构经验
- YC孵化创业营2020-Adora Cheung - How to Prioritize Your Time 如何分配你时间的优先级
- Camera 之水波纹和banding现象
- 王 第潜艇三天 引用类型 继承
- ffmpeg新手成长之路——使用av_seek_frame做seek定位
- altera/xlinx pcie dma应用
热门文章
- C向Python正确传递数组的代码
- Ubuntu 16.04上安装Code::Blocks
- linux卸载rpm安装的golang,linux下go安装/卸载重装-Go语言中文社区
- C# List;数组[] 转 List 和 List 拼接
- 计算机管理没有Android手机项,我可以从计算机控制Android手机吗? | MOS86
- win7系统网络计算机,Win7系统打开局域网没看到其他计算机的修复方法
- Django学习(二)
- Scrapy基础(八)————图片下载后将本地路径添加到Item中
- flex bison 下载
- 在单链表中删除指定值的节点