Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.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上通过在线url播放音频_Iphone_Ios_Objective C_Xcode_Avaudioplayer - Fatal编程技术网

如何在iPhone上通过在线url播放音频

如何在iPhone上通过在线url播放音频,iphone,ios,objective-c,xcode,avaudioplayer,Iphone,Ios,Objective C,Xcode,Avaudioplayer,我知道很多人以前都问过这个问题,但我不知道为什么在我的x代码和objective c应用程序中这个问题不起作用 基本上,我想从url在应用程序中播放音频。仅使用苹果网站的测试音频,我的代码是: NSString *playString = @"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"; //Converts songURL into a playable NSURL NSURL *playURL = [NS

我知道很多人以前都问过这个问题,但我不知道为什么在我的x代码和objective c应用程序中这个问题不起作用

基本上,我想从url在应用程序中播放音频。仅使用苹果网站的测试音频,我的代码是:

NSString *playString = @"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8";

//Converts songURL into a playable NSURL
NSURL *playURL = [NSURL URLWithString:playString];

AVAudioPlayer *backgroundMusicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:playURL error:&error];

if (backgroundMusicPlayer == nil) {
    NSLog(@"%@", [error description]);
}
else {
    [backgroundMusicPlayer prepareToPlay];
    [backgroundMusicPlayer play];
}
它会出现以下错误:

错误域=NSOSStatusErrorDomain Code=-43“操作无法完成。(OSStatus错误-43。)

当我在谷歌上搜索时,我什么也找不到。 有什么想法吗?我应该尝试另一个音频流吗?或者有人有一个有效的例子吗?是因为我使用的是iPhone模拟器而不是实际的iPhone吗

编辑:

请注意-当我说URL时,我指的是来自实际网站,如“”
我不想先下载歌曲,我希望能够在下载时播放歌曲!谢谢使用AVPlayer从url播放mp3文件

-(void)playselectedsong{

    AVPlayer *player = [[AVPlayer alloc]initWithURL:[NSURL URLWithString:urlString]];
    self.songPlayer = player;
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(playerItemDidReachEnd:)
                                                 name:AVPlayerItemDidPlayToEndTimeNotification
                                               object:[songPlayer currentItem]];
    [self.songPlayer addObserver:self forKeyPath:@"status" options:0 context:nil];
    [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateProgress:) userInfo:nil repeats:YES];

    [self.songPlayer play];

}
- (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");


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

        }
    }
}

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

 //  code here to play next sound file

}

使用AVAudioPlayer非常简单,将对象作为AVAudioPlayer*audioPlayer

  NSURL *url = [NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"];
  NSData *soundData = [NSData dataWithContentsOfURL:url];
  audioPlayer = [[AVAudioPlayer alloc] initWithData:soundData  error:NULL];
  audioPlayer.delegate = self;
  [audioPlayer play];
写下以下委托方法:

 -(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
    [audioPlayer stop];
     NSLog(@"Finished Playing");
  }

 - (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error
 {
  NSLog(@"Error occured");
 }

要播放文件,请使用:

[player play];
下面是从URL播放实时流的代码:

NSURL *url = [NSURL URLWithString:@"<#Live stream URL#>];
self.playerItem = [AVPlayerItem playerItemWithURL:url];
    /* [playerItem addObserver:self forKeyPath:@"status" options:0 context:&ItemStatusContext]; (can use it) */
self.player = [AVPlayer playerWithPlayerItem:playerItem];
self.player = [AVPlayer playerWithURL:<#Live stream URL#>];
//(optional) [player addObserver:self forKeyPath:@"status" options:0 context:&PlayerStatusContext];
NSURL*url=[NSURL-URLWithString:@“];
self.playerItem=[AVPlayerItem playerItemWithURL:url];
/*[playerItem addObserver:self-forKeyPath:@“状态”选项:0上下文:&ItemStatusContext];(可以使用它)*/
self.player=[AVPlayer playerWithPlayerItem:playerItem];
self.player=[AVPlayer playerWithURL:];
//(可选)[player addObserver:self-forKeyPath:@“状态”选项:0上下文:&PlayerStatusContext];

将Url转换为NSData并像NSData*soundData=[NSData DATA WITH CONTENTS OFURL:playURL]一样使用;BackgroundMusicLayer=[[AVAudioPlayer alloc]initWithData:soundData错误:NULL]@falky bcoz here url必须是本地类型,如果我们使用initWithContentsOfURL。那么将其转换为NSDATA您的url是什么,直播?@murali ah干杯。我不完全明白那一点,我来测试一下。谢谢你。另一个问题,URL是否必须以.mp3结尾,或者是类似index.php的东西?songID=1234…我将测试它!Mac OS错误-43(fnfErr):如果我们使用initWithContentsOfURL,文件找不到cOz here url必须是local类型。因此将其转换为NSDATA非常感谢您的帮助。我还是不明白为什么这不管用。我需要改变什么?我没有像上面那样放入任何void委托方法…:NSString*playString=@“”;NSURL*playURL=[NSURL URLWithString:playString];NSData*soundData=[NSData DATA with contentsOfURL:playURL];AVAudioPlayer*BackgroundMusicLayer=[[AVAudioPlayer alloc]initWithData:soundData错误:&error];[背景音乐播放准备播放];[背景音乐播放];将播放列表文件下载到本地文件系统对于
AVAudioPlayer
缺乏流媒体支持不是一个可行的解决办法。@Carlvaezey那么mate你有什么建议?我正在播放mp3 url中的歌曲。这些代码对我不起作用。你有其他解决方案或其他方法吗?为什么
self.player
要初始化两次?!我已经按照你的代码,但它只是不播放歌曲。而且也没有错误。你知道我错过了什么吗?我试过了,但它没有播放任何来自给定URL的歌曲。知道为什么吗?@Moxarth你能在这里分享url吗?我解决了问题。谢谢你的方法对我帮助很大。确保你以正确的方式完成你的答案。例如,什么是
self.songPlayer
??????