播放器
有心好书
种一棵树最好的时间是十年前,其次是现在
展开
-
so库远程加载方案管中窥豹
0x01.为什么要so库远程加载?(又叫动态加载)so体积过大,如果直接集成在apk里面的话,会造成包体积膨胀。所以有了这种方案。运行app的时候,在需要的时候再去下载so库。这样可以减少apk的体积,并且对于推广收益很大。当然不只so库可以这样,所有体积比较大的资源都可以采用这种方案。0x02.动态加载so库方案原理Android加载so文件的方式有两种:System.loadLibra...原创 2019-10-25 15:57:10 · 852 阅读 · 1 评论 -
ijkplayer播放器h265解码能力调研
0x01.h264编解码H.264: H.264/AVC项目的目的是为了创建一个比以前的视频压缩标准,在更低的比特率的情况下依然能够提供良好视频质量的标准(如,一半或者更少于MPEG-2,H.263,或者MPEG-4 Part2 )。同时,还要不会太大的增加设计的复杂性。优势:1)网络亲和性,即可适用于各种传输网络2)高的视频压缩比,当初提出的指标是比 H.263,MPEG-4,约为它们的...原创 2019-09-24 12:21:08 · 7862 阅读 · 0 评论 -
ijkplayer系列14:从入门到进阶问题树梳理
ijkplayer系列14:从入门到进阶问题树梳理基础准备语法基础:C语言以及JNI开发是必备的能力C语言语法简单复习https://anacz.blog.csdn.net/article/details/100065438不过说实话,在看源码的时候,感觉对指针的理解还是有限,不熟练JNI开发:Android笔记之使用CMake进行JNI开发(Android Studio)htt...原创 2019-09-20 19:26:03 · 731 阅读 · 0 评论 -
ijkplayer系列13:video_refresh_thread
ffp_video_thread这个线程用来处理视频解码。解码的调用流程如下:以上可以看出,解码流程主动分为以下三部分:初始化解码器。开启解码器,如果配置了硬解则会尝试去创建硬解码器,没有配置硬解或者尝试创建硬解码器失败则创建软解码器。启动解码线程,可以发现硬解和软解最终进入的方法是不同的,后面我们会针对两者分别解析。我们先来看下decoder_init():static vo...原创 2019-09-20 19:06:05 · 771 阅读 · 0 评论 -
ijkplayer系列12:video_refresh_thread
video_refresh_thread该线程负责图像的渲染,先来看下整体流程:从上面的流程图可以得知,最终根据格式的差异分成了三个分支,我们先来看下func_display_overlay_l()的源码,然后再继续深入三个分支中。static int func_display_overlay_l(SDL_Vout *vout, SDL_VoutOverlay *overlay) { ...原创 2019-09-20 19:04:02 · 1200 阅读 · 0 评论 -
ijkplayer系列11:read_thread
ijkplayer的核心代码在ff_ffplayer.c中,以视频为例(音频类似),其中又以三个线程和两个队列最为核心。 三个线程分别为:• read_thread:读取流。• video_refresh_thread:图像渲染。• ffp_video_thread:图像解码,需要一提的是,硬解时的流程不太一样。两个队列定义在VideoState结构体中,分别为:• videoq:存储从...原创 2019-09-20 18:59:49 · 1044 阅读 · 0 评论 -
ijkplayer系列8:流程分析-设置播放源
设置data source流程如下原创 2019-08-09 20:14:05 · 1068 阅读 · 0 评论 -
ijkplayer系列10:流程分析-开始工作
开始工作流程如下原创 2019-08-16 11:44:50 · 553 阅读 · 1 评论 -
ijkplayer系列9:流程分析-准备工作
准备工作流程如下:原创 2019-08-15 15:20:22 · 719 阅读 · 0 评论 -
ijkplayer系列7:流程分析-设置surface
整个流程的调用虽然嵌得比较深,但处理的事情比较简单,多数情况下都是一个方法调用另一个方法。原创 2019-08-08 23:01:41 · 648 阅读 · 0 评论 -
ijkplayer系列6:流程分析-初始化IjkMediaPlayer对象
初始化对象流程如下图 IjkMediaPlayer提供了两个构造函数,分别如下:原创 2019-08-08 22:56:02 · 1086 阅读 · 0 评论 -
ijkplayer系列5:流程分析-ijkplayer状态图
从源码和注释信息中,我们可以得到下面的状态图原创 2019-08-08 22:55:21 · 1365 阅读 · 0 评论 -
ijkplayer系列4:消息队列MessageQueue
jkplayer中传递消息一般采用的是生产者-消费者模式。大致原理如下:生产者可以位于任何一个线程向队列中添加消息,而消费者(通常只有一个)则通过一个独立的线程不断地从队列中获取消息,当没有消息时阻塞(也可以配置成不阻塞,但通常我们会阻塞),当队列中止使用时线程退出。队列何时中止一般由生产者决定。显然,这种模式的核心就是这个消息队列。ijkplayer的消息队列命名为MessageQueue,不论是从名称还是结构体的字段定义,你都可以从中看到Android的影子,所以ijkplayer的Message原创 2019-08-08 22:54:34 · 813 阅读 · 0 评论 -
ijkplayer系列3:编译ijkplayer&集成ijkplayer
至此,我们的所有编译工作就完成了,在这里我有稍微省略了几个步骤,如果编译途中碰到错误,最好照着github上面的步骤一步步做下来。进入ijkplayer/android/ijkplayer目录,这里面的所有东西就是我们编译后的产出,也是后续项目中会使用到的库文件和源文件。原创 2019-08-08 22:53:32 · 1113 阅读 · 0 评论 -
AndroidVideoCache研究
AndroidVideoCache研究01.AndroidVideoCache + ijk我们想让ijk支持边下边播的能力,通过AndroidVideoCache就可以实现,AndroidVideoCache的设计很优雅,能够解耦不同的播放器,比如可以支持ijk、系统播放器mediaplayer、exoplayer等等。ijk我们还使用之前文章里的代码:ijkplayer系列1:ijkpl...原创 2019-07-19 15:05:01 · 1324 阅读 · 0 评论 -
Android播放器专题相关知识学习笔记(持续完善中)
播放器ijkexo等等边下载边播放+缓存AndroidVideoCache优化https://blog.csdn.net/weixin_33806509/article/details/87598882AndroidVideoCache 框架源码分析https://www.cnblogs.com/bylijian/p/7344874.html...原创 2019-07-18 16:09:50 · 361 阅读 · 0 评论 -
ijkplayer系列2:ijkplayer java层面源码分析
todo原创 2019-06-25 21:13:37 · 1174 阅读 · 0 评论 -
ijkplayer系列1:ijkplayer介绍
## ijkplayer简介基于FFmpeg的轻量级Android/iOS视频播放器https://github.com/Bilibili/ijkplayer## 导入方式### gradle导入原创 2019-06-25 21:12:22 · 4464 阅读 · 0 评论