Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.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
从URL下载音频文件并在iOS应用程序中播放_Ios_Objective C_Avaudioplayer - Fatal编程技术网

从URL下载音频文件并在iOS应用程序中播放

从URL下载音频文件并在iOS应用程序中播放,ios,objective-c,avaudioplayer,Ios,Objective C,Avaudioplayer,我有一个从JSON响应中得到的URL,当我在浏览器中点击该URL时,文件被下载了,现在我想知道如何播放这样的URL,这是一个下载URL。我一直在寻找许多帖子,但没有一个能帮到我 我获取的url类型: 下面是我试过的代码 NSString *audio=[NSString stringWithFormat:@"%@.mp3",cell.url]; NSLog(@"url:%@",audio); NSURL *url = [NSURL fileURLWithPath:audio];

我有一个从JSON响应中得到的URL,当我在浏览器中点击该URL时,文件被下载了,现在我想知道如何播放这样的URL,这是一个下载URL。我一直在寻找许多帖子,但没有一个能帮到我

我获取的url类型:

下面是我试过的代码

  NSString *audio=[NSString stringWithFormat:@"%@.mp3",cell.url];
  NSLog(@"url:%@",audio);

  NSURL  *url = [NSURL fileURLWithPath:audio];
  NSData *soundData = [NSData dataWithContentsOfURL:url];
  NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                               NSUserDomainMask, YES) objectAtIndex:0]
                          stringByAppendingPathComponent:@"sound.caf"];
    [soundData writeToFile:filePath atomically:YES];
    NSError *error;
    _audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL
                                                           fileURLWithPath:filePath] error:&error];
    [_audioPlayer play];
    NSLog(@"error %@", error);

尝试使用AVPlayer或AVPlayerViewController,您可以使用直接URL播放mp3文件

即使使用本地文件,您也将首先将其下载到设备,然后从本地URL播放

不要忘记,由于自动释放,对象AVPlayer必须作为类的属性而不是本地对象,所以在类中声明player变量并在函数中设置,而不仅仅是在函数中本地设置,并尝试播放

[更新]


更多详细信息如何操作->

尝试使用AVPlayer或AVPlayerViewController,您可以使用直接URL播放mp3文件

即使使用本地文件,您也将首先将其下载到设备,然后从本地URL播放

不要忘记,由于自动释放,对象AVPlayer必须作为类的属性而不是本地对象,所以在类中声明player变量并在函数中设置,而不仅仅是在函数中本地设置,并尝试播放

[更新]

更多详细信息-请尝试以下操作:

    //download your audio file
    NSString *urlString = @"http://www.smartivr.in/sounds/voicemail/download/f77245d9-e7ee-4424-850c-6a45022d0a54_1.mp3";
    NSURL  *url = [NSURL fileURLWithPath:urlString];
    NSData *soundData = [NSData dataWithContentsOfURL:url];
    NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                               NSUserDomainMask, YES) objectAtIndex:0]
                          stringByAppendingPathComponent:@"sound.caf"];
    [soundData writeToFile:filePath atomically:YES];

    // get the file from directory
    NSArray *pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
    NSString *documentsDirectory = [pathArray objectAtIndex:0];
    NSString *soundPath = [documentsDirectory stringByAppendingPathComponent:@"sound.caf"];

    NSURL *soundUrl;
    if ([[NSFileManager defaultManager] fileExistsAtPath:soundPath])
    {
        soundUrl = [NSURL fileURLWithPath:soundPath isDirectory:NO];
    }

    // play audio file
    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundUrl error:nil];
    [audioPlayer prepareToPlay];
    [audioPlayer play];
您应该异步下载音频文件。

尝试以下方法:

    //download your audio file
    NSString *urlString = @"http://www.smartivr.in/sounds/voicemail/download/f77245d9-e7ee-4424-850c-6a45022d0a54_1.mp3";
    NSURL  *url = [NSURL fileURLWithPath:urlString];
    NSData *soundData = [NSData dataWithContentsOfURL:url];
    NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                               NSUserDomainMask, YES) objectAtIndex:0]
                          stringByAppendingPathComponent:@"sound.caf"];
    [soundData writeToFile:filePath atomically:YES];

    // get the file from directory
    NSArray *pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
    NSString *documentsDirectory = [pathArray objectAtIndex:0];
    NSString *soundPath = [documentsDirectory stringByAppendingPathComponent:@"sound.caf"];

    NSURL *soundUrl;
    if ([[NSFileManager defaultManager] fileExistsAtPath:soundPath])
    {
        soundUrl = [NSURL fileURLWithPath:soundPath isDirectory:NO];
    }

    // play audio file
    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundUrl error:nil];
    [audioPlayer prepareToPlay];
    [audioPlayer play];
您应该异步下载音频文件。

这里是错误

NSString *audio=[NSString stringWithFormat:@"%@.mp3",cell.url];
NSURL  *url = [NSURL fileURLWithPath:audio];
我假设它是一个远程url,您不能将其视为文件url。所以你必须使用

NSURL  *url = [NSURL urlWithString:audio];
这是个错误

NSString *audio=[NSString stringWithFormat:@"%@.mp3",cell.url];
NSURL  *url = [NSURL fileURLWithPath:audio];
我假设它是一个远程url,您不能将其视为文件url。所以你必须使用

NSURL  *url = [NSURL urlWithString:audio];

谢谢迪潘卡·达斯的帮助。 我在这里发布整个解决方案。 这对我来说绝对有效

    NSString *audio=@"http://www.smartivr.in/sounds/voicemail/download/f77245d9-e7ee-4424-850c-6a45022d0a54_1.mp3";
    NSURL  *url = [NSURL URLWithString:audio];
    NSData *soundData = [NSData dataWithContentsOfURL:url];
    NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                               NSUserDomainMask, YES) objectAtIndex:0]
                          stringByAppendingPathComponent:@"sound.caf"];
    [soundData writeToFile:filePath atomically:YES];

    // get the file from directory
    NSArray *pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
    NSString *documentsDirectory = [pathArray objectAtIndex:0];
    NSString *soundPath = [documentsDirectory stringByAppendingPathComponent:@"sound.caf"];

    NSURL *soundUrl;
    if ([[NSFileManager defaultManager] fileExistsAtPath:soundPath])
    {
        soundUrl = [NSURL fileURLWithPath:soundPath isDirectory:NO];
    }

    // plau audio file
    AVAudioSession *session = [AVAudioSession sharedInstance];
    [session setCategory:AVAudioSessionCategoryPlayback error:nil];
    _audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundUrl error:nil];
    [_audioPlayer prepareToPlay];
    [_audioPlayer play];
    [_audioPlayer setVolume:5.0];

谢谢迪潘卡·达斯的帮助。 我在这里发布整个解决方案。 这对我来说绝对有效

    NSString *audio=@"http://www.smartivr.in/sounds/voicemail/download/f77245d9-e7ee-4424-850c-6a45022d0a54_1.mp3";
    NSURL  *url = [NSURL URLWithString:audio];
    NSData *soundData = [NSData dataWithContentsOfURL:url];
    NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                               NSUserDomainMask, YES) objectAtIndex:0]
                          stringByAppendingPathComponent:@"sound.caf"];
    [soundData writeToFile:filePath atomically:YES];

    // get the file from directory
    NSArray *pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
    NSString *documentsDirectory = [pathArray objectAtIndex:0];
    NSString *soundPath = [documentsDirectory stringByAppendingPathComponent:@"sound.caf"];

    NSURL *soundUrl;
    if ([[NSFileManager defaultManager] fileExistsAtPath:soundPath])
    {
        soundUrl = [NSURL fileURLWithPath:soundPath isDirectory:NO];
    }

    // plau audio file
    AVAudioSession *session = [AVAudioSession sharedInstance];
    [session setCategory:AVAudioSessionCategoryPlayback error:nil];
    _audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundUrl error:nil];
    [_audioPlayer prepareToPlay];
    [_audioPlayer play];
    [_audioPlayer setVolume:5.0];


您应该尝试从url传输音频文件。编辑:@Marek说了什么。@Ramon,但这是一个下载url。@Shikha Sharma你想从下载的文件路径还是从你的在线url播放音频?@DipankarDas我只需要播放音频,不管怎样。首先,url是一个远程url,所以你必须使用
[NSURL URLWithString…
初始值设定项,通常不使用同步方法(如
dataWithContentsOfURL
)从远程URL加载数据。使用异步工作的
URLSession
。您应该尝试从URL传输音频文件。编辑:@Marek所说的。@Ramon,但这是一个下载URL。@Shikha Sharma你想从下载的文件路径或在线url播放音频?@DipankarDas我只需要播放音频,不管怎样。首先,url是远程url,所以你必须使用
[NSURL URLWithString…
初始值设定项,通常不使用像
dataWithContentsOfURL
这样的同步方法从远程URL加载数据。使用异步工作的
URLSession
。这就是我想知道的。如何准确地下载它,然后播放。因为我尝试了很多方法,但都不起作用。谢谢如果你愿意给我提供一些代码。哪里有问题?你至少应该描述一下具体是什么,哪一步不起作用。我有一个mp3 URL,我想在avplayer中播放。我已经尝试了所有可能的方法,但它只是不播放歌曲。有人知道从给定的URL支付歌曲的任何方法吗?这就是我想知道的。如何准确下载然后播放。因为我尝试了很多方法,但没有一种有效。如果你愿意提供一些代码,我将非常感激。问题出在哪里?你至少应该描述一下具体的内容以及哪一步不起作用。我有一个mp3 URL,我想在avplayer中播放。我已经尝试了所有可能的方法,但没有成功st不播放歌曲。任何人都知道从给定url支付歌曲的任何方法吗?但我听不到,我应用了相同的代码,尽管音量按钮在工作,否则它不会显示。但它是听不见的:(可能是什么原因,在我的设备中它听不见你可以在模拟器上检查。添加此[audioPlayer设置音量:1.0];用于声音。嘿,我找到了解决方案,但我听不见,我应用了相同的代码,尽管音量按钮正在工作,否则它不会显示。但它是听不见的:(可能是什么原因,在我的设备中它听不见你可以检查你的模拟器。添加此[audioPlayer设置音量:1.0];用于声音。嘿,我得到了解决方案我有一个mp3 URL,我想在avplayer中播放。我已经尝试了所有可能的方法,但它只是不播放歌曲。有人知道从给定URL支付歌曲的任何方法吗?我有一个mp3 URL,我想在avplayer中播放。我尝试了所有可能的方法,但它只是不播放歌曲歌曲。有人知道从给定的url支付歌曲的任何方法吗?