播放器系列 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播放器相关推荐

  1. IjkPlayer播放器秒开优化以及常用Option设置

    IjkPlayer播放器秒开优化以及常用Option设置 96 GexYY 关注 1.5 2018.04.19 13:28* 字数 592 阅读 10797评论 9喜欢 32 ijkplayer和ff ...

  2. 一步步实现windows版ijkplayer系列文章之三——Ijkplayer播放器源码分析之音视频输出——音频篇

    https://www.cnblogs.com/harlanc/p/9693983.html 目录 OpenSL ES & AudioTrack 源码分析 创建播放器音频输出对象 配置并创建音 ...

  3. 一步步实现windows版ijkplayer系列文章之二——Ijkplayer播放器源码分析之音视频输出——视频篇...

    一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...

  4. IJKPlayer播放器支持https流程

    前言: 笔者最近一段时间在搞视频直播相关的东西,虽然很早以前,也做过基于腾讯云.Anychat.容联云等几个第三方的实时视频直播,但是当时的播放器完全采用了第三方的东西,本次则是使用的ijkplaye ...

  5. ijkplayer播放器剖析(一)让ijkplayer播起来

    一.引言: ijkplayer是一款对FFmpeg封装非常好的第三方开源播放器,遗憾的是,ijkplayer2.0似乎不开源,并且1.0版本更新也基本停止了,很多公司都会采用ijkplayer作为其播 ...

  6. 【音视频】ijkplayer播放器参数说明文档

    [音视频]ijkplayer播放器参数说明文档 pragma mark - IJKMediaPlayback #pragma mark 通知IJKMPMediaPlaybackIsPreparedTo ...

  7. ijkplayer播放器剖析(四)音频解码与音频输出机制分析

    ijkplayer播放器剖析系列文章: ijkplayer播放器剖析(一)从应用层分析至Jni层的流程分析 ijkplayer播放器剖析(二)消息机制分析 ijkplayer播放器剖析(三)音频解码与 ...

  8. ijkplayer播放器架构从原型到升级

    ijkplayer是一款跨平台的播放器,支持Android与iOS端,核心部分基于ffmpeg,支持Android的mediacodec硬解与iOS的videotoolbox硬解,视频图像采用Open ...

  9. ijkplayer播放器崩溃问题

    因为要上架谷歌, 所以更新了30版本,并且增加了arm64-v8a,运行之后,播放器突然崩溃,不好使了,不兼容.改成29就没问题了. 问题分析: 经排查,该崩溃问题是安卓11对64位库的指针访问问题导 ...

最新文章

  1. 谈谈char ,nchar,varchar,nvarchar 和Uniqueidentifier
  2. ISV客户博客系列:iVoteSports通过Windows Azure扩展它的面向棒球的移动游戏应用程序...
  3. 【Python】表白代码
  4. 叮咚买菜更新招股书:发行价区间为23.5-25.5美元
  5. 【PHP学习】—利用ajax原理实现登录功能(八)
  6. 蓝桥杯 ADV-146算法提高 计算器
  7. 深入理解分布式之抉择分布式锁
  8. Python3 实现来宾抽签
  9. 白话区块链:区块链对普通大众的影响及其未来
  10. STM8L051F3串口接收中断超时判断数据结束
  11. 应广单片机及mini-c快速入门
  12. BFS(宽度优先算法)
  13. mac下读取ntfs
  14. Linux程序设计(Linux shell编程五)
  15. 利用深度学习辅助皮肤病诊断
  16. 启发式搜索: A*算法
  17. 信息系统面临的安全威胁
  18. 女人一生中重要的三件事。
  19. Linux双系统安装教程【暗影精灵5】
  20. 第二次打开不是最大_舵手图解:大盘日线第二次形成买点信号

热门文章

  1. Dropbear替代Openssh-ssh client使用
  2. 6687. 【JZOJ 省选模拟】树没了(tree)
  3. topcoder srm 715 div1 -23
  4. 《Python程序设计》python常用的格式转换
  5. 理解signal函数
  6. [随笔]openpyxl的安装
  7. 东半球最好的TV桌面开源项目
  8. 阿里亮相 SIGCOMM2017 调度系统NetO惊艳全场
  9. 算法-二叉树:合并两颗二叉树
  10. 我的世界不退出服务器切换账号,我的世界服务器退出指令