近期因为公司在做数字电视,播放器和模块由供应商打包一起卖,驱动调通了,但是播放器要硬件解码,和平台差异,原厂又没有相关文档,就自己试着看了一个系统的播放器流程,顺便整理了一下,也方便以后查询,希望对播放器硬解码的开发能起到点作用。因为对视频也不了解,所以难免有不少错误,欢迎高手指导。

1: 由文件或者设备来创建一个dataSource(DataSource) (当中能够是文件描写叙述符fd, uri ,http)
2:  通过dataSource来创建一个MediaExtractor(即视频的分流器paser)实例
3:  由 MediaExtractor实例来创建两个MediaSource(视频要包括两个, 一个为视频mVideoTrack, 一个为音频 mAudioTrack), 当中就重要的是read函数用于解码器获得原始视频数 据  进行解码
4:  创建一个OMXClient实例并连接(详细调用其connect()方法,并检查是否成功返回)
5:  创建对应的解码器实例 比如:
 mOmxSource = OMXCodec::Create(                                                                                                                                
   mClient.interface(), mAudioTrack->getFormat(),
   false, // createEncoder
   mAudioTrack);

mVideoSource = OMXCodec::Create(
  mClient.interface(), mVideoTrack->getFormat(),
  false, // createEncoder
  mVideoTrack,   
  NULL, flags,
  mNativeWindow);   
 mAudioTrack mVideoTrack 即为两个MediaSource实例 分别代表原始的数据源
 注意这两个都返回了一个MediaSource的实例(mOmxSource and mVideoSource),这两个是用于用户获得解码后的音视频数据并进行播放使用的

mNativeWindow(ANativeWindow) 为上层Surface的下层体现,即上层要用于显示的Surface

创建 ANativeWindow 的方法:
 1:  从JAVA层会通过JNI传递一个JSurface的对象到JNI, 而JNI能够通过这个对象来获取IGraphicBufferProducer, 方法为:
   sp<Surface> surface;   
   sp<IGraphicBufferProducer> gbp;
   if (jSurface) {        
    surface = android_view_Surface_getSurface(env, jSurface);
    if (surface != NULL) {
     gbp = surface->getIGraphicBufferProducer();
    }                  
   }                      
  终于得到 一个 IGraphicBufferProducer 的 实例 gbp
 2: 上层提供一个 sp<IGraphicBufferProducer> &bufferProducer 的一个引用并能够用来创建ANativeWindow mNativeWindow = new Surface(bufferProducer)  //些处參考AwesomePlayer.cpp

6: 调用5返回来的两个MediaSource实例的read方法(主要是用于获取一个MediaBuffer的实例 mVideoBuffer)来获取解码后的数据(即在MediaBuffer中)并进行对应处理(即进行播放)

7: 通过ANativeWindow来显示图像
    status_t err = mNativeWindow->queueBuffer(mNativeWindow.get(), mVideoBuffer->graphicBuffer().get(), -1);
    sp<MetaData> metaData = mVideoBuffer->meta_data();
    metaData->setInt32(kKeyRendered, 1);   //主要设置一个渲染标记,说明已经显示 (猜得)

Android中利用OpenMax 编程的基本流程相关推荐

  1. android view gesturedetector,如何在Android中利用 GestureDetector进行手势检测

    如何在Android中利用 GestureDetector进行手势检测 发布时间:2020-11-26 16:15:21 来源:亿速云 阅读:92 作者:Leah 今天就跟大家聊聊有关如何在Andro ...

  2. java线程画动图闪,Android中利用画图类和线程画出闪烁的心形,android心形,package com....

    Android中利用画图类和线程画出闪烁的心形,android心形,package com.package com.tt.view;import android.content.Context;imp ...

  3. android 布局颜色设置颜色设置,怎么在Android中利用view设置布局颜色

    怎么在Android中利用view设置布局颜色 发布时间:2020-12-10 16:16:37 来源:亿速云 阅读:154 作者:Leah 这期内容当中小编将会给大家带来有关怎么在Android中利 ...

  4. android开发 转跳功能,如何在Android中利用Intent实现一个页面跳转功能

    如何在Android中利用Intent实现一个页面跳转功能 发布时间:2021-02-20 17:06:31 来源:亿速云 阅读:113 作者:Leah 本篇文章为大家展示了如何在Android中利用 ...

  5. Android中的多线程编程与异步处理

    Android中的多线程编程与异步处理 引言 在移动应用开发中,用户体验是至关重要的.一个流畅.高效的应用能够吸引用户并提升用户满意度.然而,移动应用面临着处理复杂业务逻辑.响应用户输入.处理网络请求 ...

  6. android读写access数据库,Android中利用远程Microsoft Access数据库应用程序

    我写一个Android应用程序,它接受一个字符串,通过条码阅读器读取,然后当一个特定的按钮按下时,它会认为字符串发送到数据库将他们的价值设定为"库存"或"缺货" ...

  7. 在jupter中利用Python编程查看pkl文件内容的步骤

    pkl文件是python保存文件的一种格式. 下面以 test.pkl 文件为例,展示在jupter中利用Python编程查看pkl文件内容的步骤. 一.查看Python代码所在的文件夹 import ...

  8. android计算器功能实现,在android中利用 studio实现一个简单的计算器功能

    在android中利用 studio实现一个简单的计算器功能 发布时间:2020-11-07 15:35:20 来源:亿速云 阅读:168 作者:Leah 这篇文章将为大家详细讲解有关在android ...

  9. android 悬浮按钮 功能实现,怎么在Android中利用FloatingActionButton实现一个悬浮按钮效果...

    怎么在Android中利用FloatingActionButton实现一个悬浮按钮效果 发布时间:2020-12-02 17:41:30 来源:亿速云 阅读:238 作者:Leah 今天就跟大家聊聊有 ...

最新文章

  1. Java集合知识:TreeMap
  2. 马斯克脑机接口遭质疑:不是新技术,没体现神经解码进展
  3. 第十七届全国大学生智能汽车竞赛 沁恒微电子芯片推荐
  4. 计算机网络.doc,计算机网络network.doc
  5. win10下装黑苹果双系统_win10远程双系统重装电脑维修7黑苹果笔记本安装做虚拟机服务mac8...
  6. python linux log,linux,python 常用的处理log的命令
  7. 韩顺平 Java集合 自学笔记(Java30天基础)
  8. Spark大数据-TMDB电影数据分析(spark-scala版)
  9. sap系统登录时没有服务器,SAP登录到SAP系统
  10. 计算机楼综合布线设计图,现代综合大楼综合布线设计方案
  11. VS2015 社区版本 打包程序 发布
  12. OPC与三菱Q系列PLC通信
  13. [AHK]按文件的年份归档到不同年份目录里
  14. [android]so easy实现根据viewpager、edittext、时间使背景动态渐变色效果~
  15. 提高你的Java代码质量吧:不要让类型默默转换
  16. 微信小程序开发笔记,你收藏了吗?
  17. 20P41 Premiere预设450+Luts现代时尚经典黑白VHS复古电影迷幻冷酷热色彩调色预设集合
  18. 知网学术论文下载caj格式转换 caj转pdf
  19. JavaScript基础知识笔记
  20. DeepLearning六脉神剑第1式--传统神经网络

热门文章

  1. Pycharm2018的激活方法或破解方法
  2. Docker容器学习
  3. 使用jaxb根据xsd逆向生成java代码
  4. slice深拷贝数组
  5. intern cookie 纠结之二
  6. 无法将 DBNull.Value 强制转换为类型“System.DateTime”。请使用可空类型
  7. csdn的blog后台程序的导航菜单的实现
  8. 运行初始化过程代码笔记
  9. 什么是引力波?它是怎么被发现的?
  10. 父亲节,来认识一下这几位“爸爸”