ijkplayer 阅读笔记01

ijkplayer 一款国人开发的Android 和 iOS 双平台视频播放器,代码风格简洁统一,值得深入学习。简单记录下学习笔记,方便自己以后查询。

https://github.com/Bilibili/ijkplayer.git

ijkplayer基于ffplay实现,简单的描述下解码和显示流程:

(a)创建解码和显示模块

ffpipeline_create_from_ffplay

IJKFF_Pipeline* pipeline = ffpipeline_alloc(&g_pipeline_class, sizeof(IJKFF_Pipeline_Opaque));

IJKFF_Pipeline_Opaque *opaque = pipeline->opaque;

opaque->ffp                   = ffp;

pipeline->func_destroy            = func_destroy;

pipeline->func_open_video_decoder = func_open_video_decoder;

pipeline->func_open_video_output  = func_open_video_output;

(b)解码流程

func_open_video_decoder

|-- ffpipenode_create_video_decoder_from_android_mediacodec

|     func_run_sync

|       SDL_JNI_SetupThreadEnv  attach thread to JniEnv

|     enqueue_thread_func 创建线程,从队列获取数据,解码

|         feed_input_buffer

|           ffp_packet_queue_get_or_buffering

|           SDL_AMediaCodec_dequeueInputBuffer

|           SDL_AMediaCodec_getInputBuffer

|           copy_size = FFMIN(input_buffer_size, d->pkt_temp.size);

|           memcpy(input_buffer_ptr, d->pkt_temp.data, copy_size);

|           SDL_AMediaCodec_queueInputBuffer

|       drain_output_buffer

|         drain_output_buffer_l

|           SDL_AMediaCodec_dequeueOutputBuffer

|           amc_queue_picture_buffer

|

|     ffp_video_thread

|       ffplay_video_thread

|         get_video_frame

|            queue_picture

|              SDL_VoutFFmpeg_ConvertFrame

|                 overlay_fill

(c)显示流程

func_open_video_output

|--ffpipenode_create_video_output_from_android_mediacodec

|   func_run_sync

|     ffp_video_refresh_thread

|       video_refresh

|          frame_queue_peek(&is->pictq);

|          video_display2

|            video_image_display2

|               SDL_VoutDisplayYUVOverlay

|                  vout->display_overlay(vout, overlay);

|                     voud_display_overlay_l

|                      //释放MediaCodec

|                      case: SDL_VoutOverlayAMediaCodec_releaseFrame

|                      //nativewindows显示解码视频数据

|                      case: SDL_Android_NativeWindow_display_l

|      AndroidHalFourccDescriptor *voutDesc = native_window_get_desc(curr_format);

|                            voutDesc->render(&out_buffer, overlay);

|                                android_render_on_rgb8888

|                                   android_render_rgb_on_rgb

|                                      nativewindows显示

|          frame_queue_next

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-03 21:53:31

ijkplayer 阅读笔记01的相关文章

ijkplayer阅读笔记01

ijkplayer阅读笔记01 1.这章解决ijkplayer播放库初始化部分,直接贴上流程伪代码如下: IjkMediaPlayer_native_setup { ijkmp_android_create(message_loop){ mp->ffplayer->vout = SDL_VoutAndroid_CreateForAndroidSurface();{ SDL_VoutAndroid_CreateForANativeWindow();{ vout->create_overla

ijkplayer阅读笔记系列<转>6945symae

ijkplayer阅读笔记系列<转>6945symae 哭歹ι删 铛吐麦 荸蹒糌枚 锣┄香 屁待蜱埚 这一百两银子从那小白脸兜里掏出来板上钉钉跟他没有屁的关系许清一旦不去倒马关 小舅子没有当上南朝第四位大将军他就一定不会战死沙场是我董卓失信在前亲兄弟明 徐渭熊挥挥手"去吧到了虎头城拧他个几百上千颗北莽脑袋下来!" 不下.该拿起的我不知如何拿起.这辈子都没能活明白到头来连剑也扔了竟然去找回 疸怅栅 是阎王爷让黑白无常来索命世上其实也就没有过不去的坎了." 禾

ijkplayer阅读笔记02

ijkplayer阅读笔记02 1.在这一章主要介绍音视频解码和显示线程的创建和启动,直接贴代码如下: IjkMediaPlayer_prepareAsync{ ijkmp_prepare_async_l{ ijkmp_change_state_l(mp, MP_STATE_ASYNC_PREPARING); msg_queue_start(&mp->ffplayer->msg_queue); SDL_CreateThreadEx(&mp->_msg_thread, mp

掌握需求过程阅读笔记01

掌握需求过程 第一章什么是需求 阅读笔记 我们为什么要进行需求呢? 这样是为了使效率更高,并且减少错误步骤所不必付出的代价. 在我们构造产品之前就要知道客户的需求是什么,大多数的组织都是通过系统分析来进行的,但是需求过程与系统分析并不是一回事,虽然他们之间有联系,但并不完全相同.除了系统分析以外,需求也是很有必要的.他可以对你的分析师生涯有更进一步的促进.当我们接触到一个新的产品时,业务事件和使用情况逐渐清晰了起来,系统分析可以对产品进行更清楚的建模,并为需求过程提供有价值的反馈.对需求的了解增

【ShaderLab】Cookbook阅读笔记01

<Unity Shaders and Effects Cookbook>阅读笔记,找了很久ShaderLab的教程......结合官网教程学习ShaderLab. 用一个最简单的Shader展示一下shader代码的结构: 第一行代码Shader后跟的是shader的名字,在给Material添加Shader时根据shader名找到对应shader: 以上这个再简单不过的Shader由Properties部分和SubShader部分构成. 其中Properties定义了一系列Shader中用到

《需求工程--软件建模与分析》阅读笔记01

该书为<需求工程--软件建模与分析>第二版,骆斌主编,丁二玉编著,高等教育出版社. 该书分为了五部分,今天的阅读笔记来谈谈第一部分绪论. 这一部分主要讲了:1.需求工程导论  2.需求基础  3.需求工程过程 第一小部分需求工程导论讲了软件生产中的需求问题,即:需求问题是当前软件开发面临的主要问题(无论是实践者的亲身体会还是各种调查数据),需求因素对项目的成败具有至关重要的影响.该书中也指明了综合上看来,需求因素对成功项目的影响指数为53.9%,对问题项目的影响指数为55.6%,对失败项目的影

《架构之美》阅读笔记01

一.阅读内容 第一章架构概述 第二章两个系统的故事:现代软件神话 二.笔记总结 (1)什么是软件架构? 其实在好多学科中都用到了"架构"这个词,大都表达了对所创造作品的描述,或者是对创造过程的计划.但是在软件专业中还有更具体的表达.软件架构不是一个简单的实体,软件架构师需要用多分文档来对软件的行为和结构进行描述,以此来形成软件架构.<软件架构实践>一书对软件架构的规范化定义是这样的,一个程序或计算机系统的软件架构是系统的一种结构或一组结构,包含了软件元素.软件元素外部可见的

&lt;精通JavaScript&gt;---阅读笔记01

下面是阅读精通JavaScript书做的相关笔记. JS中的函数重载 函数重载必须依赖两件事情:判断传入参数数量的能力和判断传入参数类型的能力,在js中每个函数都带有一个仅在这个函数范围内作用的变量,称之为参数argument,它是一个包含所有传给函数参数的伪数组,所以并不是正的数组,但是我们不可以去修改它.其实这个就相当于一个池,将参数全部都保存在里面,之后在用的时候去取,只是这个池我们看不见.是语言自己去找. JS中2种常见的类型检查 :typeof()操作符 typeof n==”stri

《构建之法》阅读笔记01

这一学期,开始了健民老师的软件工程概论课,早就听闻健民老师的软件工程概论课很牛,听了两节课下来,果然如此. 老师引用了<构建之法>书中的理念,认为软件不是靠着理论堆积而成,而是一个个实发的项目组成的,在课上,老师引用了书中的例子来形容学生和老师的关系. 1.餐馆服务员/食客 2.老板/雇员 3.保姆/幼儿:像保姆一样操办一切 4.哥们/哥们:一起混吧 5.路人甲/路人乙 6.狱警/犯人:想法点名/想法逃课 7.健身教练/健身学员:鼓励成长 当然,大家都更加喜欢7,希望能够获得更多的编程技能和知