说说android端实现Airplay多屏互动(二)
来源:互联网 发布:中级会计合并报表知乎 编辑:程序博客网 时间:2024/04/30 00:28
原文地址:http://blog.csdn.net/ville_zeng/article/details/19159439,转载请注明出处!
Android端实现
首先,感谢GitHub上大牛pentateu的无私分享—DroidAirPlay https://github.com/pentateu/DroidAirPlay。
DroidAirPlay只实现了音频的投影,即只发布并处理AirTunes服务。若要实现图片和视频的投影,还需要在源代码中进行更改,添加发布AirPlay服务。
DroidAirplay中所有功能均在Android层实现,未使用lib库在本地处理。大概功能实现:
1.使用JmDNS进行服务发现。其中AirTunes服务类型设置为”_raop._tcp.local.”, AirPlay服务类型设置为“_airplay._tcp.local.”。
2.使用netty来发布服务,分别用来处理上述两种服务对应的请求处理。其中,AirTunes,AirPlay会指定不同的端口号,我们在netty发布服务时分别绑定对应的端口号。
3.音频方面:从IOS设备设备传送过来的音频数据是经过加密的ALAC数据(ALAC 即Apple lossless audio codec的缩写,是苹果公司开发的一种无损音频格式),经过解密,我们可以得到原始的ALAC数据,但是该格式的数据在android设备上无法直接播放,因此,需要将alac格式转码成PCM格式,此格式的数据是原始的未经压缩的音频数据,可以直接播放,但是DroidAirplay在播放时,只能听到吱吱的杂音,并没有音乐输出。后来调试发现,源代码中,处理的音频采样数据是16位双声道的,在解决数据大小端问题时并不完善,需要再次更改才行。同时因为DroidAirPlay是基于AirReceiver的,后者利用java sound中的部分api,但是Android中用android.media.AudioTrack替代了java sound的接口,导致DroidAirPlay在处理时有些小问题,当然在使用DroidAirplay时将这些地方改过来就行了。
4.视频图片方面:AirPlay服务这边相对比较简单,协议相对单一,分别对应请求时去做相应处理就行了。
----------------------------------------------- 分割下子 -------------------------------------------------------------------------
ps:
好多朋友想知道吱吱的声音如何解决,笔者给出一个临时的解决方案,有兴趣的朋友可以试试,也欢迎提出改进意见。
代码改动有两个地方,均在文件nz.co.iswe.android.airplay.audio.AudioOutputQueue.java中
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}}
本人QQ:447959344 ,欢迎交流。
QQ群(Airplay讨论组1群):374092724(已满)
(Airplay讨论组2群):154113049
- 说说android端实现Airplay多屏互动(二)
- 说说android端实现Airplay多屏互动(一)
- 多屏互动技术标准DLNA与Airplay
- Android实现AirPlay,DriodAirPlay开发
- Android平台Airplay的实现方法【原创】
- Android平台Airplay的实现方法
- android Socket实现多进程通信,互动
- PPTV多屏互动功能再升级 实现PC移动端双向互动
- 管理你的第二屏(airPlay)
- Lab树莓派实现airplay
- 在Linux实现airplay
- (Android实战系统二)Android网络互动传输方案选择和实现
- 说说MP3 (二)
- 说说twitter(二)
- 说说IO--(二)
- 视频播放器上实现AirPlay投屏功能
- 视频播放器上实现AirPlay投屏功能
- 一种非AirPlay的方法来实现IOS录屏
- 关于内存泄漏
- iOS-网络流量统计
- 基础加强____【反射的作用__实现框架功能】
- poj 2965
- Hadoop WritableComparable接口收集的知识
- 说说android端实现Airplay多屏互动(二)
- JQuery实战总结
- java中的synchronized关键字
- WebKit网页布局实现之主要数据结构篇
- 使用自己编译的在Android上运行的内核(Linux Kernel)
- Contest of whu 2013.4
- Services
- cocos2d-x游戏开发系列教程-超级玛丽07-CMGameMap(六)-马里奥跳跃
- NYOJ 354 Stripies