Android实现AirPlay,DriodAirPlay开发
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开发相关推荐
- Android项目驱动式开发教程 第2版,《Android项目驱动式开发教程》第一章开发入门.ppt...
<Android项目驱动式开发教程>第一章开发入门 1.4 项目框架分析 4 android:versionName="1.0" > 5 8 第9行代码andro ...
- 总结android项目的基本开发步骤(转帖)
总结android项目的基本开发步骤(转帖) 做了几个android企业应用项目后,总结了项目的基本开发步骤,希望能够交流. 一 应用规划: ※确定功能. ※必须的界面及界面跳转的流程 ...
- Android系统Google Maps开发实例浅析
Google Map(谷歌地图)是Google公司提供的电子地图服务.包括了三种视图:矢量地图.卫星图片.地形地图.对于Android系统来说,可以利用Google提供的地图服务来开发自己的一些应用. ...
- Android原生(Native)C开发之二 framebuffer篇
为什么80%的码农都做不了架构师?>>> Android原生(Native)C开发之二 framebuffer篇 如对Android原生(Natvie)C开发还任何疑问,请参阅 ...
- android的webView的教程,Android WebView 应用界面开发教程
WebView组件本身就是一个浏览器实现,Android5.0增强的WebView基于Chromium M37,直接支持WebRTC.WebAudio.WebGL.开发者可以直接在WebView中使用 ...
- 实现在Android本地视频播放器开发
在Android本地视频播放器开发中的搜索本地视频章节中,我们能够搜索本地视频并且显示每个视频的图片.标题.时间长度,当然如果需要添加其他的例如视频的长度和宽度可以使用Video类中的方法,既然我们获 ...
- android 盒子 airplay,iOS Airplay--Airtunes音乐播放在Android盒子和手机上的实现 (第一篇)...
一.前言 在局域网中实现流媒体的播放有2种主要方式,Airplay和DLNA.对于iOS系统,天生带了Airplay,但可惜是苹果秉承一贯的作风,Airplay是一个闭源协议.万幸有大神逆向了协议内容 ...
- 用android studio测量距离,Android studio 百度地图开发(6)Marker绑定事件、计算两点距离...
Android studio 百度地图开发(6)Marker绑定事件.计算两点距离 email:chentravelling@163.com 开发环境:win7 64位,Android Studio, ...
- android studio ndk-builld方式开发
之前都是在Ubuntu开发,项目也是老的,自然也就顺理成章的用eclipse做各种android的开发.最近想在android studio 切换下,有点不习惯.android studio 为ndk ...
- 操作系统:Android(Google公司开发的操作系统)
ylbtech-操作系统:Android(Google公司开发的操作系统) Android是一种基于Linux的自由及开放源代码的操作系统.主要使用于移动设备,如智能手机和平板电脑,由Google(谷 ...
最新文章
- 后台返回不带http的图片路径前台怎么拼接_Shortcuts 教程:一键搞定公众号图片排版...
- linux7.4安装语言包,CentOS 7.4安装时报错最简单最直接的解决办法
- C语言中不安全的函数
- mxnet基础到提高(49)-使用免费的云jupyter
- vue - v-if 注意点
- session与cokkie区别
- hdu 2049 考新郎
- Golang——秒懂函数、参数、可变参数、匿名函数、回调函数、内置函数
- Magic Leap是快出产品的节奏,已开放内容开发者注册通道
- javascript 网页运行代码效果
- Atitit 基于meta的orm,提升加速数据库相关应用的开发
- 【基础教程】基于matlab疫情防护动图制作【含Matlab源码 028期】
- 重命名从喜马拉雅下载的音频文件
- matlab中摄像机标定,基于Matlab的摄像机标定系统的设计与实现
- 带你用最简单的方式获得小米完整root权限(无需刷第三方rom)
- POI删除空白行 代码和其他用法(将会持续更新)
- 使用Excel批量生成SQL语句
- 图解侧方停车技巧2015高清版
- 工厂食堂3D指纹考勤系统解决方案
- Kotlin初学者笔记