Airplay属于局域网内异构设备之间分享多媒体数据的一种通信协议。Airplay设备有客户端和服务器之分,一般将小屏IOS设备实现为Airplay客户端,大屏幕设备实现为Airplay服务器。即iPhone, iPad, iPod一般为Airplay客户端,iTV, Macbook设计为Airplay服务器,在小屏和大屏之间分享视频、照片和音乐。Airplay属于私有协议,版权Apple公司所有。

IOS设备的保有量非常大,如果Android机顶盒能够支持IOS设备的Airplay协议,实现为Airplay服务器,能够接收和处理来自IOS设备的多媒体数据(视频、照片和音乐),将能提高Android机顶盒的竞争力。

技术点分析:Airplay服务器端包含3个服务:DNS服务发现服务;基于HTTP协议的Airplay服务和基于UDP的Airtunes服务。DNS服务发现服务,在linux系统中有开源的AVAHI库,其他两个服务需要基于Airplay协议去实现。

1 Airplay概念图

Airplay客户端:iPhone, iPad, iPod等IOS设备

Airplay服务器:iTV, Macbook, AndriodTVBox

网络:Wifi无线局域网

Airplay服务端包含的协议:DNS服务发现协议、HTTP协议、TCP/UDP协议、Airplay协议

Airplay服务端包含的服务:DNS服务发现服务、Airplay服务和Airtunes服务

2 部分Airplay开源代码(Android平台的较少哦)

Servers

Name

Description

Open

AirServer

The best app for turning your Mac into an AirPlay screen

-

Reflection

Turn your Mac or PC into an AirPlay screen

-

Banana TV

Another app to turn your Mac into and AirPlay screen

-

Casual Share

Mac AirPlay receiever

R

AirMac

Turns you Macintosh into an Airplay receiver (Objective C)

R

Airstream Media Player

C# based AirPlay screen for windows and AirPlay server source code

R

Play2Wifi

An AirPlay server written in Python

R

3 Android平台上Airplay的实现

简要说明一下:实现Airplay,最重要的有两步,第一步是:Airplay服务发布,让IOS设备能发现你;第二步:实现Airplay协议应答, 让IOS设备能和你交互。Airplay发布服务,Linux系统中原生的Zeroconf协议,用于发布网络服务。Android平台上并不支持Zeroconf协议。所以需要安装Linux版本的Avahi,Avahi是Zeroconf协议的Linux实现。Avahi服务发布管理系统,支持跨进程发布,其中跨进程的数据交互是通过DBUS-Service的。DBUS服务,Android原生系统就自带。

上面介绍了一下系统库的依赖关系,下面介绍一下如何实现吧。

(1) 修改DUBS-Service(Andriod)服务的权限,默认是蓝牙才能访问,设置为系统级程序都可以访问。

(2) 编写一个新的服务【零配置网络发布服务ZeroconfAvahiService】,其中简单封装一下Avahi服务和Avahi-client。并在Android配置文件中,让该服务自启动。

(3) AirplayServer程序中,创建Avahi-client,发布Airplay服务。如果IOS设备能发现您的Android设备,恭喜服务发布成功。

(4) 实现AirplayServer实现Airplay协议,完成与IOS设备的图像、视频数据的交互。Coding, Debugging, 总会成功的。

4 感想

学会了Android平台Airplay的实现方法,屌丝设备能和高富帅设备交互,还是有一丝惊艳的。不过Airplay不是唯一技术,DLNA,WifiDisplay也有类似功能。

【编辑推荐】

  1. Android使用AIDL实现进程间通信
  2. Android获取屏幕像素

Android平台Airplay的实现方法的更多相关文章

  1. Unity3D之移植学习笔记:移植到Android平台更好的方法

    接上文,之前我们采用了直接将Unity项目导出为Eclipse项目来修改的方式,这种做法存在的一个最大的问题就是:每当Unity被修改之后,都需要重新导出,而每次导出的项目在Android平台方面的J ...

  2. Android平台 Psensor传感器调试方法

    一. 驱动层调试1.在板级dts文件中增加相应的dts代码,如:调试sensor类,在代码中找到已经有的代码在修改,I2C使用那根(一般为I2C3),I2C地址(找datasheet或者FAE),哪个 ...

  3. Android平台Camera实时滤镜实现方法探讨(三)--通过Shader实现YUV转换RBG

    http://blog.csdn.net/oshunz/article/details/50055057 文章例如该链接通过将YUV分成三个纹理,在shader中取出并且经过公式变换,转换成RGB.我 ...

  4. Android获取位置信息的方法总结

    1.位置服务的简介:位置服务,英文翻译为Location-Based Services,缩写为LBS,又称为定位服务或基于位置的服务,融合了GPS定位.移动通信.导航等多种技术,提供与空间位置相关的综 ...

  5. [译]:Xamarin.Android平台功能——位置服务

    返回索引目录 原文链接:Location Services. 译文链接:Xamarin.Android平台功能--位置服务 本部分介绍位置服务以及与如何使用位置提供商服务 Location Servi ...

  6. (转)android平台phonegap框架实现原理

    (原文)http://blog.csdn.net/wuruixn/article/details/7405175 android平台phonegap框架实现原理 分类: Android2012-03- ...

  7. Android平台免Root无侵入AOP框架Dexposed使用详解

    Dexposed是基于久负盛名的开源Xposed框架实现的一个Android平台上功能强大的无侵入式运行时AOP框架. Dexposed的AOP实现是完全非侵入式的,没有使用任何注解处理器,编织器或者 ...

  8. 基于android平台的斗地主AI

    本软件是基于android平台的斗地主AI,我们在源代码的基础之上,旨在改进AI的算法,使玩家具有更丰富的体验感,让NPC可以更为智能. (一)玩法解析: (1)发牌和叫牌:一副扑克54张,先为每个人 ...

  9. Cocos2d-x 3.0修改Android平台帧率fps - 解决游戏运行手机发热发烫问题

    使用Cocos2d-x 3.0开发游戏之后,发现游戏在android手机上发热非常严重,在魅族2上,几乎担心手机会爆炸了~~~采取的一个措施就是降低帧率,因为游戏对于帧率要求不是非常高. 做过coco ...

随机推荐

  1. [Swift通天遁地]四、网络和线程-(2)通过BlockOperation实现线程的队列

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  2. 如何看待B站疑似源码泄漏的问题?

    今天突然看到关于B站源码泄漏事.网曝B站整个网站后台工程源码遭泄露,开源项目平台Github上疑似出现了Bilibili网站后台工程,内含部分用户名密码.目前官方还没对此事作出任何回应,所以还无法确定 ...

  3. 【知识总结】快速傅里叶变换(FFT)

    这可能是我第五次学FFT了--菜哭qwq 先给出一些个人认为非常优秀的参考资料: 一小时学会快速傅里叶变换(Fast Fourier Transform) - 知乎 小学生都能看懂的FFT!!! - ...

  4. ACM_Cipher(异或运算)

    Cipher Time Limit: 2000/1000ms (Java/Others) Problem Description: 只剩两个小时就要正式开始第一次月赛了,大四师兄决定还是来出一道,找点 ...

  5. Android 蓝牙开发基本流程

    此例子基于 android demo 对于一般的软件开发人员来说,蓝牙是很少用到的,尤其是Android的蓝牙开发,国内的例子很少     Android对于蓝牙开发从2.0版本的sdk才开始支持,而 ...

  6. 一个例子理解ES6的yield关键字

    yield是什么 yield是ES6的新关键字,使函数暂停执行. 一个简单例子 function *countASb() { console.log('Show0:'); var a1 = yield ...

  7. 【sqli-labs】 less56 GET -Challenge -Union -14 queries allowed -Variation3 (GET型 挑战 联合查询 只允许14次查询 变化3)

    单引号括号闭合 http://192.168.136.128/sqli-labs-master/Less-56/?id=1')%23 http://192.168.136.128/sqli-labs- ...

  8. java_File对象

    package File; import java.io.File; import java.io.IOException; public class file { public static voi ...

  9. Python 之re正则表达式

  10. Html5 WebSocket详细介绍

    什么是WebSocket?看过html5的同学都知道,WebSocket protocol 是HTML5一种新的协议.它是实现了浏览器与服务器全双工通信(full-duplex).HTML5定义了We ...