首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVPlayer不能从音乐库播放

AVPlayer不能从音乐库播放
EN

Stack Overflow用户
提问于 2012-06-19 22:46:46
回答 2查看 2.8K关注 0票数 5

我正在尝试使用AVPlayer播放我的iPhone音乐库中的一首歌曲。一切似乎都准备好了,但玩家根本不会发出任何声音。我已经在这个问题上挣扎了一段时间,任何帮助都将不胜感激!

注意:我意识到我可以使用AVAudioPlayer,但我想直接从我的音乐库中读取文件,据我所知,AVAudioPlayer不支持这一点(我必须首先导出歌曲,占用更多时间)。我不能使用MPMusicPlayerController,因为最终目标是将歌曲转换成NSData并在另一台设备上播放。

最重要的是,我想知道为什么这段代码不能运行:

代码语言:javascript
复制
NSArray *itemsFromQuery = [[MPMediaQuery songsQuery] items];
MPMediaItem *song = [itemsFromQuery objectAtIndex:29];
NSURL *songURL = [song valueForProperty:MPMediaItemPropertyAssetURL];
AVURLAsset *urlAsset = [[AVURLAsset alloc] initWithURL:songURL options:nil];

NSArray *keyArray = [[NSArray alloc] initWithObjects:@"tracks", nil];

[urlAsset loadValuesAsynchronouslyForKeys:keyArray completionHandler:^{

    AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithAsset:urlAsset];

    AVPlayer *player = [[AVPlayer alloc] initWithPlayerItem:playerItem];

    while (true) {
        if (player.status == AVPlayerStatusReadyToPlay && playerItem.status == AVPlayerItemStatusReadyToPlay) {
            break;
        }
    }

    if (player.status == AVPlayerStatusReadyToPlay && playerItem.status == AVPlayerItemStatusReadyToPlay) {
        NSLog(@"Ready to play");
        [player play];
    }
    else 
        NSLog(@"Not ready to play");
}];

在我调用play方法之后,输出是"Ready to play",并且AVPlayer的"rate“属性是1.0。MPMediaItem存在,我可以使用valueForProperty方法来获取正确的标题、艺术家等。你知道为什么播放器没有发出声音吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-23 05:44:18

我发现了一些有用的东西:

  1. 我让AVPlayer成为了一个属性(感谢你的提示!)
  2. 在使用initWithAsset方法之前,我确保了AVPlayer为空。

NSArray *itemsFromQuery = [MPMediaQuery songsQuery items];MPMediaItem *song = itemsFromQuery对象属性索引:0;NSURL *songURL = song valueForProperty:MPMediaItemPropertyAssetURL;AVURLAsset *urlAsset = [AVURLAsset alloc :songURL选项: nil];NSArray *keyArray = [NSArray alloc:@“tracks”,nil];[urlAsset loadValuesAsynchronouslyForKeys:keyArray completionHandler:^{ AVPlayerItem *playerItem = [AVPlayerItem alloc initWithAsset:AVPlayer NSURL];player = nil;player = [AVPlayer alloc :playerItem];while (true) { if (player.status == AVPlayerStatusReadyToPlay && playerItem.status == AVPlayerItemStatusReadyToPlay) break;} player play;}];

希望这能帮助到一些人!

票数 12
EN

Stack Overflow用户

发布于 2013-11-12 21:47:55

另一个原因是配置AVAudioSession。对我很管用。

代码语言:javascript
复制
 [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
  [[AVAudioSession sharedInstance] setActive: YES error: nil];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11103490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档