ijkplayer播放器
播放器系列 android播放器:MediaPlayer ExoPlayer ijkplayer_步基的博客-CSDN博客_mediacodec流程
一 概述
IJKPlayer是一款基于ffmpeg/ffplay的开源播放器,可支持rtmp/rtsp/hls等多种媒体协议,支持Android/IOS等移动平台。项目地址:https://github.com/Bilibili/ijkplayer,项目地址有可供参考的编译方式。
IJKPlayer 在 iOS 和 Android 平台上实现的主要差异表现在视频硬解码方案和音视频渲染方案上:
- iOS
- 视频硬解码:VideoToolbox
- 音频渲染:AudioQueue
- 视频渲染:OpenGL ES
- Android
- 视频硬解码:MediaCodec
- 音频渲染:OpenSL ES、AudioTrack
- 视频渲染:OpenGL ES、MediaCodec
(本文主要讲述android版)
IJKPlayer(Android)主要由Java层和JNI层组成,Java层主要负责业务控制,JNI部分主要功能是完成音视频的播放。JNI层向Java层提供接口调用,形成事件任务,同时以回调的形式向Java层推送事件完成的状态通知。
Java层主要包括ijkplayer-exo和ijkplayer-java两个类库,分别代表两个不同的播放器。jikplayer-java里面有IMediaPlayer接口和AbstractMediaPlayer抽象类。所以ijkplayer-exo依赖于ijkplayer-java。
编译结果: android/ijkplayer/ijkplayer-java/build/outputs/aar/ijkplayer-java-debug.aar
可供app调用
IJKPlayer 项目的目录结构大致如下:
- tool:初始化项目工程脚本。
- config:编译 FFmpeg 使用的配置文件。
- extra:存放编译 IJKPlayer 所需的依赖源文件, 如 FFmpeg、OpenSSL 等。
- ijkmedia:核心代码。
- ijkplayer:播放器数据下载及解码相关。
- ijksdl:音视频数据渲染相关。
二 简要流程
read_thread -> PacketQueue(AVPacket) -> FrameQueue(AVFrame) -> 渲染
packet_queue_put
是ijkplayer封装的一个缓冲区PacketQueue
的 的入队方法。PacketQueue是采用链表构建的循环队列,每个节点循环使用,一部分节点空闲,一部分使用中。
图1
主要结构体:
在native_setup方法中创建了IjkMediaPlayer、FFPlayer、IJKFF_Pipeline
在prepare阶段通过stream_open创建了VideoState。
结构图:
图2
播放流程图:
图3
图4
ijkplayer播放器相关推荐
- IjkPlayer播放器秒开优化以及常用Option设置
IjkPlayer播放器秒开优化以及常用Option设置 96 GexYY 关注 1.5 2018.04.19 13:28* 字数 592 阅读 10797评论 9喜欢 32 ijkplayer和ff ...
- 一步步实现windows版ijkplayer系列文章之三——Ijkplayer播放器源码分析之音视频输出——音频篇
https://www.cnblogs.com/harlanc/p/9693983.html 目录 OpenSL ES & AudioTrack 源码分析 创建播放器音频输出对象 配置并创建音 ...
- 一步步实现windows版ijkplayer系列文章之二——Ijkplayer播放器源码分析之音视频输出——视频篇...
一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...
- IJKPlayer播放器支持https流程
前言: 笔者最近一段时间在搞视频直播相关的东西,虽然很早以前,也做过基于腾讯云.Anychat.容联云等几个第三方的实时视频直播,但是当时的播放器完全采用了第三方的东西,本次则是使用的ijkplaye ...
- ijkplayer播放器剖析(一)让ijkplayer播起来
一.引言: ijkplayer是一款对FFmpeg封装非常好的第三方开源播放器,遗憾的是,ijkplayer2.0似乎不开源,并且1.0版本更新也基本停止了,很多公司都会采用ijkplayer作为其播 ...
- 【音视频】ijkplayer播放器参数说明文档
[音视频]ijkplayer播放器参数说明文档 pragma mark - IJKMediaPlayback #pragma mark 通知IJKMPMediaPlaybackIsPreparedTo ...
- ijkplayer播放器剖析(四)音频解码与音频输出机制分析
ijkplayer播放器剖析系列文章: ijkplayer播放器剖析(一)从应用层分析至Jni层的流程分析 ijkplayer播放器剖析(二)消息机制分析 ijkplayer播放器剖析(三)音频解码与 ...
- ijkplayer播放器架构从原型到升级
ijkplayer是一款跨平台的播放器,支持Android与iOS端,核心部分基于ffmpeg,支持Android的mediacodec硬解与iOS的videotoolbox硬解,视频图像采用Open ...
- ijkplayer播放器崩溃问题
因为要上架谷歌, 所以更新了30版本,并且增加了arm64-v8a,运行之后,播放器突然崩溃,不好使了,不兼容.改成29就没问题了. 问题分析: 经排查,该崩溃问题是安卓11对64位库的指针访问问题导 ...
最新文章
- 谈谈char ,nchar,varchar,nvarchar 和Uniqueidentifier
- ISV客户博客系列:iVoteSports通过Windows Azure扩展它的面向棒球的移动游戏应用程序...
- 【Python】表白代码
- 叮咚买菜更新招股书:发行价区间为23.5-25.5美元
- 【PHP学习】—利用ajax原理实现登录功能(八)
- 蓝桥杯 ADV-146算法提高 计算器
- 深入理解分布式之抉择分布式锁
- Python3 实现来宾抽签
- 白话区块链:区块链对普通大众的影响及其未来
- STM8L051F3串口接收中断超时判断数据结束
- 应广单片机及mini-c快速入门
- BFS(宽度优先算法)
- mac下读取ntfs
- Linux程序设计(Linux shell编程五)
- 利用深度学习辅助皮肤病诊断
- 启发式搜索: A*算法
- 信息系统面临的安全威胁
- 女人一生中重要的三件事。
- Linux双系统安装教程【暗影精灵5】
- 第二次打开不是最大_舵手图解:大盘日线第二次形成买点信号