AirPlay的介绍就不多说了,在Android上实现AirPlay我们主要参考的是国外大神破解出来的DriodAirPlay。下载DroidAirPlay源码

DroidAirPlay是一个Maven工程,这是能在PC上跑起来的。在PC上实现性能杠杠的!!

接下来我们需要把它转化成我们想要的Android工程:

   1.新建一个Android工程,将对应DroidAirPlay项目src下的包拷贝到 新建的项目的src 下,同时将项目中用到的jar包拷贝到Android的lib目录下。

需要添加的jar包:

这些是在Android工程中不需要用到的可以直接删掉:

在MainActivity onCreate 方法中启动服务:

<span style="font-size:24px;">// 打开AirPlayString transformation = "RSA/None/OAEPWithSHA1AndMGF1Padding";try {Cipher rsaPkCS1OaepCipher = Cipher.getInstance(transformation);} catch (Exception e) {e.printStackTrace();}airPlayServer = AirPlayServer.getIstance();airPlayServer.setRtspPort(5000);thread = new Thread(airPlayServer);thread.start();System.out.println("开启AirPlay");</span>

2.需要修改的部分,在 nz.co.iswe.android.airplay.audio.AudioOutputQueue 这个类中将播放器使用Android的AudioTrack:

<span style="font-size:24px;">//============================创建 AudioTrack==============================// 32000 Hz - miniDV 数码视频 camcorder、DAT (LP mode)所用采样率 sampleRateInHz// 44100 Hz - 音频 CD, 也常用于 MPEG-1 音频(VCD, SVCD, MP3)所用采样率 //audioTrack = new AudioTrack(streamType, sampleRateInHz, channelConfig, audioFormat, bufferSizeInBytes, mode); audioTrack = new AudioTrack(streamType, sampleRateInHz, AudioFormat.CHANNEL_CONFIGURATION_STEREO, audioFormat, bufferSizeInBytes, mode);</span>

3. 采样数据处理:

<span style="font-size:24px;">    byte bytTemp = 0x00;  if (convertUnsignedToSigned) {  /* The line expects signed PCM samples, so we must * convert the unsigned PCM samples to signed. * Note that this only affects the high bytes! */  for(int i=0; i < samplesConverted.length; i += 2){  samplesConverted[i] = (byte)((samplesConverted[i] & 0xff) - 0x80);  //add by ville  bytTemp = samplesConverted[i];  samplesConverted[i] = samplesConverted[i + 1];  samplesConverted[i + 1] = bytTemp;  //end  }  }  </span>

4. 现在是可以运行了, 但是连接后播放音乐音量不能调整,因为android中最大音量为 1.0, 和AirPlay 协议文档上定义的不同,我们可以通过打印音量的值来修改成Android上的音量。需要修改 nz.co.iswe.android.airplay.audio.AudioOutputQueue

<span style="font-size:24px;">/*** Sets the AudioTrack the Stereo Volume** @param leftVolume* @param rightVolume* */private void setStereoVolume(float leftVolume, float rightVolume) {if(leftVolume==-144.0f){leftVolume=0.0f;rightVolume=0.0f;audioTrack.setStereoVolume(leftVolume, rightVolume);return;}leftVolume =leftVolume +30;leftVolume =(float) (leftVolume /1.875*0.0625); rightVolume=leftVolume;audioTrack.setStereoVolume(leftVolume, rightVolume);}</span>

 5.我们可以修改设备名, 默认搜索到名字是localhost(wlan0), 通过修改 nz.co.iswe.android.airplay.AirPlayServer

//157 行
//networkUtils.getHostUtils();
String hostName = "tomorrow_p";


Android实现AirPlay,DriodAirPlay开发相关推荐

  1. Android项目驱动式开发教程 第2版,《Android项目驱动式开发教程》第一章开发入门.ppt...

    <Android项目驱动式开发教程>第一章开发入门 1.4 项目框架分析 4 android:versionName="1.0" > 5 8 第9行代码andro ...

  2. 总结android项目的基本开发步骤(转帖)

    总结android项目的基本开发步骤(转帖) 做了几个android企业应用项目后,总结了项目的基本开发步骤,希望能够交流. 一 应用规划:     ※确定功能.     ※必须的界面及界面跳转的流程 ...

  3. Android系统Google Maps开发实例浅析

    Google Map(谷歌地图)是Google公司提供的电子地图服务.包括了三种视图:矢量地图.卫星图片.地形地图.对于Android系统来说,可以利用Google提供的地图服务来开发自己的一些应用. ...

  4. Android原生(Native)C开发之二 framebuffer篇

    为什么80%的码农都做不了架构师?>>>    Android原生(Native)C开发之二 framebuffer篇 如对Android原生(Natvie)C开发还任何疑问,请参阅 ...

  5. android的webView的教程,Android WebView 应用界面开发教程

    WebView组件本身就是一个浏览器实现,Android5.0增强的WebView基于Chromium M37,直接支持WebRTC.WebAudio.WebGL.开发者可以直接在WebView中使用 ...

  6. 实现在Android本地视频播放器开发

    在Android本地视频播放器开发中的搜索本地视频章节中,我们能够搜索本地视频并且显示每个视频的图片.标题.时间长度,当然如果需要添加其他的例如视频的长度和宽度可以使用Video类中的方法,既然我们获 ...

  7. android 盒子 airplay,iOS Airplay--Airtunes音乐播放在Android盒子和手机上的实现 (第一篇)...

    一.前言 在局域网中实现流媒体的播放有2种主要方式,Airplay和DLNA.对于iOS系统,天生带了Airplay,但可惜是苹果秉承一贯的作风,Airplay是一个闭源协议.万幸有大神逆向了协议内容 ...

  8. 用android studio测量距离,Android studio 百度地图开发(6)Marker绑定事件、计算两点距离...

    Android studio 百度地图开发(6)Marker绑定事件.计算两点距离 email:chentravelling@163.com 开发环境:win7 64位,Android Studio, ...

  9. android studio ndk-builld方式开发

    之前都是在Ubuntu开发,项目也是老的,自然也就顺理成章的用eclipse做各种android的开发.最近想在android studio 切换下,有点不习惯.android studio 为ndk ...

  10. 操作系统:Android(Google公司开发的操作系统)

    ylbtech-操作系统:Android(Google公司开发的操作系统) Android是一种基于Linux的自由及开放源代码的操作系统.主要使用于移动设备,如智能手机和平板电脑,由Google(谷 ...

最新文章

  1. 后台返回不带http的图片路径前台怎么拼接_Shortcuts 教程:一键搞定公众号图片排版...
  2. linux7.4安装语言包,CentOS 7.4安装时报错最简单最直接的解决办法
  3. C语言中不安全的函数
  4. mxnet基础到提高(49)-使用免费的云jupyter
  5. vue - v-if 注意点
  6. session与cokkie区别
  7. hdu 2049 考新郎
  8. Golang——秒懂函数、参数、可变参数、匿名函数、回调函数、内置函数
  9. Magic Leap是快出产品的节奏,已开放内容开发者注册通道
  10. javascript 网页运行代码效果
  11. Atitit  基于meta的orm,提升加速数据库相关应用的开发
  12. 【基础教程】基于matlab疫情防护动图制作【含Matlab源码 028期】
  13. 重命名从喜马拉雅下载的音频文件
  14. matlab中摄像机标定,基于Matlab的摄像机标定系统的设计与实现
  15. 带你用最简单的方式获得小米完整root权限(无需刷第三方rom)
  16. POI删除空白行 代码和其他用法(将会持续更新)
  17. 使用Excel批量生成SQL语句
  18. 图解侧方停车技巧2015高清版
  19. 工厂食堂3D指纹考勤系统解决方案
  20. Kotlin初学者笔记

热门文章

  1. iOS-高德地图-热力图
  2. 完整制作个人博客系统
  3. 实战使用pano2vr生成html5全景页面
  4. php 英文转中文,php 中英文语言转换的方法
  5. 考研复试操作系统知识点总结
  6. 2018年TI杯大学生电子设计竞赛题C-无线充电电动小车 题目加答案,非常详细
  7. 拼多多快捷回复怎么设置
  8. hp 126NW驱动安装
  9. 规则引擎groovy
  10. 云南昆明美容美发店务管理软件