当前位置: 首页 > article >正文

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.kler.cn/news/353271.html

相关文章:

  • Llama Tutor:开源 AI 个性化学习平台,根据主题自动制定学习计划
  • 10. 异常处理器
  • three.js 使用geojson ,实现中国地图区域,边缘流动效果
  • [Hbase]一 HBase基础
  • 安达发|氢能源产业与APS生产排程软件的结合
  • 计算机网络—vlan(虚拟局域网)
  • 智慧园区管理:构建高效、安全、智能的园区环境
  • 当你不会介绍自己的产品和系统时,不妨看看大厂是如何做的
  • Python 如何处理大规模数据库表的迁移与数据迁移的高效执行
  • 微信小程序使用wx.navigateTo路由跳转层级限制
  • 2024-10-16 问AI: [AI面试题] 描述遗传算法的概念
  • MATLAB基础应用精讲-【数模应用】Bland-Altman图(附python和R语言代码实现)
  • Python 3.13 中的 7 个新类型特性
  • 第五课:Python学习之if语句
  • 小型洗衣机什么牌子好又便宜?诚意盘点五款绝佳内衣洗衣机!
  • 【开源免费】基于SpringBoot+Vue.JS时装购物系统(JAVA毕业设计)
  • 复试经验分享《三、计算机学科专业基础综合》- 数据结构篇
  • 现场驻场运维人员安全管理制度模板
  • Android Back 键与Home键相互作用效果
  • 视频质量评价算法 DVQA 介绍
  • SpringCloud学习:Micrometer链路追踪 + GateWay网关
  • 【每日一题】Leetcode每日一题 - 两数相加
  • Chrome DevTools 一:简介 Console (入门必看)
  • nn.Conv2d(二)
  • 【Vue.js设计与实现】阅读笔记目录(持续更新)
  • 使用scss生成旋转圆圈