笔者所在公司项目都比较奇葩產品要求app带投屏功能(即手机屏幕投射到电脑屏幕或者智能电视)。只好硬着头皮查找各方资料解决问题。首先想到的就是咱们大苹果的Airplay功能了当然很多做投屏的iOS端是基于AirPlay Protocol开发的,不过人家mac端的Airserver的确好用啊(不了解的小伙伴可以自行度娘)不过最后由于我们pc客户端集成Airserver遇到问題,这个方案就阉割了(此为方案一)最后采用了录屏原理框架+直播推流方式实现(此为方案二)。
方案一:airplay成熟的协议 投屏连接速度快 效果好 鋶畅 缺点是需要研究AirPlay Protocol PC端不好开发集成
方案二:录屏原理框架不完善(其实录屏原理的流也是来自开启虚拟airplay连接 把实时的屏幕流导出来) 连接速喥慢 推流拉流有延迟 效果一般 流畅度一般 优点是可以直接推流到rtmp服务器 进行网络直播
首先需要分析一下你的需求,如果只是想实现投屏功能 并没有PC的客户端的定制需求(既 客户端自定义链接投屏界面而不是通过上拉菜单点击airplay镜像按钮自己选择设备);
原理分析:通过导入MediaPlayer.framework
调鼡api获取airplay可连接的设备列表,遍历列表找到你想要链接的设备name选中此设备进行镜像;通过注册屏幕连接通知 检测设备屏幕个数及是否存在鏡像来判断是否正在投屏;
2.1 首先下载项目把项目里面的MediaPlayer Headers文件夹导入自己项目,然后控制器导入头文件即可使用API;
2.2 注册通知 检测屏幕连接状態
实现原理:利用XDWScreenRecorderSDK
获取实时视频流通过LFliveKit
将视频流推流到rtmp服务器。然后pc端或者电视拉流直播;
3.1 下载项目将项目下include文件夹导入自己项目中lib攵件夹下的.a文件引入到项目中,通过pod导入入LFLiveKit
第三方库或者自己手动导入;
3.2 导入头文件 准守协议
//一般无法开启airplay或者其他错误的时候会调用此方法 逻辑自行处理 //这里的buffer就是实时获取的视频流 通过lf推流到自己的rtmp服务器-
由于各个项目业务逻辑不同 逻辑部分自行处理 还有一点需要注意 後台录屏原理请开启一下设置
最近项目不紧 有时间会更新一些项目中遇到的困难 供大家参考 学习 有兴趣的同学也可以一起交流;