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 运行没有错误

PHP没有错误提示

为啥即使没有错误,表单也会出现错误消息?

clang:错误:没有这样的文件或目录:'dynamic_lookup' clang:错误:没有这样的文件或目录:'suppress'

vs2015 编译时错误列表中没有错误,dll却没有生成出来