IJKPlayer源码分析-整体结构

根据我们的之前的老方法,采用结构化的方式来对IJKPlayer源码做个分析,首先,我们从整体的角度先把IJKPlayer的整体架构和流程讲下,让大家先有个整体的印象。

本地JNI入口

在Android环境下,JVM层载入一个本地so库流程大致如下:

所以,我们的切入点就从JNI_OnLoad开始,看看和JAVA层交互都有那些方法,以及JAVA层和本地层对接的类是什么。

其so库的加载和退出思维导图如下:

其实主要就是初始化全局的一些环境,比如加载FFMepg的音视频数据解码库、封装格式解码库以及一些全局锁对象等。

IJKPlayer播放整体流程

首先我们先说下IJKPlayer播放视频涉及到的关键技术。

  • 底层采用FFMpeg开源框架来进行音视频的解码(包括封装格式和数据);
  • 在音视频解码这块IJKPlayer实现自己的部分逻辑,比如在Android支持硬解码(采用MediaCodec完成);
  • 在Android环境下,视频的播放支持Opengl ES进行视频渲染;

因此,要完全看懂其源码和逻辑,需要的知识点还是比较多,不如Opengl ES、Android的硬编硬解码、FFMpeg框架原理,最后还需要弄懂基本的图像和音频知识,其它诸如常用的封装格式(比如.flv、.mp4等)、音视频的一些编解码知识(H264、AAC、PCM等)也要掌握,这样,阅读其源码才比较容易。

可见,很多时候我们了解某个东西,其知识可能不在东西本身,而在此东西之外。

废话不多说,我们先看看IJKPlayer的播放整体流程。

IjkMediaPlayer_native_setup:

功能:完成IJK播放环境的初始化,创建IjkMediaPlayer本地结构对象,然后初始化平台相关的解码器和音视频的处理例程,同时,把IjkMediaPlayer保存到JAVA端对应类的_mNativeMediaPlayer成员变量(类型为long),JAVA端类的弱引用保存到IjkMediaPlayer的成员weak_thiz(类型为void*),到这里,就把JAVA端的播放类和本地播放结构互相对应起来。

注意,本地和JAVA端这种映射关系只有调用IjkMediaPlayer_release才会解除。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/56498.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在数据库产品中如何设计基于列和行的访问控制功能

在数据库产品中设计基于列和行的访问控制功能(Column-Level and Row-Level Access Control, CLAC 和 RLAC)是一种细粒度的权限管理方式,能够进一步提升数据安全性和灵活性。通过这种控制,数据库可以限制特定用户或角色只能访问某些…

【C++11】包装器:深入解析与实现技巧

C 包装器:深入解析与实现技巧 个人主页 C专栏 目录 引言包装器的定义与用途C 包装器的常见应用场景实现包装器的技巧使用 RAII 实现资源管理案例分析:智能指针模板包装器的应用包装器与设计模式性能优化更多应用案例总结 引言 C 是一门灵活且强大的语…

搜维尔科技:感受、握持、推动、连接和挤压虚拟物体,SenseGlove触觉反馈手套拥有先进的触觉技术、一流的可用性和功能

感受、握持、推动、连接和挤压虚拟物体,SenseGlove触觉反馈手套拥有先进的触觉技术、一流的可用性和功能 感受、握持、推动、连接和挤压虚拟物体,SenseGlove触觉反馈手套拥有先进的触觉技术、一流的可用性和功能

vue后台管理系统从0到1搭建(4)各组件的搭建

文章目录 vue后台管理系统从0到1搭建(4)各组件的搭建Main.vue 组件的初构 vue后台管理系统从0到1搭建(4)各组件的搭建 Main.vue 组件的初构 根据我们的效果来看,分析一下,我们把左边的区域分为一个组件&am…

Learn OpenGL In Qt之纹理

竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生~ 公众号: C学习与探索 | 个人主页: rainInSunny | 个人专栏: Learn OpenGL In Qt 文章目录 纹理纹理坐标纹理环绕方式纹理采样多级渐远纹理 纹理加载和创建加载纹理创建纹理 应用纹理 纹理 纹理坐标…

等保测评在各个行业的应用

等保测评的基本概念和流程 等保测评,即网络安全等级保护测评,是根据国家相关法律法规和标准,对信息系统实施安全等级划分,并针对各等级采取相应安全保护措施的过程。等保测评的流程通常包括信息系统定级、备案、安全建设、等级测评…

Element UI 的 el-tree 组件节点取消双击后的鼠标选中文字状态

要取消 Element UI 的 el-tree 组件节点双击后的鼠标选中文字状态,你可以通过以下几种方式来实现: 使用 CSS 禁止选中: 你可以在全局样式中或者特定的树节点上添加 CSS 规则,来禁止用户选择文本。例如,你可以在 el-tre…

【AWS AMI跨境备份】跨境使用 S3 备份和还原 AMI 镜像

文章目录 一、实验场景二、实验目标三、实验架构图四、涉及到AWS服务五、演示操作5.1 创建EC2实例5.2 创建映像5.3 备份AMI至Global S35.4 复制AMI从Global S3至 CN S35.5 还原AMI5.6 测试AMI 六、参考链接 一、实验场景 将 AWS Global区域的EC2实例备份至 AWS CN区域。 备份…

苍穹外卖学习笔记(二十五)

文章目录 Spring Task介绍应用场景: cron表达式例如: 入门案例 订单状态定时处理处理超时订单处理一直配送中的订单OrderMapper WebSocket介绍HTTP协议和WebSocket协议对比应用场景:入门案例1. 使用websocket.html作为WebSocket客户端2. 导入…

Windows多线程编程 互斥量和临界区使用

Windows 多线程编程允许程序同时运行多个线程,提高程序的并发性和执行效率。多线程编程中的核心概念包括线程的创建、同步、调度、数据共享和竞争条件等。本文详细介绍了 Windows 多线程编程的关键技术点,并解释如何使用线程同步机制来保证线程安全。 1…

2.2.ReactOS系统,系统调用表MainSSDT的实现

2.2.ReactOS系统,系统调用表MainSSDT的实现 2.2.ReactOS系统,系统调用表MainSSDT的实现 文章目录 2.2.ReactOS系统,系统调用表MainSSDT的实现系统调用表MainSSDTSVC_ 宏的定义sysfuncs.h函数的声明 系统调用表MainSSDT ULONG_PTR MainSSDT[…

【FFmpeg系列】:图片处理

引言 FFmpeg 是一个功能强大的多媒体处理工具,广泛应用于音视频处理领域。然而,它的图片处理能力同样不容忽视。本文将深入探讨 FFmpeg 在图片处理方面的高级技巧和优化方法,帮助您更高效地完成图片处理任务。 一、图片格式转换 1.1 基础转…

前端打印功能(vue +springboot)

后端 后端依赖生成pdf的方法pdf转图片使用(用的打印模版是带参数的 ,参数是aaa)总结 前端页面 效果 后端 依赖 依赖 一个是用模版生成对应的pdf,一个是用来将pdf转成图片需要的 <!--打印的--><dependency><groupId>net.sf.jasperreports</groupId>&l…

LCD补充

LCD补充 目录 LCD补充 tip:随着我们学的越来越多&#xff0c;代码长度越来越长&#xff0c;编译越来越慢&#xff0c;有没有超过内存是我们比较关心的一件事&#xff0c;通过以下方法可以实时看到写的代码的大小 回顾LCD LCD补充功能 -- 1、有关在LCD上显示动图&#xff…

前端使用Canvas实现网页电子签名(撤销、下载)

前言&#xff1a;一般在一些后台的流程资料以及审核的场景中会需要电子签名&#xff0c;介绍一种用canvas实现的电子签名&#xff0c;此案例用的是原生js 效果展示&#xff1a; 一、html和css&#xff1a; <div class"divCla2"><canvas id"myCanvas&q…

数据结构-排序算法

基于交换的排序算法 快速排序&#xff1a; 最优情况 最优情况下&#xff0c;每次找到的参考轴把数据分成均匀的两半&#xff0c;最后应该是一个平衡二叉树状态&#xff1b;二叉树的层数&#xff08;logn&#xff09;即为递归需要进行的次数&#xff0c;并且每轮递归结束时&…

Java语言-抽象类

目录 1.抽象类概念 2.抽象类语法 3.抽象类特性 4.抽象类作用 1.抽象类概念 在面向对象的概念中&#xff0c;所有的对象都是通过类来描绘的&#xff0c;但是反过来&#xff0c;并不是所有的类都是用来描绘对象的&#xff0c; 如果 一个类中没有包含足够的信息来描绘一个具体…

YARN调度原理详解

YARN&#xff08;Yet Another Resource Negotiator&#xff09;是 Hadoop 集群的资源管理和作业调度框架&#xff0c;它的设计旨在更好地管理和调度 Hadoop 集群中的资源。YARN 解决了传统 Hadoop MapReduce 中资源管理与作业调度紧耦合的问题&#xff0c;使得不同类型的计算任…

115.WEB渗透测试-信息收集-ARL(6)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;114.WEB渗透测试-信息收集-ARL&#xff08;5&#xff09; httpd就是apache环境&#xff0…

跨平台音摄像头|屏幕推送选OBS还是SmartPublisher?

好多开发者希望搞明白OBS和 SmartPublisher的区别和使用场景差别&#xff0c;本文就二者差别做个对比&#xff1a; OBS OBS&#xff08;Open Broadcaster Software&#xff09;是一款免费且开源的跨平台流媒体和视频录制软件。以下是关于它的详细介绍&#xff1a; 功能特点&a…