AVPlayer/AudioPlayer:没有错误但没有声音
Posted
技术标签:
【中文标题】AVPlayer/AudioPlayer:没有错误但没有声音【英文标题】:AVPlayer/AudioPlayer: No error but no sound 【发布时间】:2015-05-18 14:23:02 【问题描述】:我已经尝试了十几种不同的方式来尝试流式传输this radio station。然而,无论我尝试了多少不同的方法,它们都没有奏效。我意识到提供的链接不是 .mp3 文件,也不是任何类型的音频文件(我不确定在哪里可以找到流式广播电台的音频文件),但我尝试了其他与同样缺乏好的结果。当我在我的 viewdidload 方法中尝试这个时,没有错误但没有结果:
NSError *sessionError = nil;
[[AVAudiosession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&sessionError];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
// Init player
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:@"http://tunein.com/radio/KOIL-1290-s33415/?streamid=61377300"]];
AVPlayer *audioPlayer = [AVPlayer playerWithPlayerItem: playerItem];
[audioPlayer play];
我也尝试过所有这些方法(每种方法都有自己的 /* ... */):
/*
NSData *_objectData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://tunein.com/radio/KOIL-1290-s33415/"]];
NSError *error;
AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithData:_objectData error:&error];
audioPlayer.numberOfLoops = 0;
audioPlayer.volume = 1.0f;
[audioPlayer prepareToPlay];
if (audioPlayer == nil)
NSLog(@"%@", [error description]);
else
[audioPlayer play];
*/
/*
NSURL *url = [NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"];
// You may find a test stream at <http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8>.
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:url];
//(optional) [playerItem addObserver:self forKeyPath:@"status" options:0 context:&ItemStatusContext];
AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem];
player = [AVPlayer playerWithURL:[NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"]];
//(optional) [player addObserver:self forKeyPath:@"status" options:0 context:&PlayerStatusContext];
*/
/*
NSString* resourcePath = @"http://streema.com/radios/play/7146"; //your url
NSURL *url = [[NSURL alloc]initWithString:resourcePath];
AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
audioPlayer.delegate = self;
[audioPlayer prepareToPlay];
[audioPlayer play];
*/
/*
//download file and play from disk
NSData *audioData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"]];
NSString *docDirPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *filePath = [NSString stringWithFormat:@"%@/%@.mp3", docDirPath , @"listen"];
[audioData writeToFile:filePath atomically:YES];
NSError *error;
NSURL *fileURL = [NSURL fileURLWithPath:filePath];
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:&error];
if (player == nil)
NSLog(@"AudioPlayer did not load properly: %@", [error description]);
else
[player play];
*/
编辑:我也尝试过this,但没有成功。
【问题讨论】:
【参考方案1】:在您的每一次尝试中,问题在于您的 AVPlayer 仅由局部变量引用:
AVPlayer *audioPlayer = [AVPlayer playerWithPlayerItem: playerItem];
[audioPlayer play];
因此,您将播放器告诉播放器,然后您的代码结束,播放器在有机会开始播放任何内容之前就被销毁!如果你想让它播放,你需要让播放器 persist 至少在播放期间。使其成为视图控制器或其他类实例的实例变量/属性,并将持续这么长时间。
【讨论】:
哇。好的,我现在正在尝试。 不幸的是,我不认为只是这样。例如,我刚刚尝试了这个:NSString* resourcePath = @"http://broadcast.infomaniak.net/radionova-high.mp3"; NSURL *url = [[NSURL alloc]initWithString:resourcePath]; self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; self.audioPlayer.delegate = self; [self.audioPlayer prepareToPlay]; [self.audioPlayer play];
,属性设置为:@property AVAudioPlayer *audioPlayer,以及 AVAudiPlayerDelegate,但我仍然没有结果。
我并不是说只是。我对您尝试使用的特定 URL 一无所知。但我说的是对的。你永远不会听到任何声音,因为你的播放器还没来得及播放就化作一团烟雾消失了。让我们一次解决一个问题。说服自己,现在您可以玩 something (这在以前是不可能的;使用您的代码,您根本无法玩任何东西)。然后,如果您对您的 URL 有其他问题,使用实际可以播放某些内容的代码,请询问。
是的,我明白了。非常感谢您指出这一点。问题是我尝试了很多不同的 URL,但都无法正常工作。
不要使用流式 URL 进行测试。从应用程序包中声音文件的文件 URL 开始。从小做起,做大做强。以上是关于AVPlayer/AudioPlayer:没有错误但没有声音的主要内容,如果未能解决你的问题,请参考以下文章
Maven 命令 mvn 从终端运行没有错误,但从 python 运行没有错误
clang:错误:没有这样的文件或目录:'dynamic_lookup' clang:错误:没有这样的文件或目录:'suppress'