繁体   English   中英

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

[英]AVPlayer plays on simulator but doesn't on a real device

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

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,播放已执行但仍然没有声音。 我尝试了几个文件,如:

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];

就在您初始化播放器之前

我已经尝试了所有的东西但没有奏效,唯一认为对我AVAudioSessionplayBack
这是我使用的代码

private var audioPlayer: AVAudioPlayer!

guard let path = Bundle.main.path(forResource: name, ofType: "mp3") else {
        print("can not find path")
        return
    }
    let url = URL(fileURLWithPath: path)
    do {
        try AVAudioSession.sharedInstance().setCategory(.playback)
        audioPlayer = try AVAudioPlayer(contentsOf: url)
    } catch {
        print("some thing went wrong: \(error)")
    }
    audioPlayer!.prepareToPlay()
    audioPlayer!.play()

请不要忽略上面代码中的行
try AVAudioSession.sharedInstance().setCategory(.playback)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM