vlc输出流程简介(代码片段)

白嫩豆腐 白嫩豆腐     2023-02-03     455

关键词:

前言

VLC整理流程还是比较复杂的,不过这次我们追踪一下视频输出部分的流程,大概熟悉一下大概框架。

正文

视频输出模块还是比较复杂的,但是功能基本做到了自制,虽说包含了大量的时间校准以及修正的问题,但是基本上逻辑比较清晰,只要搞明白了大概架构,
视频输出主要包括两部分,一部分是控制视频输出线程以及数据交换的结构体,一个是控制输出的结构体,为了实现不同业务逻辑,这两个结构体都加载了两个模块,
控制线程的街头日是vout_thread_t,包含的模块式vout window。对于Android系统,其实本质上就是拿到了Java层的Awindow.里面提供两套方案,分别是处理OpenGL的surface方案,以及通过Android原生的native直接拿到surface。这里的module业务比较简单,这里不在详细介绍,直接找到核心部分的vout_thread_t。主要初始化是通过VoutCreate来实现的,这里主要保存了五个变量,

  1. vout_window_t *window;
  2. 以及几个picture_pool_t。在不同的场景下,会使用不同的pool。
  3. vout_control_t control
  4. vlc_thread_t thread;
  5. display

window是提供渲染的画布,池是提供数据,比如直接渲染图片,则使用的picture_fifo_t *decoder_fifo;。把已经解码的数据,交给线程来渲染,control则是控制消息,thread是渲染线程,display是控制渲染模块的变量,这是后半部分的核心,

初始化代码就不在详细介绍,后半部分核心是初始化线程,通过init指令,初始化视频输出模块,核心是ThreadStart,进行的初始化,关键函数是vout_OpenWrapper以及vout_InitWrapper。
vout_OpenWrapper是记载vout display模块,来控制输出,vout_InitWrapper则初始化一些变量,比如池数据的大小等。

Android平台的视频数据流包的主要通路是:解码器向Vout模块申请bufferid,然后去填充,最终在特定时间点告诉解码器去释放资源。
具体代码如下:

		p_pic = decoder_NewPicture(p_dec);
        if (!p_pic) 
            msg_Warn(p_dec, "NewPicture failed");
            return p_sys->api.release_out(&p_sys->api, p_out->buf.i_index, false);
        
		......

        if (p_sys->api.b_direct_rendering)
        
            p_pic->p_sys->hw.i_index = p_out->buf.i_index;
            InsertInflightPicture(p_dec, p_pic->p_sys);
        

后记

这一篇大概介绍了初始化流程,以及各个模块的顺序关系,后面我们直接追踪具体流程,参考一下OpenGL和Android native的区别。

vlc主要流程(代码片段)

...hread解压缩input读取的数据video_output、audio_ouput线程把数据输出读取数据读取数据主要包括三部分,核心是两部分,一个是access,主要是直接把输入比如http服务器或者ftp或者本地文件,主要把输入源抽象成如下的结... 查看详情

markdown流程简介(代码片段)

查看详情

vlc播放器(代码片段)

...layer,6个视频,把整个电脑卡得不动了(显卡太弱,是多输出口的,没法换),于是又想把视频压缩成一个,网上的大部分软件要收费,还是研究播放,就弄了VLC。 代码网上基本都一样的,但我调试了很久才走通。主要是在... 查看详情

eventbuseventbus事件总线框架简介(eventbus使用流程)(代码片段)

文章目录一、EventBus事件总线框架简介二、EventBus使用流程一、EventBus事件总线框架简介Android中的事件传递机制:使用Intent在组件间传递信息;使用BroadcastReceiver跨进程传递数据;使用Handler跨线程通信;使用接口回调机制,Activity与Fragmen... 查看详情

正点原子stm32(基于hal库)2(代码片段)

目录跑马灯实验(IO输出)STM32F1GPIO简介GPIO八种工作模式GPIO寄存器介绍通用外设驱动步骤GPIO外设配置步骤硬件设计程序设计GPIO的HAL库驱动函数GPIO输出配置步骤程序流程图课堂源码跑马灯程序解析下载验证按键输入点灯实验(IO输入)... 查看详情

javaweb详解(第六篇)之jstl标签简介(代码片段)

...JSP标签,可以应用于各种领域,如:基本输入输出、流程控制、循环、XML文件剖析、数据 查看详情

django框架简介和创建django项目的基本流程(代码片段)

1、Django简介 Django是Python语言中的一个web框架,Python语言中主流的web框架有Django、Tornado、Flask等多种。Django相较与其它WEB框架,其优势为:?大而全,框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等功能,是一个全能... 查看详情

android逆向android进程简介(android应用启动流程)(代码片段)

文章目录前言一、Android进程二、Android应用启动流程前言参考【Android逆向】Android系统文件分析(/proc/pid进程号对应进程目录|oom_adj|maps|smaps|mem|task|environ)博客,/proc/目录中存放的是所有进程相关信息;一、Android进程Android操作系统中... 查看详情

android逆向android进程简介(android应用启动流程)(代码片段)

文章目录前言一、Android进程二、Android应用启动流程前言参考【Android逆向】Android系统文件分析(/proc/pid进程号对应进程目录|oom_adj|maps|smaps|mem|task|environ)博客,/proc/目录中存放的是所有进程相关信息;一、Android进程Android操作系统中... 查看详情

exoplayer源码解析2(代码片段)

...介绍一下渲染的核心部分其实就是Renderer来管理数据以及输出部分,这里只介绍音频输出。正文Renderer是管理解码器以及输出部件的核心部分,接收Mediasource传过来的数据,然后解码,最终输出。我们这里简要分析... 查看详情

geoserver简介下载配置启动发布shapefile全流程(图文实践)(代码片段)

场景Geoserver简介GeoServer是OGCWeb服务器规范的J2EE实现,利用GeoServer可以方便地发布地图数据,允许用户对特征数据进行更新、删除、插入操作,通过GeoServer可以比较容易地在用户之间迅速共享空间地理信息。GeoServer是开源软件。Ge... 查看详情

vue视频插件vlc(代码片段)

VLC仅支持特定版本火狐浏览器<objecttype=‘application/x-vlc-plugin‘id=‘vlc‘events=‘True‘width="720"height="540"pluginspage="http://www.videolan.org"codebase="http://download.videolan.org/pub/videolan/vlc/0.8.6c/ 查看详情

printwriter的用法简介(代码片段)

...流:7*PrintStream8*PrintWriter9*可以自动换行:println()10*不能输出字节,但可以输出其他的任意类型11*通过某些配置可以自动刷新(只有在println,print,format才可以使用 查看详情

serilog简介(代码片段)

...le其中包Serilog是Log核心库,Serilog.Sinks.Console是Log的控制台输出库,这个也是日志框架的一贯策略,一个核心库加多个输出库组合使用,这样可以保持良好的扩展性 查看详情

100天精通andriod逆向——第5天:app逆向流程简介(代码片段)

...界面控件的查看1.1查看界面控件的作用二、app分析的大致流程2.1抓包分析是否有需要逆向的加密字段2.2查壳分析是否有加固2.3查看界面元素2.4关键代码定位2.4.1传统定位方法2.4.2关键代码快速定位2.4.2.1Hook可以用来做什么2.4.2.2HooK... 查看详情

vlc入门(代码片段)

利用VLC自制一个java视频播放器1.下载相关文件1.1下载vlc播放器1.1.1必须匹配Java虚拟机的CPU体系结构和本机LibVLC库-如果使用32位JVM,则必须使用32位版本的VLC;如果使用64位JVM,则必须使用64位版本的VLC。你不能混合CPU架构,它不会... 查看详情

正点原子stm32(基于hal库)3(代码片段)

目录高级定时器实验高级定时器简介高级定时器输出指定个数PWM实验高级定时器输出指定个数PWM原理TIM1/TIM8寄存器硬件设计课堂源码(输出指定个数PWM灯就闪几次)程序设计下载验证高级定时器输出比较模式实验TIM1/TIM8寄存器硬件... 查看详情

vlc媒体播放器(代码片段)

VLC媒体播放器VLC媒体播放器是一个便携式、免费、开源、跨平台的媒体播放器。VideoLAN项目的流式媒体服务器。分为WindowsPhone版本和Android版本。下载地址:https://get.videolan.org/vlc/3.0.3/win64/vlc-3.0.3-win64.exe RTMP流媒体播放过程本... 查看详情