title: AirPlay
date: 2016-07-16
tags: AirPlay,AirPlay設(shè)備自動(dòng)選擇
博客地址
AirPlay
需求:繞過系統(tǒng)限制同欠,自動(dòng)選擇支持
AirPlay
的設(shè)備
Airplay基礎(chǔ)知識(shí)
要調(diào)用出AirPlay列表需要使用到MPVolumeView
控件贼涩,當(dāng)系統(tǒng)檢測(cè)到網(wǎng)絡(luò)環(huán)境中有支持AirPlay
的設(shè)備時(shí)才會(huì)出現(xiàn)AirPlay
圖標(biāo),用戶點(diǎn)擊這個(gè)圖標(biāo)权悟,呼出支持AirPlay
的設(shè)備列表。
MPVolumeView *volumView = [[MPVolumeView alloc] initWithFrame:CGRectMake(60, 100, 40, 40)];
[volumView setRouteButtonImage:[UIImage imageNamed:@"pic-02"] forState:UIControlStateNormal];
volumView.showsVolumeSlider = NO;
setRouteButtonImage
自定義AirPlay
圖標(biāo)
自動(dòng)選擇AirPlay設(shè)備
自動(dòng)選擇AirPlay設(shè)備要使用了MediaPlayer.framework
的私用類MPAVRoutingController
,在這里可以搜到iOS所有的framework
的頭文件。
Class MPAVRoutingController = NSClassFromString(@"MPAVRoutingController");
self.routerController = [[MPAVRoutingController alloc] init];
[self.routerController setValue:self forKey:@"delegate"];
[self.routerController setValue:[NSNumber numberWithLong:2] forKey:@"discoveryMode"];
NSClassFromString
獲取MPAVRoutingController
類定義吵血,并通過KVC給它的屬性賦值,discoveryMode
為2時(shí)才能及時(shí)在AirPlay
設(shè)備發(fā)生變化時(shí)觸發(fā)它協(xié)議的-(void)routingControllerAvailableRoutesDidChange:(id)arg1;
方法
-(void)routingControllerAvailableRoutesDidChange:(id)arg1{
if (self.deviceName == nil) {
return;
}
NSArray *availableRoutes = [self.routerController valueForKey:@"availableRoutes"];
for (id router in availableRoutes) {
NSString *routerName = [router valueForKey:@"routeName"];
if ([routerName rangeOfString:self.deviceName].length >0) {
BOOL picked = [[router valueForKey:@"picked"] boolValue];
if (picked == NO) {
[self.routerController performSelector:@selector(pickRoute:) withObject:router];
}
return;
}
}
}
在
MPAVRoutingControllerDelegate
的routingControllerAvailableRoutesDidChange
用代碼來選擇用戶指定的AirPlay
設(shè)備,如果用戶想取消自動(dòng)選擇的功能偷溺,將deviceName屬性賦值為nil即可蹋辅。