最近在做一个IOS与Android视频互发的软件,而两个平台提供的相关API中没有共通的视频编码格式。于是对微信视频做了一个简单分析,最后成功将微信Android客户端视频编码库剥离并调用。下面说下大概的分析过程。
首先从对微信录制的mp4视频做编码分析知道用的是H.264/AAC,而对AAC的支持Android是从2.3.3才开始的,所以2.3.3以下的版本必然要自己做编码。
接下就是对微信Android客户端反编并分析,用到的工具当然是apktool,为方面查看.so文件中的符号链接,当然得用下linux里的nm命令,同时配上vim编辑器对反编的smali文件做修改,大事可成。
微信jni调用共有4个so库,经过简单分析可以知道libvprotocal.so正是我们要找的库文件。自然通过其中的函数名可以定位到java中的vprotocal.java类。该类中共有4个native方法,分别是GetNowFrameCnt, cancel,compress和pack。结合微信交互中的流程,首先是录制,录制结束后有一个压缩的过程,那么这四个方法应该比较自然的解释为:GetNowFrameCnt用户获取压缩的进度,cancel用于取消压缩过程,compress为压缩视频或音频,pack应该是将数据进一步打包的意思,具体作用可以做进一步分析。这四个函数中,compress是比较令人头痛的,因为其参数居然有11个。所以如果想把这个库用起来的话,下一步是分析出compress和pack中每个参数的含义。
由于对视频录制、压缩、转换或打包等等没有相关知识,所以本人决定获取微信运行时这些参数的具体值,以期有更多的提示。那么势必要写点
dalvik代码了。
分析微信的log方式后发现在release版中将log关掉了,那么首先将log全部打印出来,这个改动还是比较简单的,修改完成后重新打包后安装运行。果然一堆log出现。于是赶紧再录一段视频,此时出现了跟视频相关的log,在录制和压缩过程中都周期性在打印log,看来有点希望了。
接下来就是打印上述compress和pack两个函数中的参数(这里需要费点功夫,刚开始写dalvik代码还有点不舒服,简单一句Log.d()要敲十几行的代码)。vprotocal.java中将这两个函数进一步做了封装,但还是在vprotocal类中调用,所以可以在调用前插入打印参数值的代码。经过几次崩溃后终于将打印log的代码搞定,于是迫不及待的再打包运行录视频,此时log中清晰的将这几个函数的调用顺序以及参数值打印出来。
进一步的分析每个参数的值,终于确定了这些参数的含义,其中compress的参数中包括视频转换前后的高和宽,帧率,原始视频数据文件,生成缩略图文件等,pack的参数包括生成的mp4文件路径,原始视频数据和原始音频数据。生成视频的过程为:生成视频缩略图,压缩原始视频数据,将压缩后的视频和音频数据打包成最终的mp4。在压缩过程中,通过调用GetNowFrameCnt来周期性的获取压缩进度。
至此,微信视频录制分析完成。接下来赶紧新建测试工程,并将libvprotocal.so拷过来,然后实现vprotocal.java。小测一把后,果然一段活生生视频出现在眼前。
分享到:
相关推荐
在Android平台上,构建一个类似微信的客户端界面是一个挑战性的任务,涉及到多个技术点和...通过深入研究并实现该项目,开发者不仅可以掌握Android客户端开发的基本技巧,还能了解到如何构建一个高效、流畅的社交应用。
1. **Android客户端开发**:使用Java或Kotlin作为主要编程语言,基于Android SDK构建用户界面和业务逻辑。运用Android的意图(Intent)系统处理消息传递,使用通知(Notifications)提醒用户新消息。同时,客户端需实现...
9. **多媒体支持**:微信支持发送文字、图片、语音、视频等多种类型的消息,需要处理多媒体文件的编码解码、录制播放等功能,可能用到MediaRecorder、MediaPlayer、ExoPlayer等库。 10. **实时通信**:为了实现实时...
在Android平台上,仿微信语音聊天是一项常见的开发任务,它涉及到许多关键的技术点。在这个项目中,我们可以看到"AudioSurfaceDemo"这个文件,这很可能是实现语音聊天的核心部分。以下是一些相关的Android语音聊天...
例如,音频录制可以使用MediaRecorder类(如Android的imocc_recorder),音频文件上传后,服务器需要对文件进行存储并提供下载链接,客户端再进行播放。 7. **群聊与广播**:群聊功能需要考虑如何高效地将消息广播...
美摄SDK可能包含的组件有视频录制模块、剪辑工具、音频处理库以及UI模板。 2. **短视频SDK调研**:这部分内容可能涵盖了对市面上多个短视频SDK的比较研究,分析了它们的优缺点、性能指标、API易用性、系统兼容性、...
这个类提供了录制音频、视频的能力。在录音场景中,我们需要初始化`MediaRecorder`,设置录音源(通常为`MediaRecorder.AudioSource.MIC`,即麦克风),设置输出格式(如`MediaRecorder.OutputFormat.THREE_GPP`或`...
`MediaRecorder`提供了录音、视频录制等功能,它允许我们设置录音源、编码格式、输出文件等参数。例如,设置音频源为麦克风,编码格式为AAC,输出文件路径等。启动和停止录音可以通过调用`start()`和`stop()`方法...
1、 新增安卓Android手机APP客户端程序,支持目前市面上流行的Android 2.1及以上版本;客户端程序主要面向个人求职者使用,目前具备以下功能; a.个人会员注册、登录和修改密码; b.提供关键字和更多条件搜索职位...
- **MediaRecorder**:Android系统提供的一个类,用于处理多媒体数据的录制,包括视频和音频。开发者可以使用MediaRecorder来配置摄像头参数,如分辨率、帧率、编码格式等,然后启动录制。 - **Camera API**:...
8. **多平台支持**:微信作为一个跨平台的应用,仿造它的功能也需要考虑到iOS和Android等不同操作系统的适配问题,确保在不同设备上的兼容性和一致性。 9. **扩展性**:随着应用的发展,可能会增加更多的功能,如...
1、 新增安卓Android手机APP客户端程序,支持目前市面上流行的Android 2.1及以上版本;客户端程序主要面向个人求职者使用,目前具备以下功能; a.个人会员注册、登录和修改密码; b.提供关键字和更多条件搜索职位,...
`Android 视频采集+RTSP完整代码(可用)`涉及到Android的多媒体录制和实时流传输协议(RTSP)。这可能是一个可以捕获、编码视频并将其推送到RTSP服务器的应用,涉及到Camera API、MediaRecorder和网络编程。 `...
Android拥有丰富的网络应用,如社交网络(微信、QQ)、邮件客户端(Gmail)、浏览器(Chrome)等。用户可以随时随地浏览网页、收发邮件、更新社交媒体状态。部分应用还支持离线模式,以便在没有网络连接时使用。 ...
【安卓源代码】是开发者基于Android操作系统进行应用开发的基础,它是整个应用程序的蓝图,包含了...通过分析这个项目,开发者不仅可以学习到Android应用的基本架构,还能深入了解微信等复杂应用的设计理念和实现技巧。
例如,它包含视频转码格式设定、视频输出启动和停止接口、视频录制设定和通知接口,使得系统操作更加灵活和便捷。 5. **手机播放页**:基于HTML5/Flash技术,手机播放页可以在Android、iOS和Windows平台上运行,...
- **Java**:用于Android客户端的开发。 - **Redis**:作为数据缓存,存储常用动态数据,提高响应速度。 - **MySQL**:作为数据存储,负责静态数据的保存。 4. **服务器架构**: - **负载均衡**:通过负载均衡...
布卡直播电脑版是布卡互动直播推出的电脑客户端,采用电视台导播技术,支持导出多个画面场景,支持摄像头、图片、视频、音频等,构建通用在线教育云服务平台。 布卡直播电脑版软件特色 万人直播 布卡架构...
9. **libwcwss.so**:WCWSS可能代表WeChat Web Service Secure Socket,是微信为服务端和客户端之间安全通信提供的一种协议或服务。 10. **libmmnode.so**:考虑到Node.js的提及,libmmnode.so可能是Node.js环境在...
将智能手机的摄像头功能集成到个人电脑(PC)上,以便在台式机没有内置摄像头或者摄像头损坏的情况下,仍能进行视频聊天、网络会议、直播、录制视频等操作。这种技术通常涉及到设备间的连接、数据传输以及软件支持。...