Android 开发 AirPlay Server

安卓上开发  AirPlay Server  主要是参考了和修改了 DroidAirPlay项目 , 和Airplay 协议

1, 将DroidAirPlay 下载下来

2, Eclipse 新建一个 Android 项目, 并 添加JRE Library(防止报错,仅仅编译使用),项目中使用如下几个jar包, 自行下载, 别忘了加入网络及存储的权限

base64-2.3.8.jar
bcprov-ext-jdk16-1.46.jar
dd-plist.jar jmdns-3.4.0.jar
netty-3.2.4.Final.jar
(以上jar包可从 search.maven.org 搜索下载)

3, 将DroidAirPlay 项目的src下的包拷贝到 新建的项目的src 下

4, 新建Activity , 在 onCreate 方法中 使用如下代码 启动服务

AirPlayServer dwa = AirPlayServer.getIstance();
dwa.setRtspPort(8998);

new Thread(new Runnable() {
    @Override
    public void run() {

        dwa.run();
    }
}).start();

5, 需要修改的地方,都在 nz.co.iswe.android.airplay.audio.AudioOutputQueue 这个类中, 参考了这篇文章

1, audioTrack的实例化//create the AudioTrack
//audioTrack = new AudioTrack(streamType, sampleRateInHz, channelConfig, audioFormat, bufferSizeInBytes, mode);
audioTrack = new AudioTrack(streamType, sampleRateInHz, AudioFormat.CHANNEL_CONFIGURATION_STEREO, audioFormat, bufferSizeInBytes, mode);//FIXME  
2, 采集数据处理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
  }
}

6, 修改完后应该可以运行了, 但是使用iPhone连接后播放音乐会发现音量调整不了,因为android中 AudioTrack 最大音量为 1.0, 而根据AirPlay 协议文档的说明

The volume is a float value representing the audio attenuation in dB. A value of –144 means the audio is muted. Then it goes from –30 to 0.

需要修改 nz.co.iswe.android.airplay.audio.RaopAudioHandler  如下地方(大约744 行),

if ("volume".equals(name)) {
    if (audioOutputQueue != null){
        float vol = Math.abs(Float.parseFloat(value));
        vol = (float) (1.0 - (vol / 29.0));
        audioOutputQueue.setRequestedVolume(vol);
   }
}

然后修改 AudioOutputQueue 的 setStereoVolume 方法

//注释掉如下两行
leftVolume = AudioTrack.getMaxVolume();
rightVolume = AudioTrack.getMaxVolume();

8, 修改设备名, 默认iPhone会搜索到名字为 localhost(wlan0) 的设备, 通过修改 nz.co.iswe.android.airplay.AirPlayServer, 可以定制设备名

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

9, 以上代码 大神F2 测试通过, 但是在C8650 这款老机器上发现没声音, 通过log猜测是设备处理能力不足引起, 不知道是不是这个原因...

时间: 2024-10-11 01:26:18

Android 开发 AirPlay Server的相关文章

解决mac上Android开发时出现的ADB server didn&#39;t ACK

mac 上adb连接不到android手机可以参考:这里 xxxdeMacPro:~ xxx$ adb start-server * daemon not running. starting it now on port 5037 * ADB server didn't ACK * failed to start daemon * 出现上面的情况,其中一种情况是其它软件占用了端口,可以 直接干掉占用端口的进程,怎么查看 google 一下方法,挺多的 还有一种就是坑了,我也找了好久,真是个大坑

Android 开发笔记 “android调试遇到ADB server didn&#39;t ACK以及顽固的sjk_daemon进程 ”

资源来源:http://blog.csdn.net/wangdong20/article/details/20839533 做Android调试的时候经常会遇到,程序写好了,准备接上手机调试,可不一会儿出现 相信做过android调试的同学都遇到过这个问题,网上说kill掉跟adb相关的进程,重启Eclipse 可是我在任务管理器上没有看到明显的adb进程,我们如何找到它们呢 首先,打开cmd,使用adb命令检查一下,最好是把adb命令的路径放在系统的path环境变量里, 用adb命令也会方便一

Android开发在路上:少去踩坑,多走捷径【转】

作者:gzjay,腾讯MIG无线产品部 高级工程师 最近一朋友提了几个Android问题让我帮忙写个小分享,我觉得对新人还是挺有帮助的,所以有了这个小分享. 1.目前, Android APP开发完成后,通常需要在哪些机型上进行测试? 2.目前, 开发Android APP时,需要考虑的分辨率有哪些? 这两个问题可以合起来回答的. http://developer.android.com/about/dashboards/index.html 源自Google Play的数据,每月都会进行upd

Android开发工程师,新长征路上的14项技能

导读: 你曾渴望回到宋朝吗? 或者什么朝,反正就是男耕女织的古代. 哦,那时的首都在汴梁(开封),房价想必没有这么高,工作?无非就是给你把锄头,去,种地去.夕阳西下了,麦子垛后,你和翠姑搂抱在一起,那时的你,生活的简单而美好. 看看现在的你,一个刚入门的安卓开发工程师,没有信用卡,没有她,没有24小时热水的家.你想念你的锄头和翠姑(或麦垛),可你回不去了,你现在手中的安卓手机,冰冷如铁,你不知道如何在这4寸屏的小东西上打出一片天地. 你不用感到不知所措和困惑,技术就是你安身立命的根本,当下,你的

10个不可错过的Android 开发工具

今天麦子学院android开发老师给大家介绍android开发人员必须的10个android开发工具: 1.Eclipse ADT Eclipse ADT 是 Eclipse 平台下用来开发 Android 应用程序的插件.   2.The SDK and AVD Manager 该工具包含很多重要的功能,包括管理不同的 Android SDK 版本(构建目标),你知道的 Android 的版本众多,API上有些兼容性问题.另外该工具还用于管理 Android 虚拟设备配置 (AVD) ,用来配

Android开发快速入门(环境配置)

Android是一种激动人心的开源移动平台,它像手机一样无处不在,得到了Google以及其他一些开放手机联盟成员(如三星.HTC.中国移动.Verizon和AT&T等)的支持,因而不能不加以学习,否则你承担不起为此付出的代价. 好在Android开发入门很容易,即使没有Android手机都没关系,只需有一台可供安装Android SDK和设备模拟器的计算机即可. 本章首先介绍如何安装所有的开发工具,然后再创建一个可运行的应用——Android版“Hello, World”.如果你并非Androi

ArcGIS Runtime for Android开发教程V2.0(2)开发环境配置

原文地址: ArcGIS Runtime for Android开发教程V2.0(2)开发环境配置 - ArcGIS_Mobile的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/arcgis_mobile/article/details/8113948   2.开发环境配置 2.1 系统要求 1)      支持的操作系统 A.      Windows XP(32位).Vista(32/64位).Windows 7(32/64位) B.      Mac

ArcGIS Runtime for Android开发教程V2.0(1)基本概念

原文地址: ArcGIS Runtime for Android开发教程V2.0(1)基本概念 - ArcGIS_Mobile的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/arcgis_mobile/article/details/8113183   1.基本概念 1.1 Android简介         2007年11月,Google推出移动操作系统Android,并宣称Android是首个为移动终端打造的真正开放和完整的移动操作系统.自此,基于And

搭建Android开发环境。

1. 从 http://developer.android.com/intl/zh-cn/sdk/index.html 下载ADK 2. 点击SDK.Manager.exe, 遇到闪退的问题,一开始还以为是防火墙问题,各种挠墙,新手菜鸟伤不起啊...... 百度之后找到正解 :http://www.cnblogs.com/badtree/articles/2941132.html Android 的 SDK Manager 无法启动 闪退解决方法 转自 http://hi.baidu.com/y