Android AOSP 环境下实现C++直接调用libmedia.so接口播放视频文件。

最近需要hook android libmedia.so以取得播放进度。

没搞出来,先搞了个c++直接播放MP4的程序:

#include 
#include 
#include 

#define LOG_TAG "INJECT-lx"
#include 


#include 
#include 
#include 
#include 
#include 
#include 

/
#ifdef ANDROID_5
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include             // for FOURCC definition
#include "android_runtime/AndroidRuntime.h"
#include "jni.h"
#include 
#include "android_media_BufferingParams.h"
#include "android_media_MediaDataSource.h"
#include "android_media_MediaMetricsJNI.h"
#include "android_media_PlaybackParams.h"
#include "android_media_SyncParams.h"
#include "android_media_VolumeShaper.h"
#else
#include 
#include "jni.h"
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#endif
/


#ifndef int32_t
#ifdef _WIN32
typedef int         status_t;
#else
typedef int32_t     status_t;
#endif
#endif


#define LOGD(fmt,args...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,fmt,##args);\
printf(fmt,##args)

extern "C" void *memcpy(void *dest, const void *src, size_t n);

typedef status_t (*t_setDataSource1)(const char *url);
typedef status_t (*pause_t)();

typedef status_t (android::MediaPlayer::*t_setDataSource2)(int fd, int64_t offset, int64_t length);
typedef status_t (android::MediaPlayer::*mp_pause_t)();

struct fields_t {
    jfieldID    context;
    jfieldID    surface_texture;

    jmethodID   post_event;

    jmethodID   proxyConfigGetHost;
    jmethodID   proxyConfigGetPort;
    jmethodID   proxyConfigGetExclusionList;
};
//using std::string;

extern "C"{
	
	int file_exists(char* path){
		FILE* fp = fopen(path, "r");
		if(fp==NULL) return 0;
		fclose(fp);
		return 1;
	}

}

using android::MediaPlayer;
using android::MediaPlayerListener;

namespace android{
class MyMediaPlayerListener: public MediaPlayerListener
{
public:
	void notify(int msg, int ext1, int ext2, const Parcel *obj)
	{
		LOGD("int msg=%d, int ext1=%d, int ext2=%d, const Parcel *obj=%p\n", msg, ext1, ext2, obj);
	}
/*protected:
	~RefBase()
	{
		LOGD("%s->%s->%d\n", __FILE__, __FUNCTION__, __LINE__);
	}
	*/
};
}
using android::sp;
using android::ProcessState;
using android::MyMediaPlayerListener;
int main(int argc, char** argv) {
	LOGD(" [V003] ");
	char mp4file[256];
	strcpy(mp4file, "/sdcard/1.mp4");
	int i;
	char* str,*pstr;
	for(i=0;i
                    
                    
  • 配置InfiniBand (IB) 和 RDMA over Converged Ethernet (RoCE) 网络 Funhpc_huachen 网络服务器运维linux
    配置InfiniBand(IB)和RDMAoverConvergedEthernet(RoCE)网络服务器端配置在服务器端,你需要确保安装了必要的驱动程序和软件包,并且正确配置了网络接口。安装OFED首先,安装OpenFabricsEnterpriseDistribution(OFED),它包含了InfiniBand所需的驱动程序和库。sudoapt-getupdatesudoapt-getins
  • 首席数据官CDO:企业数据资产的“首席架构师
    一、CDO岗位的重要性解读:从数据爆炸到企业战略核心总的来说,CDO的诞生是技术、商业与监管三重驱动的结果。技术方面:21世纪初,随着互联网、移动设备和物联网(IoT)的普及,企业数据呈现爆炸式增长。传统IT部门难以兼顾基础设施运维与数据价值挖掘,企业开始意识到需要专职角色统筹数据管理,确保数据从“成本负担”变为“战略资产”。商业方面:2010年代,企业加速数字化转型,但数据孤岛、低质量数据等问题
  • 【前端必备】VSCode实用图片预览插件 Guang_how927 前端vscode编辑器前端插件图像处理
    ImagepreviewImagePreview插件功能概述ImagePreview插件通常用于在网页或应用程序中提供图片的预览功能,允许用户快速查看缩略图或放大后的图像,而无需打开单独的页面或下载文件。核心功能缩略图生成自动将上传的大尺寸图片转换为缩略图,便于在列表或画廊中展示。支持自定义缩略图尺寸和质量。鼠标悬停预览当用户将鼠标悬停在缩略图上时,显示放大版的图像。通常支持调整预览窗口的位置和大
  • 【Azure 应用服务】Azure Web App 服务默认支持一些 Weak TLS Ciphers Suite,是否有办法自定义修改呢? 云中路灯
    问题描述当AzureWebApp进行安全扫描后,发现依旧支持很多弱TLS加密套件(WeakTLSCiphersSuite),那么是否有办法来关闭这些弱的加密套件呢?在WindowsIIS环境中,可以通过修改注册表修改ForMicrosoftIIS,youshouldmakesomechangestothesystemregistry.Incorrectlyeditingtheregistrymay
  • 一文看懂NTP协议 Neolock 网络协议网络协议ntp网络
    最近碰到一个NTP协议相关的题,卡了很久,才发现一直在用的NTP协议完全不了解他的原理,遂学习并总结一下1.NTP概述NTP(NetworkTimeProtocol)是一种用于同步计算机系统时钟的网络协议,旨在通过分层架构和精密算法,将设备时间同步至全球协调时间(UTC),精度可达毫秒甚至微秒级。其核心目标是通过减少时钟偏差和网络延迟影响,确保分布式系统的时间一致性2.NTP分层架构(Stratu
  • JAVA反序列化深入学习(三):CommonsCollections1 Neolock 漏洞原理JAVA反序列化java网络安全反序列化
    ApacheCommonsCollections是一个扩展了Java标准库里的Collection结构的第三方基础库,它提供了很多强有力的数据结构类型并实现了各种集合工具类。作为Apache开源项目的重要组件,被广泛运用于各种Java应用的开发。目录JAVA环境依赖版本检查依赖配置资源下载前置知识AbstractMapDecoratorTransformedMapdecoratetransform
  • 自媒体资料收集 某人在
    https://baike.baidu.com/tashuo/browse/content?id=90920d34ef91b6d8f0531701&fr=qingtian&lemmaId=829414
  • 数据可视化——折线图 殇城碎梦. python基础学习python
    #导入所需要的包importmatplotlib.pyplotasplt#设置图表样式plt.style.use('seaborn-v0_8')#增强中文字体配置-添加更多系统字体确保兼容性#增强中文字体配置-优先Windows系统常用字体plt.rcParams["font.family"]=["sans-serif"]plt.rcParams["font.sans-serif"]=["SimH
  • Git - 配置并使用多个SSH KEY(2)
    4.http协议http/s协议:超文本传输协议优点:简便缺点:效率更低$gitclonehttps://gitlab.com/xxxxxxxx/text.git从上面的对比结果来看,用ssh协议确实更有优势。当然,这并不是本文想要重点阐述的问题。我们在使用ssh协议的时候,需要生成sshkey,如果多个平台(例如同时使用GitHub和Gitlab)都要使用ssh,那么就要生成多组sshkey并进
  • 0基础学画画(稀疏草原),连载75/100天 大鱼漫说
    大家好,我是大鱼漫说,你们可以叫我大鱼,我现在是一位零基础学习绘画的程序员。每日一问~小鱼问:procreate有哪些好用的快捷键吗?我每次都是去一个一个点击选择。大鱼答:有,最常用的就是撤退和前进,两个手指单击就是撤退,三个手指单击就是快进;再有就是三指上划,可以打开设置键,选择复制、粘贴、剪切等;四指点击屏幕是全屏,两指捏合可以快速放大缩小。这些差不多就够用了,其他的大鱼用的也比较少。打卡画画
  • 2024《逃脱 탈주》韩国电影【1080p韩语中字】免费在线观看完整未删减版夸克网盘高清迅雷百度云网盘资源 优惠攻略官
    《逃脱》(韩语:탈주,英语:Escape)是一部2024年上映的韩国动作电影,由李宗弼执导,李帝勋和具教焕主演。这部电影讲述了朝鲜士兵圭南(由李帝勋饰演)梦想着越过铁栏杆,逃离朝鲜追求自由的故事。在逃亡过程中,他与决心阻止他的朝鲜保卫部军官贤尚(由具教焕饰演)之间展开了一场紧张的逃亡与追击战。提示:文章排版原因,观影资源链接地址放在文章结尾,往下翻就行提示:文章排版原因,观影资源链接地址放在文章结
  • 【iOS】锁[特殊字符]
    文章目录前言1️⃣什么是锁?1.1基本概念1.2锁的分类2️⃣OC中的常用锁2.1OSSpinLock(已弃用):“自旋锁”的经典代表为什么尽量在开发中不使用自旋锁自旋锁的本质缺陷:忙等待(BusyWaiting)os_unfair_lock的局限性:不适用于复杂场景苹果的官方建议:优先使用更高效的锁2.2dispatch_semaphore_t(GCD信号量):“高性能通用锁”2.3pthrea
  • C++之constexpr和常量表达式 掘根 c++开发语言
    常量表达式常量表达式(constexpression)是指值不会改变并且在编译过程就能得到计算结果的表达式。显然,字面值属于常量表达式,用常量表达式初始化的const对象也是常量表达式。后面将会提到,C++语言中有几种情况下是要用到常量表达式的。一个对象(或表达式)是不是常量表达式由它的数据类型和初始值共同决定,例如:constintmax_files=20;//max_files是常量表达式co
  • 宗毅说 | 乌卡瑟时代的生存思考 裂变学院
    今天,互联网经济、人工智能、全球化发展对我们的影响,要比我们想象得大得多。在多股合力的相互作用下,这个时代的社会特征、商业特征与之前相比显著不同,我称之为乌卡瑟“VUCASE”。备注:乌卡瑟(VUCASE)这个术语是我自创的,来自于乌卡(VUKA)。VUCA是Volatility(易变性),Uncertainty(不确定性),Complexity(复杂性)、Ambiguity(模糊性)这四个英文单
  • 钱的故事 蟹先生的咖啡屋
    钱的故事picturefromwww.pexels.com昨天看到一句话,大意是“钱在不断地流通,遇到过许多人,许多事。”一百的人民币肯定没有一元硬币的经历有趣,即使它的价值是百元的百分之一。坐公交,坐地铁,常常会用到一元硬币;足球比赛开球的优先权,也会用到一元人硬币;就算在街角,乞丐的碗里,也会有许多一元硬币。在不知名的小乡村,买菜用的大都是一元一角;在许愿池子里,也有许多一元硬币。孩子常常玩一
  • C++ 使用 constexpr 、查表法、分治法加速位镜像翻转
    代码//////@brief左右翻转位。//////@note翻转后,最低位位将变为最高位,最高位将变为最低位。//////templaterequires(std::is_same_v)constexprTReverse(Tvalue){int32_tbit_count=sizeof(T)*8;for(int32_ti=0;irequires(std::is_integral_v&&!std::
  • Linux的Initrd机制 被触发 linux
    Linux 的 initrd 技术是一个非常普遍使用的机制,linux2.6 内核的 initrd 的文件格式由原来的文件系统镜像文件转变成了 cpio 格式,变化不仅反映在文件格式上, linux 内核对这两种格式的 initrd 的处理有着截然的不同。本文首先介绍了什么是 initrd 技术,然后分别介绍了 Linux2.4 内核和 2.6 内核的 initrd 的处理流程。最后通过对 Lin
  • maven本地仓库路径修改 bitcarter maven
    默认maven本地仓库路径:C:\Users\Administrator\.m2 修改maven本地仓库路径方法:     1.打开E:\maven\apache-maven-2.2.1\conf\settings.xml     2.找到        
  • XSD和XML中的命名空间 darrenzhu xmlxsdschemanamespace命名空间
    http://www.360doc.com/content/12/0418/10/9437165_204585479.shtml http://blog.csdn.net/wanghuan203/article/details/9203621 http://blog.csdn.net/wanghuan203/article/details/9204337 http://www.cn
  • Java 求素数运算 周凡杨 java算法素数
    网络上对求素数之解数不胜数,我在此总结归纳一下,同时对一些编码,加以改进,效率有成倍热提高。 第一种:   原理: 6N(+-)1法         任何一个自然数,总可以表示成为如下的形式之一: 6N,6N+1,6N+2,6N+3,6N+4,6N+5 (N=0,1,2,…)   
  • java 单例模式 g21121 java
    想必单例模式大家都不会陌生,有如下两种方式来实现单例模式:   class Singleton { private static Singleton instance=new Singleton(); private Singleton(){} static Singleton getInstance() { return instance; }
  • Linux下Mysql源码安装 510888780 mysql
    1.假设已经有mysql-5.6.23-linux-glibc2.5-x86_64.tar.gz (1)创建mysql的安装目录及数据库存放目录       解压缩下载的源码包,目录结构,特殊指定的目录除外:           
  • 32位和64位操作系统 墙头上一根草 32位和64位操作系统
    32位和64位操作系统是指:CPU一次处理数据的能力是32位还是64位。现在市场上的CPU一般都是64位的,但是这些CPU并不是真正意义上的64 位CPU,里面依然保留了大部分32位的技术,只是进行了部分64位的改进。32位和64位的区别还涉及了内存的寻址方面,32位系统的最大寻址空间是2 的32次方= 4294967296(bit)= 4(GB)左右,而64位系统的最大寻址空间的寻址空间则达到了
  • 我的spring学习笔记10-轻量级_Spring框架 aijuans Spring 3
    一、问题提问:     → 请简单介绍一下什么是轻量级?     轻量级(Leightweight)是相对于一些重量级的容器来说的,比如Spring的核心是一个轻量级的容器,Spring的核心包在文件容量上只有不到1M大小,使用Spring核心包所需要的资源也是很少的,您甚至可以在小型设备中使用Spring。  
  • mongodb 环境搭建及简单CURD antlove WebInstallcurdNoSQLmongo
    一 搭建mongodb环境 1. 在mongo官网下载mongodb 2. 在本地创建目录 "D:\Program Files\mongodb-win32-i386-2.6.4\data\db" 3. 运行mongodb服务 [mongod.exe --dbpath "D:\Program Files\mongodb-win32-i386-2.6.4\data\
  • 数据字典和动态视图 百合不是茶 oracle数据字典动态视图系统和对象权限
    数据字典(data dictionary)是 Oracle 数据库的一个重要组成部分,这是一组用于记录数据库信息的只读(read-only)表。随着数据库的启动而启动,数据库关闭时数据字典也关闭   数据字典中包含   数据库中所有方案对象(schema object)的定义(包括表,视图,索引,簇,同义词,序列,过程,函数,包,触发器等等) 数据库为一
  • 多线程编程一般规则 bijian1013 javathread多线程java多线程
           如果两个工两个以上的线程都修改一个对象,那么把执行修改的方法定义为被同步的,如果对象更新影响到只读方法,那么只读方法也要定义成同步的。        不要滥用同步。如果在一个对象内的不同的方法访问的不是同一个数据,就不要将方法设置为synchronized的。
  • 将文件或目录拷贝到另一个Linux系统的命令scp bijian1013 linuxunixscp
    一.功能说明        scp就是security copy,用于将文件或者目录从一个Linux系统拷贝到另一个Linux系统下。scp传输数据用的是SSH协议,保证了数据传输的安全,其格式如下:        scp 远程用户名@IP地址:文件的绝对路径
  • 【持久化框架MyBatis3五】MyBatis3一对多关联查询 bit1129 Mybatis3
    以教员和课程为例介绍一对多关联关系,在这里认为一个教员可以叫多门课程,而一门课程只有1个教员教,这种关系在实际中不太常见,通过教员和课程是多对多的关系。   示例数据:   地址表:   CREATE TABLE ADDRESSES ( ADDR_ID INT(11) NOT NULL AUTO_INCREMENT, STREET VAR
  • cookie状态判断引发的查找问题 bitcarter formcgi
    先说一下我们的业务背景: 1.前台将图片和文本通过form表单提交到后台,图片我们都做了base64的编码,并且前台图片进行了压缩 2.form中action是一个cgi服务 3.后台cgi服务同时供PC,H5,APP 4.后台cgi中调用公共的cookie状态判断方法(公共的,大家都用,几年了没有问题) 问题:(折腾两天。。。。) 1.PC端cgi服务正常调用,cookie判断没
  • 通过Nginx,Tomcat访问日志(access log)记录请求耗时 ronin47
    一、Nginx通过$upstream_response_time $request_time统计请求和后台服务响应时间 nginx.conf使用配置方式: log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_r
  • java-67- n个骰子的点数。 把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出S的所有可能的值出现的概率。 bylijinnan java
    public class ProbabilityOfDice { /** * Q67 n个骰子的点数 * 把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出S的所有可能的值出现的概率。 * 在以下求解过程中,我们把骰子看作是有序的。 * 例如当n=2时,我们认为(1,2)和(2,1)是两种不同的情况 */ private stati
  • 看别人的博客,觉得心情很好 Cb123456 博客心情
       以为写博客,就是总结,就和日记一样吧,同时也在督促自己。今天看了好长时间博客:    职业规划:    http://www.iteye.com/blogs/subjects/zhiyeguihua      android学习:    1.http://byandby.i
  • [JWFD开源工作流]尝试用原生代码引擎实现循环反馈拓扑分析 comsci 工作流
        我们已经不满足于仅仅跳跃一次,通过对引擎的升级,今天我测试了一下循环反馈模式,大概跑了200圈,引擎报一个溢出错误      在一个流程图的结束节点中嵌入一段方程,每次引擎运行到这个节点的时候,通过实时编译器GM模块,计算这个方程,计算结果与预设值进行比较,符合条件则跳跃到开始节点,继续新一轮拓扑分析,直到遇到
  • JS常用的事件及方法 cwqcwqmax9 js
    事件 描述 onactivate 当对象设置为活动元素时触发。 onafterupdate 当成功更新数据源对象中的关联对象后在数据绑定对象上触发。 onbeforeactivate 对象要被设置为当前元素前立即触发。 onbeforecut 当选中区从文档中删除之前在源对象触发。 onbeforedeactivate 在 activeElement 从当前对象变为父文档其它对象之前立即
  • 正则表达式验证日期格式 dashuaifu 正则表达式IT其它java其它
    正则表达式验证日期格式 function isDate(d){ var v = d.match(/^(\d{4})-(\d{1,2})-(\d{1,2})$/i); if(!v) { this.focus(); return false; } } <input value="2000-8-8" onblu
  • Yii CModel.rules() 方法 、validate预定义完整列表、以及说说验证 dcj3sjt126com yii
    public array rules () {return} array 要调用 validate() 时应用的有效性规则。 返回属性的有效性规则。声明验证规则,应重写此方法。 每个规则是数组具有以下结构:array('attribute list', 'validator name', 'on'=>'scenario name', ...validation
  • UITextAttributeTextColor = deprecated in iOS 7.0 dcj3sjt126com ios
    In this lesson we used the key "UITextAttributeTextColor" to change the color of the UINavigationBar appearance to white. This prompts a warning "first deprecated in iOS 7.0." Ins
  • 判断一个数是质数的几种方法 EmmaZhao Mathpython
    质数也叫素数,是只能被1和它本身整除的正整数,最小的质数是2,目前发现的最大的质数是p=2^57885161-1【注1】。 判断一个数是质数的最简单的方法如下: def isPrime1(n): for i in range(2, n): if n % i == 0: return False return True 但是在上面的方法中有一些冗余的计算,所以
  • SpringSecurity工作原理小解读 坏我一锅粥 SpringSecurity
      SecurityContextPersistenceFilter   ConcurrentSessionFilter   WebAsyncManagerIntegrationFilter   HeaderWriterFilter   CsrfFilter   LogoutFilter   Use
  • JS实现自适应宽度的Tag切换 ini JavaScripthtmlWebcsshtml5
    效果体验:http://hovertree.com/texiao/js/3.htm   该效果使用纯JavaScript代码,实现TAB页切换效果,TAB标签根据内容自适应宽度,点击TAB标签切换内容页。 HTML文件代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"
  • Hbase Rest API : 数据查询 kane_xie RESThbase
    hbase(hadoop)是用java编写的,有些语言(例如python)能够对它提供良好的支持,但也有很多语言使用起来并不是那么方便,比如c#只能通过thrift访问。Rest就能很好的解决这个问题。Hbase的org.apache.hadoop.hbase.rest包提供了rest接口,它内嵌了jetty作为servlet容器。   启动命令:./bin/hbase rest s
  • JQuery实现鼠标拖动元素移动位置(源码+注释) 明子健 jqueryjs源码拖动鼠标
    欢迎讨论指正!   print.html代码: <!DOCTYPE html> <html> <head> <meta http-equiv=Content-Type content="text/html;charset=utf-8"> <title>发票打印</title> &l
  • Postgresql 连表更新字段语法 update qifeifei PostgreSQL
    下面这段sql本来目的是想更新条件下的数据,可是这段sql却更新了整个表的数据。sql如下: UPDATE tops_visa.visa_order SET op_audit_abort_pass_date = now() FROM tops_visa.visa_order as t1 INNER JOIN tops_visa.visa_visitor as t2 ON t1.
  • 将redis,memcache结合使用的方案? tcrct rediscache
    公司架构上使用了阿里云的服务,由于阿里的kvstore收费相当高,打算自建,自建后就需要自己维护,所以就有了一个想法,针对kvstore(redis)及ocs(memcache)的特点,想自己开发一个cache层,将需要用到list,set,map等redis方法的继续使用redis来完成,将整条记录放在memcache下,即findbyid,save等时就memcache,其它就对应使用redi
  • 开发中遇到的诡异的bug wudixiaotie bug
    今天我们服务器组遇到个问题: 我们的服务是从Kafka里面取出数据,然后把offset存储到ssdb中,每个topic和partition都对应ssdb中不同的key,服务启动之后,每次kafka数据更新我们这边收到消息,然后存储之后就发现ssdb的值偶尔是-2,这就奇怪了,最开始我们是在代码中打印存储的日志,发现没什么问题,后来去查看ssdb的日志,才发现里面每次set的时候都会对同一个key