具体代码请看:NDKPractice项目的ffmpeg86
将之前的音乐播放器代码整合进来
1.使用FFmpeg解码视频
跟使用FFmpeg解码音频流程一致,但需要判断是否能硬解码
1 | //-------------需要将视频的格式一般为yuv420P转为RBGA8888-------------------------// |
2.渲染视频
2.1 OpenGLES解释(渲染视频高效,硬件支持)
2.1.1 OpenGL概念
OpenGL 是一种应用程序的编程接口,它是一种可以对图像硬件设备进行访问的软件库,OpenGL 被设计为一个现代化的,硬件无关的接口,
因此我们不用考虑操作系统的前提下,在多种不同的图像硬件系统上通过软件的形式来实现 OpenGL 接口。
OpenGL 也没有提供任何表达三维物体模型和读取图文的操作,我们需要用一系列的几何图元来创建三维物体。
图元:线,三角形,点,patch
2.1.2 OpenGL 用来干什么
渲染视频、图形,图片处理,2D/3D 游戏引擎,科学可视化,CAD,虚拟现实,AI人工智能等等
2.1.3 OpenGL 与 OpenGLES 有什么关系?
OpenGLES 是 OpenGL 阉割(精简)版本,主要用于移动端
2.1.4 OpenGL后续学习
看谷歌的示例
学开发编程的约定,坐标系变化,标量向量,渲染流水线
基础绘制(数学基础),纹理,模型,雾效果,相机,美容,native 层
2.2 SurfaceView 渲染视频(这节先用SurfaceView)
1 | 源代码分析: |
2.2.1 Button 和 TextView 的 Canvas 是不是同一个?
是!!!
2.2.2 Canvas 是从哪里来的?
根布局的 Canvas canvas = mSurface.lockCanvas(dirty)
2.2.3 Canvas 绘制的东西到哪里去了(怎么渲染出来的)?
2.2.4 为什么 SurfaceView 能在子线程中更新 UI
只要View是在子线程中创建的,就可以在子线程中可以更新UI。(代码中判断的是不是当前线程)