AIRPLAY 协议研究
AirPlay协议针对苹果设备实现软件层的传输、显示信息交付组的一套私有协议。该技术支持自动地互相发现,互相传输音乐、图片及视频等信息资源文件。此外,AirPlay支持实时传输视频流、音频流功能;可以将iPad或者iPhone的整个屏幕投放到更大屏幕的电视机上,实现所谓很多公司 称为“无线投屏”的效果。
协议的基础是组播DNS(Multicast Domain Name Server,简称mDNS)协议和DNS服务发现(DNS Service Discovery,简称DNS-SD)协议,自动寻找设备及服务的网络协议,苹果内部称为数字家庭网络框架,未来会不断的进行拓宽,这个是本地学习的目的。
AirPlay协议消息格式包基于mDNS协议(http://files.multicastdns.org/draft-cheshire-dnsext-multicastdns.txt),网络连接层称为:组播技术,
苹果优化内容包括
1、定义了设备之间的消息的基本格式和接收/发送规则。
2、该协议以DNS协议为基础,DNS消息包头进行了简化。
3、mDNS在降低网络拥塞和消息冗余方面也作出了很多改进。
在mDNS协议的基础上,DNS-SD协议(http://tools.ietf.org/html/draft-cheshire-dnsext-dns-sd-11)规定了一个服务宣告及使用的完整过程。即设备必须发送什么样的mDNS消息才能完整地宣告并描述自己服务。DNS-SD协议使用PTR、SRV和TXT三种类型的记录全面描述了一个服务的类型,名称以及所在主机的IP和端口号等。
当使用DNS-SD协议实现了对设备及服务的发现和描述后,苹果公司的AirPlay协议规定了图片、音频及视频的传输和控制消息格式,从而实现了智能设备之间的媒体共享和协同动作。例如,在通过DNS-SD获得了其他设备及服务的信息(即设备或服务的IP地址及端口号)之后,AirPlay使用HTTP消息实现了图片和视频的传输及控制,使用RSTP协议实现了音频的传输和控制。
以上描述的包括是 iPad、iPhone、Apple TV 以及苹果公司授权伙伴的设备。
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
正常软件实现包括如下内容:
如果需要包含內建的音量控制元件
MPVolumeView *volumeView = [ [MPVolumeView alloc] init] ;[view addSubview:volumeView];
如果不需要
MPVolumeView *volumeView = [ [MPVolumeView alloc] init] ;
[volumeView setShowsVolumeSlider:NO];[volumeView sizeToFit];[view addSubview:volumeView];
在iOS裡聲音可以分為兩大類,App sound跟System sound,System sound做為按鍵回饋或是警示聲使用,剩下的就是App sound。在MPVolumeView選擇了 Airplay裝置之後,系統會自動把App sound導到支援Airplay的裝置上。
在iOS7,MPVolumeView新增了兩個property
@property areWirelessRoutesAvailable;@property isWirelessRouteActive;
以及兩個通知
NSString *const MPVolumeViewWirelessRoutesAvailableDidChangeNotification;
NSString *const MPVolumeViewWirelessRouteActiveDidChangeNotification;
可以偵測到有airplay以及使用者改變了airplay route,如果想要在偵測到可以使用Airplay裝置時加入動畫這會是一個好的實作方法。
常用通知:MPVolumeViewWirelessRoutesAvailableDidChangeNotification
airplay是否在通讯:UIScreenDidConnectNotification and UIScreenDidDisconnectNotification
iOS9中引入了ReplayKit, 让开发者有了一定的获取屏幕数据的能力. 并在iOS10和iOS11中继续扩展了ReplayKit的能力. 但还是有很大的限制, 比如在使用ReplayKit的api时只能录制当前应用的应用, 无法在应用进入后台之后继续录屏. 如果使用系统级别的屏幕录制,又无法获得每一帧的数据,只能获得最后录取的单个视频. 这样对第三方的开发有了非常大的限制.
另外出于个人隐私保护和影视版权保护的考虑,Apple不允许录屏功能的软件上架 AppStore, 即使成功上架, 不久也会被强制下架。
实现方案选择
纯OC实现iOS
支持Pod安装MRDLNA
后续会发布全部该代码
AIRPLAY 协议研究相关推荐
- 关于airplay协议实现镜像功能研究
工作中需要研究airplay以实现IOS的镜像服务端,将了解到的内容记录下来. Airplay可以实现将设备中音频.视频.图像通过本地无线网络发送远端设备:Airplay功能实现利用了很多标准协议,包 ...
- AirPlay协议结构record
AirPlay协议非官方文档 参考博文 关于airplay协议实现镜像功能研究 They are based on well-known standard networking protocols s ...
- 基于RDMA和NVM的大数据系统一致性协议研究
基于RDMA和NVM的大数据系统一致性协议研究 吴昊1,2, 陈康1,2, 武永卫1,2, 郑纬民1,2 1 清华大学计算机科学与技术系,北京 100084 2 北京信息科学与技术国家研究中心,北京 ...
- 车载无线自组织网络的介质访问控制协议研究
摘 要 车载无线自组织网络技术(Vehicular Ad Hoc Network, VANET),作为未来智能交通系统的基础之一,通过车与车.车与路边节点的相互通信来构成无线通信网络,用于传递辅助驾 ...
- 苹果Airplay协议以及AirTunes流程总结
一.均通过mDNS协议发现 二.airplay协议总结 /reverse 协商请求 /scrub POST方式为seek请求 GET方式为获取播放位置 /volume 设置音量:0.000000为静音 ...
- 【华东师范大学自然科学版】一种面向双中台双链架构的内生性 数据安全交互协议研究——CSCD
一种面向双中台双链架构的内生性 数据安全交互协议研究 刘 峰1,2, 杨 杰2, 李志斌3, 齐佳音2,4 No. 5 Sept. 2020 (1. 华东师范大学 计算机科学与技术学院, 上海 200 ...
- 中国上市公司对赌协议研究数据库(截至2020年5月6日,可用于业绩承诺等实证)
数据集名称:中国上市公司对赌协议研究数据库 时间范围:2008-2020 数据来源:CSMAR 数据库内容: 1.并购重组事件表(2008-2020) 事件ID.上市公司交易地位.交易对手方.交易对 ...
- airplay协议开发第3部(mdnsd注册airplay服务)
1 服务注册 Airplay通过mdnsd对外发布2个服务,在发布服务的时候,说明自己支持的功能.例如,在发布 raop服务的时候,会说明传输音频是使用UDP还是TCP. 那么,手机在发现raop服务 ...
- airplay协议开发第2部(介绍接口、视频、音频的操作)
1 AirplayLibrary项目提供的接口 AirplayLibrary项目编译出Airplay.dll动态库,对外提供的接口函数如下: //=========================== ...
最新文章
- 《C#精彩实例教程》小组阅读02 – Visual Studio简介与安装
- 赠书 | 2021年中国数字政府发展指数排名出炉!你的家乡名列第几?
- Google App Engine(GAE)入门教程翻译
- NTU 课程笔记: MAS714 1415 regular language
- matplotlib散点图点大小_一步步学Matplotlib炫酷可视化(上)
- Oracle数据库的视图
- 单例设计模式-静态内部类-基于类初始化的延迟加载解决方案及原理解析
- isis network-entity 49含义_电影《狮子王》真人版上映,经典英语台词背后的含义你看懂了吗...
- django 1.8 官方文档翻译: 2-2-3 查找 API 参考
- Jzoj5425 数论
- CSS2.1 盒模型
- CODE Unicode roleName_字符类型数据 人物名子
- 转:ffmpeg编码h264
- NoSQL数据库的五种分类
- 自己动手恢复硬盘丢失数据
- 用VMWARE安装Mac OSX Tiger 10.4.4 X86
- select 设置不可用,提交表单时能传值
- 计算机图表制作教程,PPT怎么制作动态图表 PPT动态图表制作教程-电脑教程
- web网页设计期末课程大作业——简单的学生网页作业源码 基于HTML仿唯品会电商项目的设计与实现
- Android 源码之overlay分析
热门文章
- Arduino开发(二)_基于Arduino UNO开发板的RGB灯光控制方法
- LabVIEW概述及其优点
- 苹果自带输入法怎么换行_微信个性签名怎么弄成竖的?不仅可以竖着还可以加边框效果!...
- 2019数据安装勾选_如何安装勾选认证平台安全控件,以及如何勾选认证发票
- E3000Y影像二维扫描枪(配YoKo引擎开发板)的串口调试
- 【C++】什么情况下会产生临时变量
- 系统开发视角下的诊断 ———— 动力系统(P)诊断故障6
- Python学习之路:通过分片的方式修改列表的技巧(拓展知识)
- 第十四章 字符编码(补充)
- 【Linux】嵌入式Linux系统的移植(上篇:交叉编译器、连接方式)