iOS在应用中播放iPod中的音乐-创新互联

项目中有一个需求是在App中播放用户iPod中的音乐,实现思路如下:

目前创新互联已为上千多家的企业提供了网站建设、域名、网络空间、网站改版维护、企业网站设计、含山网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

1、获取iPod中的音乐对象

NSNumber *typeNum = [NSNumber numberWithInteger:MPMediaTypeAnyAudio];
MPMediaPropertyPredicate *predicate = [MPMediaPropertyPredicate predicateWithValue:typeNum forProperty:MPMediaItemPropertyMediaType];
MPMediaQuery *query = [[MPMediaQuery alloc] init];
[query addFilterPredicate:predicate];
NSArray *items = [query items];

数组 items 中包含了iPod中所有的音乐,音乐都是一个 MPMediaItem 对象,可通过获取该对象的相关属性,获取指定音乐文件的相关信息。比如:

    [mediaItem valueForProperty:MPMediaItemPropertyPlaybackDuration]   //获取音乐文件的播放时长;

    [mediaItem valueForProperty:MPMediaItemPropertyTitle]   //获取音乐文件名称;

    [mediaItem valueForProperty:MPMediaItemPropertyAssetURL]   //获取音乐文件在iPod中的地址;

    可通过查阅官方帮助文档得知获取的文件的相关信息,但是不能获取文件的占用内存大小信息。

    PS:当设置 type 为 MPMediaTypeAnyVideo 时,可获取iPod中所有的视频信息。

2、在App中播放iPod中的音乐

播放iPod中的音乐有多种方法,下面介绍两种方法:

方法1:通过获取的 MPMediaItem 对象数组构建 MPMediaItemCollection 播放列表对象,通过 MPMusicPlayerController 播放器实现播放。这种方法可实现顺序播放、循环播放等功能。

MPMediaItemCollection *mediaItemCollection = [MPMediaItemCollection collectionWithItems:items];
//        MPMusicPlayerController 有两种播放器可以选择,一种是application music player,另外一种是iPod music player。
//        第一种播放器是一种内部播放器,当程序对出后停止播放;而第二种播放器则与iPod播放器内的信息相关,退出之后不会停止播放。获取方式如下:
//        + applicationMusicPlayer
//        + iPodMusicPlayer
MPMusicPlayerController *audioPlayer = [MPMusicPlayerController applicationMusicPlayer];
        [audioPlayer beginGeneratingPlaybackNotifications];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(audioPlayerStatedChanged:) name:MPMusicPlayerControllerPlaybackStateDidChangeNotification object:audioPlayer];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(nowPlayingItemIsChanged:) name:MPMusicPlayerControllerNowPlayingItemDidChangeNotification object:_audioPlayer];
                                                               
        [audioPlayer setQueueWithItemCollection:mediaItemCollection];
        [audioPlayer play];

    代码中添加的两个通知是监听播放中的一些状态变化的,可供监听的状态可查阅官方帮助文档。

    方法2:通过 AVAudioPlayer 实现单个音乐文件的播放,这时,需要通过 MPMediaItem 对象获取音乐文件在iPod中的地址。

//设置播放模式
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayback error:nil];
[session setActive:YES error:nil];
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:musicUrl error:nil];
m_player.delegate = self;
[m_player prepareToPlay];
[m_player play];

    可通过实现下面的委托方法获取播放过程中的相关状态。

#pragma mark - AVAudioPlayerDelegate
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
    NSLog(@"播放结束");
}
- (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error
{
    NSLog(@"解码失败");
}

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前名称:iOS在应用中播放iPod中的音乐-创新互联
浏览路径:http://myzitong.com/article/ddccsc.html