Android实现AirPlay,DriodAirPlay开发
来源:互联网 发布:合肥兆度网络怎么样 编辑:程序博客网 时间:2024/06/13 01:28
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";
1 0
- Android实现AirPlay,DriodAirPlay开发
- Airplay开发
- Airplay开发
- Android平台Airplay的实现方法【原创】
- Android平台Airplay的实现方法
- 说说android端实现Airplay多屏互动(一)
- 说说android端实现Airplay多屏互动(二)
- AirPlay、AirTunes 移植开发
- Lab树莓派实现airplay
- 在Linux实现airplay
- AirPlay
- airplay
- AirPlay
- airplay
- iOS开发~隐藏AirPlay按钮
- android 非官方airplay协议文档
- iOS 开发 高级:通过AirServer使用AirPlay镜像并实现多屏幕显示控制
- iOS 开发 高级:通过AirServer使用AirPlay镜像并实现多屏幕显示控制
- Codeforces Round #326 (Div. 2)
- Under the Hood: Dalvik patch for Facebook for Android
- iOS9 出现 the resource could not be loaded because the app transport security policy requires the use
- mysql管理
- 数据挖掘之路一个月零十天有感
- Android实现AirPlay,DriodAirPlay开发
- [BZOJ1026][SCOI2009]windy数
- unity3d Vector3.Dot Cross Angle 用法记录
- Windows程序设计--文本输出(一)
- LeetCode-Group Anagrams
- 安卓系统监听应用开启和关闭的实现
- 数据挖掘产生的意义-解决的四类问题
- adb devices连接显示DEVICE OFFLINE
- 队列---循环队列与链队列比较