IJKPLAYER源码分析-总体概述

1 前言

    前面系列文章,对IJKPLAYER源码所涉及到的各个技术点、模块、关键技术及其实现原理,做了较为详细的梳理。但窃以为那只是微观层面的梳理,还不够完整不够透彻,本文拟尝试从宏观框架架构的视角加以补充。

    算是抛砖引玉。在此列出对IJKPLAYER源码分析的系列文章:

IJKPLAYER源码分析-iOS端显示-CSDN博客

IJKPLAYER源码分析-Android端显示-CSDN博客

IJKPLAYER源码分析-OpenGL ES渲染-CSDN博客

IJKPLAYER源码分析-AudioQueue播放-CSDN博客

IJKPLAYER源码分析-OpenSL ES播放-CSDN博客

IJKPLAYER源码分析-AudioTrack播放-CSDN博客

IJKPLAYER源码分析-videotoolbox硬解-CSDN博客

IJKPLAYER源码分析-mediacodec硬解_ijkplayer硬解-CSDN博客

IJKPLAYER源码分析-主结构体-CSDN博客

IJKPLAYER源码分析-重要字段_packet-buffering-CSDN博客

IJKPLAYER源码分析-点播原理-CSDN博客

IJKPLAYER源码分析-音视频同步_ijkplayer 音视频同步-CSDN博客

IJKPLAYER源码分析-常用API_sdl_profilerreset-CSDN博客

IJKPLAYER源码分析-主要队列_ijkplayer packetqueue-CSDN博客

IJKPLAYER源码分析-软解主结构_androi中ijkplayer源码分析-CSDN博客

2 架构图

IJKPLAYER框架图

    阐述如下: 

  •  网络层:拉流、解协议、解封装,使用的是FFmpeg库,因此FFmpeg所能支持的协议,IJKPLAYER均支持,具体执行是在read_thread线程,软解及Android和iOS硬解平台无关;
  • 解码层:分为音频和视频解码,其中音频解码及视频软解,Android和iOS统一逻辑,均使用FFmpeg软解,而视频硬解则因Android和iOS系统而已,Android使用Android SDK层mediacodec解码能力,iOS则使用videotoolbox解码;
  • 渲染层:也分为音频和视频渲染显示,音频Android支持AudioTrack和OpenSL ES播放、iOS支持AudioQueue播放(AudioUnit亦有实现),而视频Android系统则分为ANativeWindow和OpenGL ES + EGL,iOS则是OpenGL ES + EAGL;

3 线程模型

    具体到IJKPLAYER程序实现上来看,首先来看看各个线程及其通信方式: 

  • 网络线程与音频解码线程audio_thread、视频解码线程以及字幕解码线程subtitle_thread,用PacketQueued队列通信,可通过选项限制队列大小; 
  • 音频解码线程audio_thread、视频解码线程以及字幕解码线程subtitle_thread与音视频各自render线程用FrameQueue队列通信,由于是像素或pcm数据,因此该队列不大,视频缺省16个Frame,音频则是9个Frame;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老中医的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值