使用AVPlayer的Airplay并不总是有效。 “iPhone”选项在Airplay菜单中列出两次

时间:2013-01-04 07:09:16

标签: iphone xcode ios6 avplayer airplay

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菜单中列出两次please see the attached image的“iPhone”,有时候不会显示实际的Airplay设备。点击这两个重复选项中的任何一个似乎都没有做任何事情。此外,状态栏上的播放图标有时会出现,有时则不会。我猜每次都没有正确设置会话。

有谁可以告诉我这里我做错了什么?!另外,如果我想通过蓝牙播放,我是否需要实现其他代理?

2 个答案:

答案 0 :(得分: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

希望这有助于您或未来的人!

答案 1 :(得分:0)

我看到但同时又简单又奇怪:)你必须只删除这个功能。

这种方法:

[player setAllowsExternalPlayback:YES];
[player setUsesExternalPlaybackWhileExternalScreenIsActive: YES];
[player setAllowsAirPlayVideo:NO];//this is deprecated in iOS 6.0

成为:

[player setAllowsExternalPlayback:YES];
[player setUsesExternalPlaybackWhileExternalScreenIsActive: YES];

info.plist 允许必需的背景模式 a并设置:应用播放音频应用与附件进行通信< / strong>,然后添加一行并设置:应用程序使用WiFi

这就是全部;)

PS:你可以帮我解决我的问题here谢谢。