`
yishuihan_cpp
  • 浏览: 8680 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

微信Android客户端视频录制分析

阅读更多

      最近在做一个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。小测一把后,果然一段活生生视频出现在眼前。

分享到:
评论
16 楼 fangext520 2015-12-01  
大牛,求分享,谢谢啦,现在也在折腾压缩功能,头疼死了,我的 邮箱:350449972@qq.com,万分感谢。
15 楼 u014455840 2014-10-24  
求楼主给个源码,我邮箱543244340@qq.com,万分感谢!!!!
14 楼 PpOo 2014-05-30  
楼主真是牛人啊 楼主是个大好人 楼主事业蒸蒸日上 楼主一生平安
求楼主给个源码 我等屌丝实在看不懂反编译之后的东西 O(∩_∩)O感谢楼主!
469026193@qq.com
13 楼 snowleft 2014-04-11  
楼主,求源码啊,我邮箱snowleft@sina.com万分感谢。
12 楼 wzxxzw519 2014-03-26  
你好,我最近也在做一个IM的软件~也需要用到视频的功能,希望能发一份源码给我学习下哈~不胜感激~~862292012@qq.com
11 楼 jjp513191042 2014-01-06  
这个很犀利。赞一个。可惜没有源码。
能共享下吗?513191042@qq.com
10 楼 peidonghui 2013-11-17  
楼主能不能把源代码发给我学习一下,我邮箱peidonghui2001@126.com,谢谢了!!!
9 楼 futuremvp 2013-09-18  
希望楼主发下源码,1143842809@qq.com
8 楼 继续微笑 2013-07-18  
  楼主能不能把源代码发给我学习一下,最近在搞这方面的。我邮箱leaf88911@163.com
7 楼 cong2008abc 2013-03-28  
。楼主能不能把源代码发给我学习一下,最近在搞这方面的。我邮箱cong2008515@163.com。 十分感谢。
6 楼 chenqingfei 2013-03-15  
博主,我的邮箱是1033304735@qq.com, 非常感谢,希望你能把你的测试demo发给我
5 楼 简屋_l 2012-12-25  
求源码啊 最近在做一个录制视频的功能   兼容性很蛋疼啊  求指导啊  呵呵
邮箱  lujun1259@163.com 
4 楼 songzhiyong1121 2012-10-27  
3 楼 chenjun2010 2012-09-18  
楼主,求交流,求联系方式~
2 楼 maoenci 2012-09-18  
博主,能把这个源码发给我么,你真是大牛,我现在单位要做这个功能,我邮箱tom6776@126.com。万分感谢。
1 楼 chi8wenyu 2012-06-01  
大虾希望把代码公布一下,让大家一起研究研究!!

相关推荐

    Android-Android手机下仿微信客户端界面--微聊

    在Android平台上,构建一个类似微信的客户端界面是一个挑战性的任务,涉及到多个技术点和...通过深入研究并实现该项目,开发者不仅可以掌握Android客户端开发的基本技巧,还能了解到如何构建一个高效、流畅的社交应用。

    android高仿微信(服务器+客户端)

    1. **Android客户端开发**:使用Java或Kotlin作为主要编程语言,基于Android SDK构建用户界面和业务逻辑。运用Android的意图(Intent)系统处理消息传递,使用通知(Notifications)提醒用户新消息。同时,客户端需实现...

    android 仿微信界面源码.zip

    9. **多媒体支持**:微信支持发送文字、图片、语音、视频等多种类型的消息,需要处理多媒体文件的编码解码、录制播放等功能,可能用到MediaRecorder、MediaPlayer、ExoPlayer等库。 10. **实时通信**:为了实现实时...

    Android-仿微信语音聊天

    在Android平台上,仿微信语音聊天是一项常见的开发任务,它涉及到许多关键的技术点。在这个项目中,我们可以看到"AudioSurfaceDemo"这个文件,这很可能是实现语音聊天的核心部分。以下是一些相关的Android语音聊天...

    仿微信聊天实现

    例如,音频录制可以使用MediaRecorder类(如Android的imocc_recorder),音频文件上传后,服务器需要对文件进行存储并提供下载链接,客户端再进行播放。 7. **群聊与广播**:群聊功能需要考虑如何高效地将消息广播...

    android调研各大短视频平台分析报告

    美摄SDK可能包含的组件有视频录制模块、剪辑工具、音频处理库以及UI模板。 2. **短视频SDK调研**:这部分内容可能涵盖了对市面上多个短视频SDK的比较研究,分析了它们的优缺点、性能指标、API易用性、系统兼容性、...

    Android 封装好的录音实现方法、仿微信语音、麦克风录音、发送语音,附带源码及apk

    这个类提供了录制音频、视频的能力。在录音场景中,我们需要初始化`MediaRecorder`,设置录音源(通常为`MediaRecorder.AudioSource.MIC`,即麦克风),设置输出格式(如`MediaRecorder.OutputFormat.THREE_GPP`或`...

    Android发送语音消息(仿微信聊天)

    `MediaRecorder`提供了录音、视频录制等功能,它允许我们设置录音源、编码格式、输出文件等参数。例如,设置音频源为麦克风,编码格式为AAC,输出文件路径等。启动和停止录音可以通过调用`start()`和`stop()`方法...

    人才招聘系统全新支持APP客户端、微信招聘、互动问答、智能搜索、会员积分、短信、地图找工作、WAP手机频道等

    1、 新增安卓Android手机APP客户端程序,支持目前市面上流行的Android 2.1及以上版本;客户端程序主要面向个人求职者使用,目前具备以下功能; a.个人会员注册、登录和修改密码; b.提供关键字和更多条件搜索职位...

    安卓Android源码——Android视频采集+RTSP完整代码(可用).zip

    - **MediaRecorder**:Android系统提供的一个类,用于处理多媒体数据的录制,包括视频和音频。开发者可以使用MediaRecorder来配置摄像头参数,如分辨率、帧率、编码格式等,然后启动录制。 - **Camera API**:...

    仿微信消息包含限时1分钟等

    8. **多平台支持**:微信作为一个跨平台的应用,仿造它的功能也需要考虑到iOS和Android等不同操作系统的适配问题,确保在不同设备上的兼容性和一致性。 9. **扩展性**:随着应用的发展,可能会增加更多的功能,如...

    网软志成人才招聘系统全新支持个人客户端和企业客户端、全新手机触屏版功能多,界面好、微信招聘、互动问答、智能搜索 会员积分、地图找工作等

    1、 新增安卓Android手机APP客户端程序,支持目前市面上流行的Android 2.1及以上版本;客户端程序主要面向个人求职者使用,目前具备以下功能; a.个人会员注册、登录和修改密码; b.提供关键字和更多条件搜索职位,...

    173个Android项目源码_第一部分

    `Android 视频采集+RTSP完整代码(可用)`涉及到Android的多媒体录制和实时流传输协议(RTSP)。这可能是一个可以捕获、编码视频并将其推送到RTSP服务器的应用,涉及到Camera API、MediaRecorder和网络编程。 `...

    精选安卓【Android】应用程序4/6

    Android拥有丰富的网络应用,如社交网络(微信、QQ)、邮件客户端(Gmail)、浏览器(Chrome)等。用户可以随时随地浏览网页、收发邮件、更新社交媒体状态。部分应用还支持离线模式,以便在没有网络连接时使用。 ...

    安卓源代码

    【安卓源代码】是开发者基于Android操作系统进行应用开发的基础,它是整个应用程序的蓝图,包含了...通过分析这个项目,开发者不仅可以学习到Android应用的基本架构,还能深入了解微信等复杂应用的设计理念和实现技巧。

    移动视频监控平台.pptx

    例如,它包含视频转码格式设定、视频输出启动和停止接口、视频录制设定和通知接口,使得系统操作更加灵活和便捷。 5. **手机播放页**:基于HTML5/Flash技术,手机播放页可以在Android、iOS和Windows平台上运行,...

    类似抖音短视频源码,短视频APP开发系统重点内容介绍整理.pdf

    - **Java**:用于Android客户端的开发。 - **Redis**:作为数据缓存,存储常用动态数据,提高响应速度。 - **MySQL**:作为数据存储,负责静态数据的保存。 4. **服务器架构**: - **负载均衡**:通过负载均衡...

    布卡直播电脑版 v2.1.5.32官方版.zip

    布卡直播电脑版是布卡互动直播推出的电脑客户端,采用电视台导播技术,支持导出多个画面场景,支持摄像头、图片、视频、音频等,构建通用在线教育云服务平台。   布卡直播电脑版软件特色 万人直播 布卡架构...

    wxa_dynamic_pkg_release_arm64-v8a-2.1.0-trtc30551.zip

    9. **libwcwss.so**:WCWSS可能代表WeChat Web Service Secure Socket,是微信为服务端和客户端之间安全通信提供的一种协议或服务。 10. **libmmnode.so**:考虑到Node.js的提及,libmmnode.so可能是Node.js环境在...

    让电脑使用手机的摄像头

    将智能手机的摄像头功能集成到个人电脑(PC)上,以便在台式机没有内置摄像头或者摄像头损坏的情况下,仍能进行视频聊天、网络会议、直播、录制视频等操作。这种技术通常涉及到设备间的连接、数据传输以及软件支持。...

Global site tag (gtag.js) - Google Analytics