
我可以通过在iOS 8上运行应用程序自己来重现问题.由于应用程序本身很复杂,所以我做了一个简单的演示来显示问题.我使用Xcode 6,Base SDK设置为iOS 8.我已经在我的Info.pList中添加了uibackgroundmodes的音频.有人知道下面的代码有什么问题吗?
- (BOol)application:(UIApplication *)application dIDFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSURL *streamingURL = [NSURL URLWithString:@"http://www.radiofmgold.be/stream.PHP?ext=pls"]; AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:streamingURL]; [self setPlayerItem:playerItem]; AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem]; [player setAllowsExternalPlayback:NO]; [self setPlayer:player]; [player play]; [[AVAudioSession sharedInstance] setcategory:AVAudioSessioncategoryPlayback error:nil]; [[AVAudioSession sharedInstance] setActive: YES error: nil]; return YES;}解决方法 我在iOS 8.0.2下遇到了同样的问题.我的远程音频源在mp3播放. 似乎内部错误导致AVAudioSession重新启动.你可以用不同的方式来处理它:
您可以观察AVPlayerItem的状态.
voID* YourAudioControllerItemStatusContext = "YourAudioControllerItemStatusContext";...@implementation YourAudioController...- (voID)playStream { ... AVPlayerItem *item = [[AVPlayerItem alloc] initWithURL:streamUrl]; [item addobserver:self forKeyPath:@"status" options:0 context:MJAudioControllerItemStatusContext];}- (voID)observeValueForKeyPath:(Nsstring *)keyPath ofObject:(ID)object change:(NSDictionary *)change context:(voID *)context { if (context == YourAudioControllerItemStatusContext) { AVPlayerItem *item = object; if (item.status == AVPlayerItemStatusFailed) { [self recoverFromError]; } } 这种方式看起来不是可靠的,因为在AVPlayerItem的状态发生变化之前可能会有很大的时间延迟 – 如果它改变了.
我通过observeValueForKeyPath调试,发现AVPlayerItem的状态更改为AVErrorMediaServicesWerereset,并且具有错误代码-11819设置.
由于我经历了AVErrorMediaServicesWerereset错误,我研究了什么导致这个错误 – 这是AVAudioSession疯了.参考Apple的Technical Q&A,您应该注册AVAudioSessionMediaServicesWereresetNotifications.把你的代码放在某个地方:
[[NSNotificationCenter defaultCenter] addobserver:self selector:@selector(audioSessionWasreset:) name:AVAudioSessionMediaServicesWereresetNotification object:nil];
然后添加这个方法:
- (voID)audioSessionWasreset:(NSNotification *)notification { [self recoverFromError];} 在recoverFromError方法中,尝试以下方法之一:
>显示一条警告,描述在iOS 8下的问题,流需要重新启动
>通过再次设置AVAudioSession激活流并通过新的AVPlayerItem实例化一个新的AVPlayer实例
在这个时刻,我知道如何处理它的唯一方法.问题是为什么AudioSession正在重新启动.
UPDATEiOS 8.1接缝的发布已经解决了这个问题.
总结以上是内存溢出为你收集整理的10分钟后,iOS 8将在后台停止流式传输音频全部内容,希望文章能够帮你解决10分钟后,iOS 8将在后台停止流式传输音频所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)