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
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值