Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 将MPMediaItems与AVAudioPlayer一起使用_Iphone_Objective C - Fatal编程技术网

Iphone 将MPMediaItems与AVAudioPlayer一起使用

Iphone 将MPMediaItems与AVAudioPlayer一起使用,iphone,objective-c,Iphone,Objective C,是否可以使用MPMediaPickerController拾取媒体项,然后将其加载到AVAudioPlayer对象中?如果MPMusicLayerController不能满足您的需要,您可以使用AVAudioPlayer 编辑 从用户的iPod库中播放音频基本上有三个选项:MPMediaPlayer、AVPlayer和AVAudioPlayer 以下是MPMediaPlayer和AVPlayer的示例: - (void) mediaPicker: (MPMediaPickerController

是否可以使用MPMediaPickerController拾取媒体项,然后将其加载到AVAudioPlayer对象中?

如果
MPMusicLayerController
不能满足您的需要,您可以使用
AVAudioPlayer

编辑

从用户的iPod库中播放音频基本上有三个选项:
MPMediaPlayer
AVPlayer
AVAudioPlayer

以下是
MPMediaPlayer
AVPlayer
的示例:

- (void) mediaPicker: (MPMediaPickerController *) mediaPicker
   didPickMediaItems: (MPMediaItemCollection *) collection {


    MPMediaItem *item = [[collection items] objectAtIndex:0];
    NSURL *url = [item valueForProperty:MPMediaItemPropertyAssetURL];

    [self dismissModalViewControllerAnimated: YES];

    // Play the item using MPMusicPlayer

    MPMusicPlayerController* appMusicPlayer = [MPMusicPlayerController applicationMusicPlayer];

    [appMusicPlayer setQueueWithItemCollection:collection];
    [appMusicPlayer play];


    // Play the item using AVPlayer

    AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithURL:url];
    AVPlayer *player = [[AVPlayer alloc] initWithPlayerItem:playerItem];
    [player play];  

}

如果出于某种原因需要使用
AVAudioPlayer
,或者需要访问音频文件的实际音频数据,则必须首先将音频文件复制到应用程序的目录中,然后在那里使用它。如果你习惯于处理照片和视频,
AVAsset
+
AVPlayer
东西与
ALAsset
最相似。

我想你会发现
[NSBundle mainBundle]
是只读的。无法将文件写入应用程序,因此,
AVAudioPlayer
将不适用于iPod Library
MPMediaItems

我只是想说,在iOS 6和iOS 7中,AVAudioPlayer可以直接从iPod播放文件URL,而不必像Art建议的那样将音频数据复制到应用程序目录中

- (void) mediaPicker: (MPMediaPickerController *) mediaPicker didPickMediaItems: (MPMediaItemCollection *) collection {


    MPMediaItem *item = [[collection items] objectAtIndex:0];
    NSURL *url = [item valueForProperty:MPMediaItemPropertyAssetURL];

    // Play the item using AVPlayer
    self.avAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
    [self.avAudioPlayer play];
}
我想补充一点(我现在还不能对此发表评论),在iOS 8中,或者之前,存储在iCloud上的歌曲没有属性
assetur
的值,并且
[npItem valueForProperty:mpmediateitempropertyassetURL]返回
null

以下是一个示例输出:

MPMediaItem *npItem = self.musicPlayerController.nowPlayingItem;
NSLog(@"Song Title: %@\n assetURL: %@\n Cloud Item: %d", npItem.title, [npItem valueForProperty:MPMediaItemPropertyAssetURL], npItem.cloudItem)


// Log Output
Song Title: Time We Had
assetURL: (null)
Cloud Item: 1

Song Title: The Quiet
assetURL: ipod-library://item/item.m4a?id=1529654720874100371
Cloud Item: 0

因此,Avasset形式的音频资产被像ALAssets一样使用?我试图在主机端播放音乐,并听到主机端播放的相同音乐。从主机端,我尝试通过连接的会话将媒体项发送到加入端,但媒体项未发送。请告诉我如何将媒体项目从主机发送到加入(客户端)端?顺便说一下,我成功地发送了媒体标题和媒体作品。谢谢。链接可能应该更新-指向或直接指向它引用的链接。通过使用:MPMediaItem*item=[[collection items]objectAtIndex:0];NSURL*url=[item valueForProperty:MPMediaItemPropertyAsetUrl];它告诉我,URL是空的。当使用媒体查询时,它会出现-43 NSOSStatusErrorDomain。有人能验证AVAudioPlayer真的可以播放iPod库中的歌曲吗?现在在MPMusicLayerController上不推荐使用setVolume变得更加重要。我使用AVAudioPlayer在iOS 6和iOS 7中播放iPod歌曲。它是有效的。有些歌曲不起作用-特别是我注意到一些6年前购买的歌曲对我不起作用-我假设DRM不允许在音乐应用程序之外播放这些歌曲…有没有办法区分“旧的”受DRM保护的歌曲和iCloud上的歌曲?