AVPlayer在模拟器上播放,但不在真实设备上

问题描述:

我正在实现基本音频播放器以播放远程音频文件。文件格式为mp3。 我写的代码在模拟器上工作正常,但不适用于真实设备。然而,我在我的应用程序中使用的相同的url工作正常,如果我使用safari加载它(在相同的真实设备上),所以我没有真正得到缺失的一点。 以下是我的代码:AVPlayer在模拟器上播放,但不在真实设备上

self.musicPlayer = [AVPlayer playerWithURL:[NSURL URLWithString:urlTrack]]; 
[self.musicPlayer play]; 

东西非常容易。音乐播放器属性被定义为

@property (nonatomic, retain) AVPlayer *musicPlayer; 

我也试过使用AVPlayerItem,但结果是一样的。这里是代码我用

AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:urlTrack]]; 
self.musicPlayer = [AVPlayer playerWithPlayerItem:playerItem]; 
[self.musicPlayer play]; 

最后我尝试使用下面

self.musicPlayer = [AVPlayer playerWithURL:[NSURL URLWithString:urlTrack]]; 
NSLog(@"Player created:%d",self.musicPlayer.status); 
[self.musicPlayer addObserver:self forKeyPath:@"status" options:0 context:nil]; 


- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { 
    NSLog(@"Player created:%d",self.musicPlayer.status); 

    if (object == self.musicPlayer && [keyPath isEqualToString:@"status"]) { 
     if (self.musicPlayer.status == AVPlayerStatusReadyToPlay) { 
      [self.musicPlayer play]; 
     } else if (self.musicPlayer.status == AVPlayerStatusFailed) { 
      // something went wrong 
     } 
    } 
} 

代码当方法observeValueForKeyPath调用播放器状态1和该剧exectuted但仍然不健全。 我试了几个文件,如:

http://www.nimh.nih.gov/audio/neurogenesis.mp3

http://www.robtowns.com/music/blind_willie.mp3

任何想法? Tnx

检查文件名的拼写。该设备是区分大小写,模拟器不是...

此外,检查您的铃声是否关闭,你不会听到任何声音,当它关闭。为了防止这种情况,使用

NSError *_error = nil; 
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: &_error]; 

,你初始化玩家

+0

我试着按你的建议,我的球员init和没有问题之前添加以下两行之前。现在,我尝试使用我的个人iPhone和不同于iPad和我面临此问题的网络的网络。至少我可以说代码工作正常。我将在iPad上进行同样的测试。但我不明白为什么,当我在iPad上试用这个相同的代码时,我用它进行开发,它不起作用,但是同样的mp3网址试图在Safari上运行(总是在iPad上)。 –

+0

我想我找到了它 - 你没有分配你的播放器,所以它马上被释放。试试'self.musicPlayer = [[AVPlayer alloc] initWithContentsOfURL:[NSURL URLWithString:urlTrack]];' - 另外,在[[self]之前加上'[self.musicPlayer prepareToPlay]'。 musicPlayer play]' – Swissdude

+0

这个问题可以通过我发布的代码来解决。通过添加它,它工作正常。 Tnx :) –