使用 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 AudioApp 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 不能与 AirPlay 一起使用

AVPlayer 的音频音量超过 Airplay?

AVPlayer 与 AWS Cookie 使用 AirPlay

使用 AVPlayer 的播放器控件中未显示 Airplay 按钮

AVPlayer / Airplay 按钮

带有多个 AVPlayer 实例的 AirPlay