phonegapX / AirPlay

关于AirPlay的一些逆向研究成果。
http://phonegap.me/post/50.html
161 stars 57 forks source link

请问是只实现了音乐投屏吗? #3

Open mehao opened 6 years ago

phonegapX commented 6 years ago

还包括屏幕,你可以看看博客里面的视频

mehao commented 6 years ago

还包括屏幕,你可以看看博客里面的视频

你好,我现在在开发Android版的AirPlay接收端,能否帮下忙呢?现在搞得头大

phonegapX commented 6 years ago

这块我也很久没搞了,不过你把我这源代码搞明白,移植到android下面也不难。 如果要快的话市面上有很多现成的sdk可以去买,集成就可以了

mehao commented 6 years ago

请问你有用到第三方SDK的吗?我看到是有用到xindawn这个sdk的

phonegapX commented 6 years ago

这个是基本完整的源码,只不过差了一个解密模块没有逆向,用了别人的

mehao commented 5 years ago

我看到mirror部分是用到了xindawn的,这一部分是不好处理才用到第三方的SDK的吗?

mehao commented 5 years ago

不知道你所说的差了一个解密模块没有逆向,用了别人的,是哪个模块呢?

phonegapX commented 5 years ago

你仔细看下代码,AirPlay/AirplayLibrary/AirPlay/lib/fairplay.c,可以找到你要的答案

hill121212 commented 5 years ago

作者大神,您好,我看了你的代码,很有帮助。但是,我现在测试出一个问题,就是镜像模式下,视频和音频不同步的问题。在 raop_rtp.c文件的raop_rtp_thread_udp()函数中,接收音频数据的时候,对于同步数据包,就0x54这个类型的数据包,没有任何处理,如下: if (type == 0x56) { int ret = raop_buffer_queue(raop_rtp->buffer, packet+4, packetlen-4, 1); assert(ret >= 0); } else if (type == 0x54) { g_x56_buf[0] = packet[15]; g_x56_buf[1] = packet[14]; g_x56_buf[2] = packet[13]; g_x56_buf[3] = packet[12]; g_x56_buf[4] = packet[11]; g_x56_buf[5] = packet[10]; g_x56_buf[6] = packet[9]; g_x56_buf[7] = packet[8]; (DWORD)&g_x56_buf[4] += 0x7C558180; g_x56_buf[8] = packet[19]; g_x56_buf[9] = packet[18]; g_x56_buf[10] = packet[17]; g_x56_buf[11] = packet[16]; }

就只是把同步音频数据包的数据存放到 g_x56_buf[] 全局变量中。在代码中,这个 g_x56_buf[] 全局变量没有看到在哪里使用,最终,这个音频同步包没有使用起来。 在镜像模式下,视频和音频就没有同步播放了。我现在测试出现了这样的问题,应该怎么样改?? 对应 0x54 这个类型的同步数据包,要怎么样处理?

mehao commented 5 years ago

基本上是按照你的方式,目前已经可以实现手机和我的设备连接上了,现在实现手机画面显示时,你所说的 “TV端拿到数据后就需要先解密,然后h264解码,然后显示到屏幕上.” 这一步我并没有看到具体在哪里实现了,能麻烦你帮忙指导一下吗?

phonegapX commented 5 years ago

关于 0x54类型的问题,请问你是ios哪个版本呢

phonegapX commented 5 years ago

代码里面都有啊,h264解码,然后显示到屏幕等 都有,你仔细看看

phonegapX commented 5 years ago

你可以直接在代码里面把交互步骤打印出来,看看整个交互流程是什么样子的

mehao commented 5 years ago

我看到涉及到h264解码的是在AirplaySdkExample中的,那个不是xindawn属于第三方SDK的吗?其他地方真找不到有涉及视频流解密然后h264解码了,能具体说下在哪个文件么?这个问题纠结了好久了,快要崩溃了。。。感谢感谢

AbstyGuo commented 5 years ago

感谢大神分享的代码

关于 0x54类型的问题,请问你是ios哪个版本呢

我这边是ios11和iOS12的手机,目前两个问题就是音频有杂音,还音视频不同步,我也发现0x54这个没有使用不知道要怎么处理

mehao commented 5 years ago

你好,到这一步的时候socket连接不上 ser_addr.sin_addr.s_addr = inet_addr("192.168.1.145"); 这个地址是手机的ip地址吗?socket连接的时候拒绝连接了。

hill121212 commented 5 years ago

作者,您好,我是IOS11的手机,在镜像模式下,音频中接收到 0x54 个数据包。在 airplay 协议中,这个类型 的数据包就是控制同步,但是,在代码中,对于 0x54 这个类型的数据包,就只是存放在一个全局变量中而已,没有特别处理,导致镜像时,音频与视频不同步。

这个问题怎么样修改呢? 现在正卡在这里,作者大神帮忙看看!