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 协议研究相关推荐

  1. 关于airplay协议实现镜像功能研究

    工作中需要研究airplay以实现IOS的镜像服务端,将了解到的内容记录下来. Airplay可以实现将设备中音频.视频.图像通过本地无线网络发送远端设备:Airplay功能实现利用了很多标准协议,包 ...

  2. AirPlay协议结构record

    AirPlay协议非官方文档 参考博文 关于airplay协议实现镜像功能研究 They are based on well-known standard networking protocols s ...

  3. 基于RDMA和NVM的大数据系统一致性协议研究

    基于RDMA和NVM的大数据系统一致性协议研究 吴昊1,2, 陈康1,2, 武永卫1,2, 郑纬民1,2 1 清华大学计算机科学与技术系,北京 100084 2 北京信息科学与技术国家研究中心,北京 ...

  4. 车载无线自组织网络的介质访问控制协议研究

    摘  要 车载无线自组织网络技术(Vehicular Ad Hoc Network, VANET),作为未来智能交通系统的基础之一,通过车与车.车与路边节点的相互通信来构成无线通信网络,用于传递辅助驾 ...

  5. 苹果Airplay协议以及AirTunes流程总结

    一.均通过mDNS协议发现 二.airplay协议总结 /reverse 协商请求 /scrub POST方式为seek请求 GET方式为获取播放位置 /volume 设置音量:0.000000为静音 ...

  6. 【华东师范大学自然科学版】一种面向双中台双链架构的内生性 数据安全交互协议研究——CSCD

    一种面向双中台双链架构的内生性 数据安全交互协议研究 刘 峰1,2, 杨 杰2, 李志斌3, 齐佳音2,4 No. 5 Sept. 2020 (1. 华东师范大学 计算机科学与技术学院, 上海 200 ...

  7. 中国上市公司对赌协议研究数据库(截至2020年5月6日,可用于业绩承诺等实证)

     数据集名称:中国上市公司对赌协议研究数据库 时间范围:2008-2020 数据来源:CSMAR 数据库内容: 1.并购重组事件表(2008-2020) 事件ID.上市公司交易地位.交易对手方.交易对 ...

  8. airplay协议开发第3部(mdnsd注册airplay服务)

    1 服务注册 Airplay通过mdnsd对外发布2个服务,在发布服务的时候,说明自己支持的功能.例如,在发布 raop服务的时候,会说明传输音频是使用UDP还是TCP. 那么,手机在发现raop服务 ...

  9. airplay协议开发第2部(介绍接口、视频、音频的操作)

    1 AirplayLibrary项目提供的接口 AirplayLibrary项目编译出Airplay.dll动态库,对外提供的接口函数如下: //=========================== ...

最新文章

  1. 《C#精彩实例教程》小组阅读02 – Visual Studio简介与安装
  2. 赠书 | 2021年中国数字政府发展指数排名出炉!你的家乡名列第几?
  3. Google App Engine(GAE)入门教程翻译
  4. NTU 课程笔记: MAS714 1415 regular language
  5. matplotlib散点图点大小_一步步学Matplotlib炫酷可视化(上)
  6. Oracle数据库的视图
  7. 单例设计模式-静态内部类-基于类初始化的延迟加载解决方案及原理解析
  8. isis network-entity 49含义_电影《狮子王》真人版上映,经典英语台词背后的含义你看懂了吗...
  9. django 1.8 官方文档翻译: 2-2-3 查找 API 参考
  10. Jzoj5425 数论
  11. CSS2.1 盒模型
  12. CODE Unicode roleName_字符类型数据 人物名子
  13. 转:ffmpeg编码h264
  14. NoSQL数据库的五种分类
  15. 自己动手恢复硬盘丢失数据
  16. 用VMWARE安装Mac OSX Tiger 10.4.4 X86
  17. select 设置不可用,提交表单时能传值
  18. 计算机图表制作教程,PPT怎么制作动态图表 PPT动态图表制作教程-电脑教程
  19. web网页设计期末课程大作业——简单的学生网页作业源码 基于HTML仿唯品会电商项目的设计与实现
  20. Android 源码之overlay分析

热门文章

  1. Arduino开发(二)_基于Arduino UNO开发板的RGB灯光控制方法
  2. LabVIEW概述及其优点
  3. 苹果自带输入法怎么换行_微信个性签名怎么弄成竖的?不仅可以竖着还可以加边框效果!...
  4. 2019数据安装勾选_如何安装勾选认证平台安全控件,以及如何勾选认证发票
  5. E3000Y影像二维扫描枪(配YoKo引擎开发板)的串口调试
  6. 【C++】什么情况下会产生临时变量
  7. 系统开发视角下的诊断 ———— 动力系统(P)诊断故障6
  8. Python学习之路:通过分片的方式修改列表的技巧(拓展知识)
  9. 第十四章 字符编码(补充)
  10. 【Linux】嵌入式Linux系统的移植(上篇:交叉编译器、连接方式)