【问题标题】:avplayer is not playing the URLavplayer 没有播放 URL
【发布时间】:2018-08-11 14:54:13
【问题描述】:

我正在使用 avplayer 播放音频 url,但它不起作用,我不知道我错在哪里

NSString *radioURL = @"https://www.example.com";

radioPlayer = [AVPlayer playerWithURL:[NSURL URLWithString:radioURL]] ;
// [radioPlayer seekToTime:kCMTimeZero];
NSLog(@"radio player %@",radioPlayer.currentItem);
[radioPlayer play];

任何帮助将不胜感激。

【问题讨论】:

  • 我认为 URL 必须有扩展名,例如 example.com/myfile.mp3
  • radioURL 不是可以播放的有效文件。
  • 感谢您的回复,但如果我在浏览器或其他任何地方播放,网址就可以使用。
  • 向我们展示真实的 URL。不是example.com
  • 用 AVplayer 检查这个stackoverflow.com/questions/15850447/… 否则你可以使用 AVAudioPlayer

标签: ios avplayer


【解决方案1】:

我强烈推荐下面的代码来播放广播流:也请看看AVPlayer_Class

 -(void)Play{
        NSString *radioURL = @"https://www.example.com"; //this url must valid 
        AVPlayer *player = [[AVPlayer alloc]initWithURL:[NSURL URLWithString:radioURL]];
        self.songPlayer = player;    //self.songPlayer is a globle object of avplayer
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(playerItemDidReachEnd:)
                                                     name:AVPlayerItemDidPlayToEndTimeNotification
                                                   object:[songPlayer currentItem]];
        [self.songPlayer addObserver:self forKeyPath:@"status" options:0 context:nil];
}


- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {

        if (object == songPlayer && [keyPath isEqualToString:@"status"]) {
            if (songPlayer.status == AVPlayerStatusFailed) {
                NSLog(@"AVPlayer Failed");

            } else if (songPlayer.status == AVPlayerStatusReadyToPlay) {
                NSLog(@"AVPlayerStatusReadyToPlay");
                [self.songPlayer play];


            } else if (songPlayer.status == AVPlayerItemStatusUnknown) {
                NSLog(@"AVPlayer Unknown");

            }
        }
    }

- (void)playerItemDidReachEnd:(NSNotification *)notification {

     //  code here to play next sound file

    }

参考链接是 - Streaming mp3 audio with AVPlayer

【讨论】:

  • 得到响应 AVPlayerStatusReadyToPlay,但音频没有播放 :(
  • 你是在哪里测试的设备或模拟器?如果设备然后请检查 iphone 不是静音模式
  • 能否分享一个流媒体的网址。
  • @NitinGohel,上面的代码对我不起作用。iPhone 不是静音模式。知道吗?
  • 我应该为 https 做些什么?
【解决方案2】:

我遇到了同样的问题,只是意识到我没有保留玩家(使用 ARC)!所以它会在开始后立即被释放并停止播放。

您需要确保您有一个强大的属性 radioPlayer 并使用 self.radioPlayer 而不是 radioPlayer。

【讨论】:

  • @ Borzh,我和你一样。在我的情况下,我得到响应 AVPlayerStatusReadyToPlay,但没有播放音频。请尽快回复。谢谢
  • @Monu singh,可能你还有其他问题,我只是告诉了我自己遇到的问题。
【解决方案3】:

你做得很好,但你的方法需要在一个地方更正。使用以下方法检查:

NSURL *audioURL = [NSURL URLWithString:radioURL];
NSData *audioData = [NSData dataWithContentsOfURL:audioURL];
self.audioPlayer = [[AVAudioPlayer alloc] initWithData:audioData error:nil];
self.audioPlayer.numberOfLoops = -1;
self.audioPlayer.delegate = self;
[self.audioPlayer prepareToPlay];
self.audioPlayer.volume=1.0;
[self.audioPlayer autorelease];
[self.audioPlayer Play];

并为 AVAudioPlayer 添加适当的委托方法。

【讨论】:

  • 无需转换为 NSData
【解决方案4】:

确保 URL 为 AddingPercentEscapes

NSURL *audioURL = // Your Url;
NSString *encodedString = [@"Your Url" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *myURL = [[NSURL alloc] initWithString:encodedString]
AVPlayer *player = [AVPlayer playerWithURL:myURL];
[player prepareToPlay];
player play];

【讨论】:

  • 奇怪...prepareToPlay 是从哪里来的?在 AVPlayer 中?似乎在 .h 源 io8 上找不到它是被删除了吗?
  • 这可能是错误的,因为它是 AVAudioPlayer 上的方法,而不是 AVPlayer
【解决方案5】:

你忘了设置属性App Transport Security Settings -> Allow Arbitrary Loads (Yes)吗?

【讨论】:

    猜你喜欢
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多