多屏互动,AirPlay,无线投屏,AirPlay投屏 Airplay的镜像的发现过程
使用Bonjour,可以参考mDNSResponder,jmdns,注册两个服务:airtunes和airplay,AirplayTxt以及RaopTxt照着demo填写就可以了,也可以根据自己的要求修改其中的值,
需要注意的如下:
airtunes: “12345@wirelessdisplay” , ”_raop._tcp.”airplay: “wirelessdisplay” , ”_airplay._tcp.”
参数中”_airplay._tcp.”和’’_raop._tcp.”不可修改。
发布了服务之后,ios设备中应该就可以搜索到Server端了
协商过程
c-s: pair-setup
s-c: xxx
c-s: pair-verify
s-c: xxx
c-s: fp-setup
s-c: xxx
c-s: fp-setup
s-c: xxx
setup
setup response
setup
setup respnose
pair-setup,pair-verify配对验证,Server端根据收到的信息进行回复,格式类似RTSP
fp-setup(第一次和第二次),Fairplay相关。
第一次setup阶段会收到一大串数据,是按照plist格式生成的,用相应的方法进行解析可以得到ekey和eiv等信息,用于后续的解密。
第二次setup阶段获得type,通过type来判断视频数据或音频数据,通知接收端建立传输通道准备进行音视频数据的发送,加密过的屏幕镜像数据通过指定的端口(一般为7100)发送到接收端。
接收端收到发送过来的数据后进行解密,解密后的数据就可以进行播放了。
中间也可能会有GET_PARAMETER,SET_PARAMETER来调整音量等信息。
解密部分目前主要有两种方法:
1.从apptv或macOS获取。
2.从市面上已有的可投屏产品中获取。
AIRPLAY镜像投屏过程中,音视频数据都是加密过的,对于接收端来说,需要正确解密后才能对音视频数据进行处理,音频和视频的解密过程还不一样。音频相对简单一点,视频会复杂一些。这一块的解密过程是没有公开的,是苹果自身的Fairplay DRM协议部分。现在市面上的第三方Airplay接收端无非都是通过逆向过程破解了相关部分。
本文针对音频的处理做一个介绍,音频部分的处理相对简单一点。