amb*_*ght 4 audiotoolbox ios airplay
我正在使用MPVolumeView为avplayer airplay播放选择airplay设备.是否有任何可能的非私有API替代方案,所以我可以提供自己的UI控件来挑选airplay设备?
通过引用API,我的意思是,我只需要:
我知道AudioToolbox框架提供了一些额外的API来处理AudioSession,但我发现重新路由音频的唯一方法是AVAudioSession:
- (BOOL)overrideOutputAudioPort:(AVAudioSessionPortOverride)portOverride error:(NSError **)outError`
Run Code Online (Sandbox Code Playgroud)
只允许将音频重新路由到内置扬声器.也许还有其他方法如何在那里实现它?(我也只找到了如何检索AirplayDevice的名称作为currentAudioRoute的描述的方式 - 使用AVPlayer获取AirPlay设备的名称)
所以我的问题的确切答案:
(i)除了切换到内置扬声器之外,不可能使用公共API以编程方式切换audioRoutes.
[[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil];
Run Code Online (Sandbox Code Playgroud)
(ii)如果是有效的AudioRoute,您只能检索airplay-device的名称.使用AVPlayer获取AirPlay设备的名称
因此,提供用于选择播放的自定义UI控件的实用解决方案将是:
要自定义MPVolumeView
,您可以在其中禁用volumeSlider
和自定义routeButton
.但是UIActionSheet
当你点击时routeButton
,你没有其他选择在弹出窗口中选择与苹果兼容的无线设备(airPlay,蓝牙等)列表中的airplayDevice ,但你可以通过订阅audioRouteChangeNotification观察用户何时进行选择:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(audioRouteHasChangedNotification:) name:AVAudioSessionRouteChangeNotification object:[AVAudioSession sharedInstance]];
Run Code Online (Sandbox Code Playgroud)
(另请注意,如果您要插入/拔出耳机,它也会触发此通知)
如果您有兴趣检索所有可用的audioRoutes并使用私有API以编程方式切换:
MPMediaPlayer
框架包含一个私有类MPAVRoutingController
,它允许您完全:
Class MPAVRoutingController = NSClassFromString(@"MPAVRoutingController");
Class MPAVRoute = NSClassFromString(@"MPAVRoute");
id routingController = [[MPAVRoutingController alloc] init];
NSArray* availableRoutes = [routingController performSelector:@selector(availableRoutes)];
BOOL isSwitchSuccesful = [[routingController performSelector:@selector(pickRoute:) withObject:availableRoutes.lastObject] boolValue];
Run Code Online (Sandbox Code Playgroud)
(如果你想访问audioRoute信息并检查它是否是Airplay:检测airplayRoute)
归档时间: |
|
查看次数: |
2920 次 |
最近记录: |