ffmpeg实战教程(十三)iJKPlayer源码简析

要使用封装优化ijk就必须先了解ffmpeg,然后看ijk对ffmpeg的C层封装!
这是我看ijk源码时候的笔记,比较散乱。不喜勿喷~

ijk源码简析:

1.ijkplayer_jni.c 封装的播放器JNI层 API,对应java层调用。

2.ijkplayer.c 封装的播放器API,对应给JNI层调用

3.ff_ffplay_options.c 参数设置options

4.ijkplayer_android.c 创建播放器,对应Android系统的音视频

5..ff_ffplay.c ffmpeg主要封装类 含整个解码流程

首先入口是 JNI_OnLoad()加载.so库,各种初始化。RegisterNatives注册g_methods中的native方法,注册后,相当于java层声明为native方法的函数与c层有一个映射关系;举个栗子,当我们java里面调用_start()方法的时候,其实调用的是c层中的IjkMediaPlayer_start()方法;对应地,作者在java层声明了一个修饰java方法的annotation,这些函数也会在这里注册,实现后面在C层也能调用java层的函数。

接着还调用了几个init方法:
ffp_global_init() –>主要是ffmpeg的初始化工作, 前面说过ijkplayer是基于ffmpeg的。
FFmpegApi_global_init(env)–>初始化FFmpegApi#av_base64_encode函数。

后面调用的IjkMediaPlayer.native_profileBegin(“libijkplayer.so”);发现并没有什么作用的样子,注释了还是能成功运行。未解?

IjkMediaPlayer初始化过程:调用了native方法native_setup(new WeakReference(this));对应C语言的IjkMediaPlayer_native_setup()方法,也在ijkplayer_jni.c文件里面。

然后就是ijkmp_android_create(message_loop);/ijkplayer_android.c : 很重要
创建一个IJKMediaPlayer类型的player。
接下来就是对ijkplayer结构体中的ffplayer进行设置,

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ijkplayer是一个基于FFmpeg的跨平台音视频播放器,它提供了丰富的功能和灵活的接口,被广泛应用于移动端和嵌入式设备上。下面是对ijkplayer源码的简要剖析: 1. FFmpeg集成:ijkplayer基于FFmpeg进行音视频解码和处理。它通过FFmpeg提供的库函数实现了音视频的解码、渲染、编码等功能。 2. 播放器核心:ijkplayer的核心是一个播放器类,它负责管理音视频流的解码、渲染和控制。播放器核心包含了音视频解码器、渲染器、音频输出等模块。 3. 解码器:ijkplayer支持多种音视频格式的解码,包括常见的MP4、FLV、MKV等格式。它通过FFmpeg提供的解码器进行解码,并将解码后的数据传递给渲染器进行显示。 4. 渲染器:ijkplayer提供了多种渲染方式,包括基于OpenGL ES的视频渲染和基于OpenSL ES的音频渲染。它通过调用相应的接口将解码后的数据进行渲染。 5. 控制模块:ijkplayer提供了丰富的控制接口,包括播放、暂停、快进、快退等功能。它还支持循环播放、倍速播放等高级功能。 6. 网络模块:ijkplayer支持网络流媒体的播放,包括HTTP、RTMP、HLS等协议。它通过FFmpeg提供的网络模块进行数据的下载和解析。 7. 音频输出:ijkplayer通过OpenSL ES提供音频输出功能,支持多种音频格式的播放和控制。 8. 视频渲染:ijkplayer通过OpenGL ES提供视频渲染功能,支持多种视频格式的解码和显示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值