簡體   English   中英

從URL下載音頻文件並在iOS App中播放

[英]Download Audio file from URL and play it in iOS App

我有一個從JSON響應中獲得的URL,當我在瀏覽器中單擊該URL時,文件已下載,現在我想知道如何播放這樣的URL(即下載URL)。我一直在尋找很多帖子,但都找不到可以幫助我。

網址類型: http : //www.smartivr.in/sounds/voicemail/download/f77245d9-e7ee-4424-850c-6a45022d0a54_1

下面是我嘗試的代碼。

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

嘗試這個:

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

您應該異步下載音頻文件。

謝謝Dipankar Das的幫助。 我在這里發布整個解決方案。 絕對對我有用。

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

嘗試使用AVPlayer或AVPlayerViewController,可以使用直接URL播放mp3文件

即使使用本地文件,也要先將其下載到設備,然后再從本地URL播放

不要忘記,由於自動釋放,對象AVPlayer必須作為您類的屬性而不是本地對象,因此,請在類中聲明您的播放器變量並在函數中進行設置,而不僅僅是在函數中進行本地設置並嘗試播放...

[更新]

更多詳細信息如何操作-> 如何在Swift中使用AVPlayerViewController(AVKit)播放視頻

這是錯誤

NSString *audio=[NSString stringWithFormat:@"%@.mp3",cell.url];
NSURL  *url = [NSURL fileURLWithPath:audio];

我認為這是一個遠程URL,您不能將其視為文件URL。 所以你必須使用

NSURL  *url = [NSURL urlWithString:audio];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM