Android 开发 AirPlay Server

阅读: 评论:0

Android 开发 AirPlay Server

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 搜索下载)

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

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

AirPlayServer dwa = Istance();
dwa.setRtspPort(8998);new Thread(new Runnable() {@Overridepublic 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 villebytTemp = 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 = MaxVolume();
rightVolume = MaxVolume();

8, 修改设备名, 默认iPhone会搜索到名字为 localhost(wlan0) 的设备, 通过修改 可以定制设备名

//157 行
String hostName = "DwAirPlay";//HostUtils();

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

 

转载于:.html

本文发布于:2024-02-08 19:38:30,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170739232768354.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:Android   AirPlay   Server
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23