AirPlay协议针对苹果设备实现软件层的传输、显示信息交付组的一套私有协议。该技术支持自动地互相发现,互相传输音乐、图片及视频等信息资源文件。此外,AirPlay支持实时传输视频流、音频流功能;可以将iPad或者iPhone的整个屏幕投放到更大屏幕的电视机上,实现所谓很多公司 称为“无线投屏”的效果。 苹果优化内容包括 1、定义了设备之间的消息的基本格式和接收/发送规则。 2、该协议以DNS协议为基础,DNS消息包头进行了简化。 3、mDNS在降低网络拥塞和消息冗余方面也作出了很多改进。 airplay协议学习 很多博文描述的一样 /reverse 协商请求 /scrub POST方式为seek请求 GET方式为获取播放位置 /volume 设置音量:0.000000为静音,1.000000为最大 /play 播放请求:携带播放链接 本地文件播放为http,网络文件播放为m3u8地址 /rate 播放与暂停:0.000000为暂停,1.000000为播放 /stop 停止播放 /photo 推送图片:在HTTP的Body发送实际图片 /playback-info 获取播放端的状态:总时长、缓冲时长、播放位置、播放器状态(LOADING、PLAYING、PAUSED、STOP)等信息 /server-info 获取服务器信息:主要是mac地址信息 AirTunes处理流程 1、RSA密钥传递音频流加密密钥: 发送端:RSA公钥加密AES密钥,HTTP发送 播放端:RSA私钥解密AES密钥,保存 2、播放音频流: 发送端:AES加密音频流,rtsp推送 播放端:AES密钥解密音频流,播放 3、RSA私钥: #defineAIRPORT_PRIVATE_KEY \xxxx 正常软件实现包括如下内容: 如果需要包含內建的音量控制元件
如果不需要
在iOS裡聲音可以分為兩大類,App sound跟System sound,System sound做為按鍵回饋或是警示聲使用,剩下的就是App sound。在MPVolumeView選擇了 Airplay裝置之後,系統會自動把App sound導到支援Airplay的裝置上。 在iOS7,MPVolumeView新增了兩個property
以及兩個通知
可以偵測到有airplay以及使用者改變了airplay route,如果想要在偵測到可以使用Airplay裝置時加入動畫這會是一個好的實作方法。
iOS9中引入了ReplayKit, 让开发者有了一定的获取屏幕数据的能力. 并在iOS10和iOS11中继续扩展了ReplayKit的能力. 但还是有很大的限制, 比如在使用ReplayKit的api时只能录制当前应用的应用, 无法在应用进入后台之后继续录屏. 如果使用系统级别的屏幕录制,又无法获得每一帧的数据,只能获得最后录取的单个视频. 这样对第三方的开发有了非常大的限制. 另外出于个人隐私保护和影视版权保护的考虑,Apple不允许录屏功能的软件上架 AppStore, 即使成功上架, 不久也会被强制下架。 实现方案选择 纯OC实现iOS
后续会发布全部该代码 |
|