从 URL 下载音频文件并在 iOS 应用程序中播放
Posted
技术标签:
【中文标题】从 URL 下载音频文件并在 iOS 应用程序中播放【英文标题】:Download Audio file from URL and play it in iOS App 【发布时间】:2017-01-12 10:12:54 【问题描述】:我有一个从 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);
【问题讨论】:
您应该尝试从 url 流式传输音频文件。编辑:@Marek 所说的。 @Ramon 但它是一个下载网址。 @Shikha Sharma 您想从下载的 filePath 还是从您的在线 url 播放音频? @DipankarDas 我只需要播放音频,不管怎样。 首先,URL 是一个远程 URL,所以你必须使用[NSURL URLWithString...
初始化器,并且通常不要使用像 @ 这样的同步方法从远程 URL 加载数据987654324@。使用异步工作的URLSession
。
【参考方案1】:
试试这个:
//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];
您应该异步下载音频文件。
【讨论】:
但我听不见,我应用了相同的代码,虽然音量按钮正在工作,否则它没有显示。但听不见 :( 可能是什么原因,我的设备听不到它 你可以在你的模拟器上查看。 添加这个 [audioPlayer setVolume:1.0];声音。 嘿,我知道了【参考方案2】:感谢 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];
【讨论】:
我有一个 mp3 URL,我想在 avplayer 中播放。我已经尝试了所有可能的方法,但它只是不播放这首歌。有人知道从给定网址支付歌曲的任何方法吗?【参考方案3】:尝试使用 AVPlayer 或 AVPlayerViewController,可以使用直接 URL 播放 mp3 文件
即使是本地文件,您也会先将其下载到设备,然后从本地 URL 播放
不要忘记,由于自动释放,对象 AVPlayer 必须作为类的属性而不是本地对象,因此在类中声明您的播放器变量并在函数中设置,而不仅仅是在函数中本地并尝试播放...
[更新]
更多细节如何做 -> How to play video with AVPlayerViewController (AVKit) in Swift
【讨论】:
这就是我想知道的。如何准确下载它然后播放。因为我尝试了很多方法,但都没有奏效。如果您愿意提供一些代码,我将不胜感激。 哪里出了问题?你至少应该描述到底是什么以及哪个步骤不起作用 我有一个 mp3 URL,我想在 avplayer 中播放。我已经尝试了所有可能的方法,但它只是不播放这首歌。有人知道从给定网址支付歌曲的任何方法吗?【参考方案4】:这里是错误
NSString *audio=[NSString stringWithFormat:@"%@.mp3",cell.url];
NSURL *url = [NSURL fileURLWithPath:audio];
我假设它是一个远程 url,你不能把它当作一个文件 url。所以你必须使用
NSURL *url = [NSURL urlWithString:audio];
【讨论】:
以上是关于从 URL 下载音频文件并在 iOS 应用程序中播放的主要内容,如果未能解决你的问题,请参考以下文章