AirPlay使用詳解

AirPlay使用詳解

先上Demo地址 https://github.com/HeYming/AirPlayer

之前項(xiàng)目中,老大要求需要支持隔空,特地研究下這個(gè)是如何使用。

AirPlay

MPVolumeView

MPVolumeView是MediaPlayer框架里面的一個(gè)組件,調(diào)節(jié)音量使用的控件。但是他在iOS 9.0之前,還可以用來支持AirPlay功能。

_View_airplay = [[MPVolumeView alloc] initWithFrame:CGRectMake(20, 350, 30, 30)];
_View_airplay.showsVolumeSlider = NO;    
[self.view addSubview:_View_airplay];

他的用法很簡單,創(chuàng)建一個(gè)View,設(shè)置大小位置,放到View上就可以了。
但是這個(gè)方法在iOS9.0之后就取消了。且在無AirPlay設(shè)備的時(shí)候是不會顯示的。
當(dāng)有AirPlay設(shè)備后,他就會顯示出來。注意他是個(gè)白色icon,背景色為白色的時(shí)候可能會看不見。

AVRoutePickerView

那么在iOS9之后MPVolumeView不再更新了就沒有新的AirPlay組件了嗎?
當(dāng)然不會,蘋果在iOS11的時(shí)候,在AVKit框架中加入了AVRoutePickerView組件,用來代替原來的MPVolumeView。

AVRoutePickerView * view = [[AVRoutePickerView alloc]initWithFrame:CGRectMake(100, 350, 30, 30)];
//活躍狀態(tài)顏色
view.activeTintColor = [UIColor redColor];
//設(shè)置代理
view.delegate = self;
[self.view addSubview:view];

基本上看起來跟MPVolumeView沒有什么區(qū)別,但是AVRoutePickerView的默認(rèn)icon改了,注意區(qū)分。


icon

AVRoutePickerView也新增了兩個(gè)代理:

//AirPlay界面彈出時(shí)回調(diào)
- (void)routePickerViewWillBeginPresentingRoutes:(AVRoutePickerView *)routePickerView API_AVAILABLE(ios(11.0)){
    _lab.text = @"AirPlay界面彈出時(shí)回調(diào)";
}
//AirPlay界面結(jié)束時(shí)回調(diào)
- (void)routePickerViewDidEndPresentingRoutes:(AVRoutePickerView *)routePickerView API_AVAILABLE(ios(11.0)){
    _lab.text = @"AirPlay界面結(jié)束時(shí)回調(diào)";
}

這兩個(gè)代理是在彈出選擇設(shè)備界面的時(shí)候調(diào)用的,可以把暫停開始功能加入到這個(gè)代理方法里面增加用戶體驗(yàn)。


delegate

需要注意的是,AVRoutePickerView在周邊沒有AirPlay設(shè)備的時(shí)候也會顯示icon。

手動管理

這個(gè)就直接看DEMO吧,這部分代碼來源于https://github.com/coderMYC/Airplay這位大佬的項(xiàng)目。
這部分可以在無音視頻的情況下連接到AirPlay設(shè)備,在將播放連接丟給AirPlay設(shè)備。親測可以后臺播放,但是附近無AirPlay設(shè)備的時(shí)候,也是無法查找到設(shè)備的。

其他事項(xiàng)

AirPlay可以在當(dāng)前界面沒有音視頻的時(shí)候創(chuàng)建,當(dāng)連接到AirPlay設(shè)備后,音視頻播放會直接在AirPlay設(shè)備上播放而不在當(dāng)前設(shè)備上播放,這點(diǎn)需要注意。

AirPlay功能實(shí)現(xiàn)很簡單,但是存在換代的問題,iOS11之前用的MPVolumeView所在的框架播放器,功能簡陋且原生不支持進(jìn)度條拖動。


MPVolumeView

iOS11之后的AVKit框架中AVPlayerViewController播放器則功能更豐富一些,如果不需要深度定制,建議大家使用AVPlayerViewController播放器來播放視頻。


MPVolumeView

當(dāng)然,AVPlayer也不是萬能的,他無法播放flv格式的視頻。當(dāng)AVPlayer也無法滿足需求的時(shí)候,這個(gè)時(shí)候萬能播放解碼器FFmpeg來了。知名視頻播放框架ijkplayer就采用了MediaPlayer、AVPlayer和FFmpeg三種解碼模式。但是在FFmpeg模式下,AirPlay設(shè)備只能播放音頻,不能播放視頻,目前還無解決方案,有哪位大神有方案請告知。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容