【ijkplayer】介绍

article/2025/9/11 6:19:09

【ijkplayer】介绍

0x1 系统架构

ijkplayer是由b站开源的播放器项目,底层基于ffmpeg, 支持Android和iOS。下面我们来简单介绍一下Android上的实现。
Android上的系统架构图如下。
在这里插入图片描述

下面分别对各个模块进行介绍:

0x11 ijkplayer-example

app的实现,主要是ui逻辑的实现,包括activity的实现,ui控件的组织,窗口的定制,数据的存储。

0x12 ijkplayer-example

通过调用ijkmediaplayer,android mediaplayer, google exoplayer这三种mediaplayer来实现媒体播放。

0x13 ijkplayer-java

对底层实现的ijkmediaplayer和android mediaplayer的java封装,对ijkmediaplayer的封装是通过调用底层jni对应的java接口,对android mediaplayer的封装是调用android系统实现的默认mediaplayer接口。

0x14 ijkplayer-exo

是对google exoplayer的封装,除了android默认的播放器之外,ExoPlayer是Google提供的在android平台上的另外一种播放器。

0x15 libijkplayer

提供了ijkmediaplayer的jni实现ijkplayer_jni.c,然后调用封装过的ffplayer.c, 再调用底层实现的解码库libijkffmpeg和显示库libijksdl。

0x16 libijkffmpeg

实现了媒体文件的demux, decode等功能。

0x17 libijksdl

实现对解码后的数据进行显示。

0x2 Java层关键模块分析

0x21 三种不同的mediaplayer实现.

这三种mediaplayer的类图如下图所示。

在这里插入图片描述

0x211 AndroidMediaPlayer

对Andoid默认播放器的封装。

0x212 IjkMediaPlayer

基于ffmpeg的播放器实现。

0x213 IjkExoMediaPlayer

基于Goodle开源的ExoPlayer的封装。

0x22 设置不同的Render

不同Render的类图如下图所示。

0x221 SurfaceRenderView

基于SurfaceView的显示实现。

0x222 TextureRenderView

基于TextureView的显示实现。

上述两种显示实现方式都实现了接口IRenderView

0x23 IjkMediaPlayer的JNI接口

详细的JNI接口如下图所示。
在这里插入图片描述

这些JNI接口提供了播放器的基本接口,包括播放准备(_setDataSource, _setVideoSurface, setVolume,_prepareAsync), 播放控制(_start, _stop, seekTo,_release, _reset)等功能。

0x3 关键流程

0x31 设置surface

设置surface的流程图如下图所示。

在这里插入图片描述

从上面的流程图可知,通过接口_setVideoSurface(), 把UI层的Surface对象(可以理解为显示窗口)设置给SDL显示对象,作为其显示窗口(native_window), 这样SDL有需要显示的内容可以直接在这个显示窗口上显示输出即可。

0x32 显示流程

显示的流程图如下图所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SPCuRnnj-1667355270414)(https://cdn.jsdelivr.net/gh/xzMhehe/StaticFile_CDN/static/code202211021012528.png)]

下面对上面的流程图简单说明。

解码线程ffp_video_thread解码完成以后,调用接口queue_picture把需要显示的buffer往SDL模块发送。

然后调用func_fill_frame()填充显示buffer, 这个时候需要判断是通过ffmpeg还是mediacodec实现的解码。

如果是ffmpeg实现的话则调用ijksdl_vout_overlay_ffmpeg.c中的函数func_fill_frame()。

否则调用ijksdl_vout_overlay_android_mediacodec.c中的func_fill_frame()。

然后显示线程video_refresh_thread就可以开始显示了。如果是GPU支持的格式则调用GPU进行输出,这个时候调用的

IJK_EGL_display,否则调用ANativeWindow_lock和ANativeWindow_unlockAndPost进行输出。


http://chatgpt.dhexx.cn/article/TDfHF6GZ.shtml

相关文章

一款简洁的 jplayer 音乐播放器完整版

一款简洁 jplayer 音乐播放器&#xff0c;做音乐站很漂亮&#xff0c;直接套用就好了。 效果图&#xff1a; 部分源代码&#xff1a; <div id"lei_jplayer"></div> <div id"jp_container_1"><div class"jp-controls">…

Ijkplayer Android介绍

Ijkplayer Android目录结构 Ijkplayer Android可以将该工程导入android studio进行编译&#xff0c;当它下载好需要的资源文件&#xff08;例如sdk build tool&#xff0c;gradle等&#xff09;就可以进行编译了&#xff0c;该工程的目录结构如下图所示: 链接库&#xff1a…

ijkplayer播放器

播放器系列 android播放器&#xff1a;MediaPlayer ExoPlayer ijkplayer_步基的博客-CSDN博客_mediacodec流程 一 概述 IJKPlayer是一款基于ffmpeg/ffplay的开源播放器&#xff0c;可支持rtmp/rtsp/hls等多种媒体协议&#xff0c;支持Android/IOS等移动平台。项目地址&#xff…

jplayer详解

下载官网&#xff1a;http://www.jplayer.org/ 当前版本&#xff1a;2.3.0 功能&#xff1a;视频播放&#xff08;可全屏&#xff09;、音乐播放 全部原教程&#xff0c;说明并不详细&#xff0c;要结合查看其网页源代码来学习&#xff1a;http://www.jplayer.org/latest/demos…

Javplayer 整合插件版下载使用

Javplayer - 马赛克去除工具 工作中去除图片模糊像素&#xff0c;还原高清图片Javplayer - 马赛克去除工具简介版本安装使用调整示例注意事项体验视频小结咨询 工作中去除图片模糊像素&#xff0c;还原高清图片 Javplayer - 马赛克去除工具简介 JavPlayer是一种视频播放器&am…

jPlayer使用详解

原文地址&#xff1a;http://blog.csdn.net/z295304557/article/details/17298889?_t_t_t0.39512087353182124 下载官网&#xff1a;http://www.jplayer.org/ 当前版本&#xff1a;2.3.0 功能&#xff1a;视频播放&#xff08;可全屏&#xff09;、音乐播放 全部原教程&#x…

jPlayer插件的使用

jPlayer插件的使用 2017年04月21日 11:03:19 JENIFURS 阅读数&#xff1a;3952 标签&#xff1a; jPlayer视频插件兼容bug 更多 个人分类&#xff1a; jQuery 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/fuyujiaof/arti…

JPlayer播放器插件教程,JPlayer项目实战

JPlayer 播放器&#xff1a;基于HTML5/Flash的音频、视频播放器。项目预览&#xff1a;播放器插件预览jPlayer中文官方文档&#xff1a;官网功能强大&#xff0c;操作简便&#xff0c;支持换肤功能。引入JPlayer文件以及样式&#xff1a;<head><script type"text…

TensorFlow 2019

numpy pandas sklearn 算法 神经网络的Math 动手实现网络结构 应用 TensorFlow框架 图像案例 Machine Learning VS Deep Learning 1 特征提取方面 自动 2 数量集 量大/参数大 * 机器学习 &#xff1a; 朴素贝叶斯 决策树 深度学习 &#xff1a; 统称神经网络 3 应…

机器学习练习 8 -异常检测和推荐系统(协同过滤)

1 Anomaly detection&#xff08;异常检测&#xff09; 我们的第一个任务是使用高斯模型来检测数据集中未标记的示例是否应被视为异常。 我们先从简单的二维数据集开始。 之前我们构建的异常检测系统也使用了带标记的数据&#xff0c;与监督学习有些相似&#xff0c;下面的对…

从普通程序员到AI大神,月薪7W的正确打开方式...

“ 前不久&#xff0c;不少人被一段机器人后空翻的视频刷屏了。视频中&#xff0c;双足人形机器人阿特拉斯又是走“梅花桩”&#xff0c;又是秀后空翻&#xff0c;完成了一段精彩绝伦的体操表演。 超强机器人出现&#xff01;分分钟被 AI 惊呆… 要知道阿特拉斯在 2014 年的时候…

Surface Defect Detection Methods for Industrial Products : A Review

Surface Defect Detection Methods for Industrial Products : A Review &#xff08;工业产品表面缺陷检测方法综述 &#xff09; 文章来源&#xff1a;Appl. Sci.2021,11, 7657. https://doi.org/10.3390/app11167657 &#xff08;Yuanyuan Ding&#xff09; 论文亮点&#x…

task_5 - 副本

Task01–Task06树模型与集成学习笔记整理 ****************************************************************************************************************** 1 Task01 信息论基础 决策树分类思想&#xff1a; 用树的节点代表样本集合&#xff0c;通过某些判定条件…

主成分分析(PCA)原理及其python实现

主成分分析 一、概述1.1 问题提出1.2 降维的作用 二、主成分分析(PCA)主要思想三、相关数学知识四、PCA实现步骤4.1 特征值分解矩阵4.2 SVD分解协方差矩阵 五、python程序实现5.1 利用数学公式实现5.2 使用sklearn实现 一、概述 1.1 问题提出 在实际问题研究中&#xff0c;多…

核酸扫码登记体验有感(如何提高OCR的文字正确识别率)

近几年&#xff0c;新冠疫情持续反复&#xff0c;核酸检测已成为了我们日常生活的一部分&#xff0c;甚至有人开玩笑说朋友邻居见面问候语从“吃了吗你&#xff1f;”变成了“今儿核酸了&#xff1f;”。核酸检测全员常态化&#xff0c;需要大量的志愿者协助医生进行身份证扫描…

ORB-SLAM2 特征点法SLAM 单目 双目 rgbd相机SLAM 单应/本质矩阵恢复运动 小图大图地图优化

ORB-SLAM2 ORB特征点法SLAM 支持单目、双目、rgbd相机 安装测试 本文github链接 orbslam2 imu ORB-SLAM是一个基于特征点的实时单目SLAM系统&#xff0c;在大规模的、小规模的、室内室外的环境都可以运行。 该系统对剧烈运动也很鲁棒&#xff0c;支持宽基线的闭环检测和重…

opencv4算法库学习笔记(5万多字超长干货——纪念奋战的自己)

整理于2020年初三个月的日夜积累。。。 参考链接 opencv安装 安装脚本链接&#xff1a;https://github.com/milq/milq/blob/master/scripts/bash/install-opencv.sh 源码编译安装参考&#xff1a;https://blog.csdn.net/liuli2008212/article/details/128169266?spm1001.2…

【数字图像处理课程设计】期中、期末综合考试题目整理总结(共四个图像处理算法应用题)

目录 一、下面两幅图像中有几处不同&#xff0c;编程把它们找出来、并在图中突出显示&#xff08;关键步骤不能调用内置函数&#xff09;。 1.算法原理 2.解题步骤 3.程序代码 4.处理结果 二、下图含有干扰条纹&#xff08;moir pattern&#xff09;、并且低灰度区域的细…

MATLAB各个产品概述----哪些产品需要安装?哪些产品不需要安装?阅完了然

MATLAB产品概述 文章目录 1 MATLAB2 Simulink3 5G Toolbox&#xff08;5G工具箱&#xff09;4 Aerospace Blockset&#xff08;航空区块集&#xff09;5 Aerospace Toolbox&#xff08;航空航天工具箱&#xff09;6 Antenna Toolbox&#xff08;天线工具箱&#xff09;7 Audio…

Latex相关符号

函数、符号及特殊字符 声调 语法效果语法效果语法效果\bar{x}\acute{\eta}\check{\alpha}\grave{\eta}\breve{a}\ddot{y}\dot{x}\hat{\alpha}\tilde{\iota} 函数 语法效果语法效果语法效果\sin\theta\cos\theta\tan\theta\arcsin\frac{L}{r}\arccos\frac{T}{r}\arctan\frac{L…