播放器架构讲解

ijkplayer是一款跨平台的播放器,支持Android与iOS端,核心部分基于ffmpeg,支持Android的mediacodec硬解与iOS的videotoolbox硬解,视频图像采用OpenGL进行渲染。许多主流播放器都使用ijkplayer作为播放方案。接下来我们从核心播放流程、内核架构、时序图、状态机、播放器整体架构进行详细分析。

目录

1、核心播放流程

2、播放内核架构

3、播放时序图

4、播放状态机

5、播放器整体架构

1、核心播放流程
ijkplayer的核心处理在ff_ffplay.c,从ffp_prepare_sync_l方法开始,调用stream_open方法分别创建video、audio、subtitle三个packet队列和三个frame队列,启动video_refresh_thread与read_thread线程。

其中read_thread为解封装线程,调用avformat_open_input打开本地文件/网络流,而stream_component_open方法负责初始化解码器、创建解码线程,接着是for循环读取媒体数据包存入packet队列。解码线程负责从packet队列取出数据包进行解码,然后存入frame队列。视频渲染线程默认10ms轮训一次,从frame队列取出图像进行渲染;iOS的音频播放采用AudioQueue,内部创建工作线程定时读取pcm数据进行播放:

2、播放内核架构
解封装、解码、播放分为三个线程,使用packet_queue队列连接解封装与解码,使用frame_

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值