使用 AVPlayer 的 Airplay 并不总是有效。 “iPhone”选项在 Airplay 菜单中列出两次
Posted
技术标签:
【中文标题】使用 AVPlayer 的 Airplay 并不总是有效。 “iPhone”选项在 Airplay 菜单中列出两次【英文标题】:Airplay using AVPlayer does not always work. 'iPhone' option listed twice in the Airplay menu 【发布时间】:2013-01-04 07:09:15 【问题描述】:NSError *sessionError = nil;
[[AVAudiosession sharedInstance] setDelegate:self];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&sessionError];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
//Direct audio to speakers when there is no headphone
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[player setAllowsExternalPlayback:YES];
[player setUsesExternalPlaybackWhileExternalScreenIsActive: YES];
[player setAllowsAirPlayVideo:NO];
以上是我尝试设置适当的会话以启用 Airplay 的代码。它有时会起作用,但不管它是否起作用,它通常会在 Airplay 菜单中列出两次“iPhone”,有时不会显示实际的 Airplay 设备。点击这两个重复选项中的任何一个似乎都没有做任何事情。状态栏上的播放图标有时会出现,有时不会。我猜会话每次都没有正确设置。
谁能告诉我我在这里做错了什么?!另外,如果我想通过蓝牙启用播放,是否需要实现一些其他委托?
【问题讨论】:
任何帮助将不胜感激。真的需要这个尽快工作。有高手吗? 【参考方案1】:我今天看到你的帖子,在这种模式下使用你的代码:
在您的 AppDelegate .M 中:
NSError *sessionError = nil;
[[AVAudioSession sharedInstance] setDelegate:self];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:&sessionError];
[[AVAudioSession sharedInstance] setActive:NO error:nil];
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
在你的 View.m 中使用这个:
[player setAllowsExternalPlayback:YES];
[player setUsesExternalPlaybackWhileExternalScreenIsActive: YES];
[player setAllowsAirPlayVideo:NO];//this is deprecated in iOS 6.0
希望这对您或未来的人有所帮助!
【讨论】:
是的,我已经知道了,应该在这里更新它。有趣的是,如果不使用已弃用的方法,即使在 iOS 6.0 上,我也无法让它工作 我知道这是 [player setAllowsAirPlayVideo:NO];//这在 iOS 6.0 中已被弃用,对吧?【参考方案2】:我明白了,但同时又简单又奇怪 :) 你只需要删除这个功能。
这个方法:
[player setAllowsExternalPlayback:YES];
[player setUsesExternalPlaybackWhileExternalScreenIsActive: YES];
[player setAllowsAirPlayVideo:NO];//this is deprecated in iOS 6.0
成为:
[player setAllowsExternalPlayback:YES];
[player setUsesExternalPlaybackWhileExternalScreenIsActive: YES];
在您的 info.plist 中允许 Required Background Modes 并设置:App Plays Audio 和 App Communicates with an Accessories,然后添加一行并设置:Application uses WiFi.
仅此而已;)
PS:你可以帮我解决我的问题here谢谢。
【讨论】:
PPS 如果你想允许你的应用程序来自 iOS 6.x 或更少,你必须设置 info plist 并且不要删除行 [player setAllowsAirPlayVideo:NO];因为在 iOS 6.0 及更高版本上已弃用,但在 5.x ext 上是必需的。以上是关于使用 AVPlayer 的 Airplay 并不总是有效。 “iPhone”选项在 Airplay 菜单中列出两次的主要内容,如果未能解决你的问题,请参考以下文章
AVPlayer 与 AWS Cookie 使用 AirPlay