首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android FFmpeg系列03--视频解码渲染

在前面的文章中讲述了FFmpeg的编译&集成和音视频的一些基础概念 Android FFmpeg系列01--编译与集成 Android FFmpeg系列02--音视频基础 本文为FFmpeg系列的第三篇文章...,主要内容为利用FFmpeg解码本地mp4文件的视频流并利用OpenGL进行上屏渲染 FFmpeg视频解码 一个音视频文件的播放流程大致需要经历解封装->解码->音视频同步->数据消费几个步骤,如下图所示...,要让画面正常速率显示的话就需要做时钟同步了,按照视频帧的pts来渲染这一帧 因为Demo只解码视频流上屏,所以时钟肯定就是参考系统时钟了,这里我们只是在pts比系统时钟晚的情况等待 auto pts...渲染 解码出来的AVFrame经过sws context后统一转为YUV420P格式,然后抛到java层上传纹理并渲染 OpenGL如何渲染YUV buffer可以参考之前的两篇文章,这里就不赘述~ 如何使用...OpenGL渲染YUV数据 Android中如何使用OpenGL播放视频 Demo https://github.com/sifutang/ffmpeg-demo 点击屏幕左右滑动会将视频划分为gray

84320

全网最全的 Android 音视频和 OpenGL ES 干货,都在这了

以图像渲染技术为切入点便可熟练掌握图像的数据格式、渲染原理、滤镜等知识点,然后基于此再去学习 Android MediaCodec 基于 Surface 的编解码以及 Camera 开发就变得易如反掌。...Android FFmpeg 音视频开发系列 (01)FFmpeg 编译和集成 (02)FFmpeg + ANativeWindow 实现视频解码播放 (03)FFmpeg + OpenSLES 实现音频解码播放...(04)FFmpeg + OpenGLES 实现音频可视化播放 (05)FFmpeg + OpenGLES 实现视频解码播放和视频滤镜 (06)FFmpeg 播放器实现简单音视频同步的三种方式 (07...)FFmpeg + OpenGL ES 实现 3D 全景播放器 (08)FFmpeg 播放器视频渲染优化 (09)FFmpeg、x264以及fdk-aac 编译整合 (10)FFmpeg 视频录制 -...写文章就是把一些知识点融汇贯通的过程,然后拿不准的知识点就得查资料,因为如果知识点弄错了被人怼会很没面子,还有就是加深记忆,当做技术笔记。

2.6K21
您找到你想要的搜索结果了吗?
是的
没有找到

OpenGL ES 文字渲染

[OpenGL ES 文字渲染方式有几种?] 在音视频或 OpenGL 开发中,文字渲染是一个高频使用的功能,比如制作一些酷炫的字幕、为视频添加水印、设置特殊字体等等。...实际上 OpenGL 并没有定义渲染文字的方式,所以我们最能想到的办法是:将带有文字的图像上传到纹理,然后进行纹理贴图。 本文分别介绍下在应用层和 C++ 层常用的文字渲染方式。...[OpenGL ES 文字渲染] 基于 Canvas 绘制生成 Bitmap 在应用层实现文字渲染主要是利用 Canvas 将文本绘制成 Bitmap ,然后生成一张小图,然后在渲染的时候进行贴图。...然而每次渲染的时候都去重新加载位图显然不是高效的,我们应该将这些生成的数据储存在应用程序中,在渲染过程中再去取,重复利用。...OpenGL 纹理对应的图像默认要求 4 字节对齐,这里需要设置为 1 ,确保宽度不是 4 倍数的位图(灰度图)能够正常渲染

1.5K70

FFmpeg + OpenGLES 实现视频解码播放和视频滤镜

FFmpeg 开发系列连载: FFmpeg 开发(01):FFmpeg 编译和集成 FFmpeg 开发(02):FFmpeg + ANativeWindow 实现视频解码播放 FFmpeg 开发(03...FFmpeg解码功能和 ANativeWindow 的渲染功能,实现了的视频的解码播放。...视频解码播放和视频滤镜 1 OpenGL ES 渲染解码帧 经过上面几节的介绍,我们对音视频的解码过程已经比较熟悉了。本文要用 OpenGL 实现视频的渲染,这里再回顾下视频的解码流程: ?...视频的解码流程 从流程图中可以看出,解码一帧图像后,首先将对图像进行格式转换,转换成 RGBA 格式,使用 OpenGL 或 ANativeWindow 可以直接进行渲染。...了解视频解码渲染的流程之后,我们就可以构建 OpenGL 渲染环境。

2.6K10

ffmpeg android视频解码

解码流程: 获取文件信息,数据存储在AVFormatContext里面 根据AVFormatContext获取对应的AVCodecContext 解码原始数据AVPacket,解码为自己需要的数据AVFrame...解码器获取 //5.1 根据video_index获取解码器上下文AVCodecContext pCodecCtxOrg = pFormatCtx->streams[video_index...打开解码器 if (avcodec_open2(pCodecCtx, pCodec, NULL) < 0) { LOGE ("打开解码器失败"); return;...总结: 要解码,我们需要获取解码器AVCodec,解码器我们需要通过codec_id获取,codec_id我们需要通过AVStream获取,AVStream我们需要通过AVCodecContext获取,...AVCodecContext我们要根据AVFormatContext获取,解码的时候我们要通过AVFormatContext读取,解码数据存储在AVFrame里面,编码数据存储在AVPacket里面。

1.3K10

QT软件开发-基于FFMPEG设计视频播放器-软解图像(一)

-解码音频(三) https://xiaolong.blog.csdn.net/article/details/126836582 QT软件开发-基于FFMPEG设计视频播放器-OpenGL渲染视频(...特点: 采用硬件加速解码(GPU),OpenGL渲染、只解码图像数据,忽略音频数据,主要是演示了ffmpeg的硬件解码OpenGL渲染的基本使用流程。...特点: 采用硬件加速解码(GPU),OpenGL渲染、只解码图像数据,忽略音频数据,主要是演示了ffmpeg的硬件解码OpenGL渲染的基本使用流程。...特点: 采用硬件加速解码(GPU),OpenGL渲染、只解码图像数据,忽略音频数据,主要是演示了ffmpeg的硬件解码OpenGL渲染的基本使用流程,通过QAudioOutput播放音频数据的流程。...2.2 渲染 ffmpeg本身只是解码、编码的库,解码出来的图像渲染要自己实现。所谓的渲染就是显示ffmpeg解码视频之后得到的图片数据。 渲染也分为软件渲染、硬件加速渲染

1.8K30

【Android 音视频开发打怪升级:FFmpeg音视频编解码篇】六、FFmpeg简单合成MP4:视屏解封与重新封装

二、使用OpenGL渲染视频画面篇 1,初步了解OpenGL ES 2,使用OpenGL渲染视频画面 3,OpenGL渲染多视频,实现画中画 4,深入了解OpenGL之EGL 5,OpenGL FBO...数据缓冲区 6,Android音视频硬编码:生成一个MP4 三、Android FFmpeg音视频解码篇 1,FFmpeg so库编译 2,Android 引入FFmpeg 3,Android FFmpeg...视频解码播放 4,Android FFmpeg+OpenSL ES音频解码播放 5,Android FFmpegOpenGL ES播放视频 6,Android FFmpeg简单合成MP4:视屏解封与重新封装...7,Android FFmpeg视频编码 本文你可以了解到 利用 FFmpeg 对音视频进行简单的解封和重新封装,不涉及解码和编码,为下一篇讲解如何对编辑好的视频进行重编码和封装做好铺垫。...一、前言 前面的文章中,对 FFmpg 视频的解码,以及如何利用 OpenGL 对视频进行编辑和渲染,做了详细的讲解,接来非常重要的,就是对编辑好的视频进行编码和保存。

85620

「Android音视频编码那点破事」序章

这个笔记的主要内容是,使用硬编和软编的方式解决Android视频编解码的问题(后续会支持解码),并且使用OpenGL实现滤镜渲染,包括美颜,水印等等。   ...,一组OpenGL连接本地窗口的接口,主要通过Surface向窗口绘制帧画面,以及给MediaCodec提供帧数据) FBO(帧缓冲区,这里主要用于离屏渲染以及特效) PBO(像素缓冲区对象,可以高效读取...可能有人有疑问,软编解码首选的不是大名鼎鼎的ffmpeg吗,为什么直接使用x264。...大家都知道ffmpeg其实就是在众多编解码器上套个壳子,再集成一个混合器,虽然功能众多,但是却很臃肿(当然已经很出色了),以至于我来了来来回回学习了4+次也没有掌握。...对于编解码常常用到的颜色格式(ColorFormat)转换,ffmpeg提供了swscale,功能虽然很强大,但效率不敢恭维,完全可以使用google的libyuv替代。

33420

FFmpeg AI推理+图形渲染的可定制GPU管线

FFmpeg使用avfilter来处理解码后的帧,做全流程的GPU处理实际就是要实现若干FFmpeg GPU filter。...理想情况,做两个filter就够了,TensorRT filter用于推理,OpenGL filter用于渲染,硬件编解码是现成的。 但实际上这样是不行的,为什么呢?...设置的过程就是一个入栈的过程,接口叫做cuCtxPushCurrent,可将当前的CUDA context给push到线程中,即入栈,然后就可以使用了。...刚才提到,我们既要推理又要渲染渲染取决于推理的结果,因此我们需要用OpenGL在GPU解码的图片帧上进行绘制,那么就需要OpenGL可以访问到CUDA memory。...除了一些必须要同步的命令以外,OpenGL渲染命令在GPU上基本也是异步的。GPU视频的编码和解码也基本上是异步的。

2.2K30

「Android音视频编码那点破事」序章

这个笔记的主要内容是,使用硬编和软编的方式解决Android视频编解码的问题(后续会支持解码),并且使用OpenGL实现滤镜渲染,包括美颜,水印等等。   ...,可以很方便的与OpenGL联动,也是TextureView提供的渲染接口) MediaCodec(硬编解决方案) X264(软编解决方案) MediaMuxer(音视频混合器)   以上内容我会选一部分在接下来的时间里详细展开...可能有人有疑问,软编解码首选的不是大名鼎鼎的ffmpeg吗,为什么直接使用x264。...大家都知道ffmpeg其实就是在众多编解码器上套个壳子,再集成一个混合器,虽然功能众多,但是却很臃肿(当然已经很出色了),以至于我来了来来回回学习了4+次也没有掌握。...对于编解码常常用到的颜色格式(ColorFormat)转换,ffmpeg提供了swscale,功能虽然很强大,但效率不敢恭维,完全可以使用google的libyuv替代。

56310

FFMpeg 实现视频编码、解码

FFMpeg 作为音视频领域的开源工具,它几乎可以实现所有针对音视频的处理,本文主要利用 FFMpeg 官方提供的 SDK 实现音视频最简单的几个实例:编码、解码、封装、解封装、转码、缩放以及添加水印。...FFMpeg 解码实现 解码实现的是将压缩域的视频数据解码为像素域的 YUV 数据。实现的过程,可以大致用如下图所示。 ?...,使用函数av_parser_init; 最后,前面的准备工作完成后,打开解码器,即可调用 FFMpeg 提供的解码函数avcodec_decode_video2对输入的压缩域的码流进行解码,并将解码数据存放到...pkt.size == 0) continue; //decode start avcodec_decode_video2(codecCtx, frame, &got_frame, pkt); } 注意,上面解码过程中...解码函数avcodec_decode_video2函数完成整个解码过程,对于它简单介绍如下: int avcodec_decode_video2(AVCodecContext *avctx, AVFrame

3.4K20

刨根问底 | FFmpeg 解码 API 以及在解码过程中存在的丢帧问题

FFmpeg的编解码API 从3.1版本开始,FFmpeg提供了新的编解码API来对音视频数据进行编解码操作,从而实现对输入和输出的解耦: 解码API avcodec_send_packet() avcodec_receive_frame...我们的工具中,在流结束之后,并没有执行flushing操作,因此就出现了解码过程丢帧的现象。按照FFmpeg的指导,我们补充了如下的逻辑,以便获取解码器中缓存的帧。...FFMPeg 解码 API 状态机 avcodec_send_packet返回值 从FFmpeg的源码中,我们会发现,正常情况下,avcodec_send_packet()函数的返回值主要有以下三种:...对API的调用实际上是一种动作,而API的返回值则用来标志当前解码器的状态。因此,解码API的整个过程实际上就是一个状态机。...根据avcodec_send_packet返回值和avcodec_receive_frame返回值中的介绍,可以得到正常情况下,解码过程的状态机,如下图所示。

2.2K20

FFmpeg 开发(04):FFmpeg + OpenGLES 实现音频可视化播放

FFmpeg 开发系列连载: FFmpeg 开发(01):FFmpeg 编译和集成 FFmpeg 开发(02):FFmpeg + ANativeWindow 实现视频解码播放 FFmpeg 开发(03)...:FFmpeg + OpenSLES 实现音频解码播放 本文基于上一篇文章 FFmpeg + OpenSLES 实现音频解码播放 ,利用 FFmpeg 对一个 Mp4 文件的音频流进行解码,然后将解码后的...FFmpeg + OpenGLES 实现音频可视化播放 关于音频的可视化,在旧文中,我们曾经实现过将 Android AudioRecorder 采集的实时音频单通道 PCM 数据用 OpenGL 渲染成柱状图...具体的渲染过程和细节,请移步这篇文章,代码已开源: OpenGL ES 实现可视化实时音频 提取一个通道的音频数据 在上一篇文章,我们构建 OpenSLES 播放器时,对数据格式的定义如下: SLDataFormat_PCM...由于前期已经系统地阐述了 OpenGL ES 相关知识点,这里就不做展开叙述,详细内容请参考: Android OpenGL ES 从入门到精通系统性学习教程 利用 OpenGL 渲染音频数据,本质上就是根据音频数据的值去构建一组如下图所示的网格

82330
领券