【FFmpeg】(二)视频解码、像素格式转换与Native原生绘制

本文详细介绍了使用FFmpeg进行视频解码的流程,包括FFmpeg库的功能解析,解码过程,以及数据格式。接着,讨论了像素格式转换,特别是从I420到ARGB的转换。最后,讲解了如何通过Native原生绘制在Android上利用ANativeWindow显示视频图像,包括获取窗口指针、设置缓冲区参数、刷新数据和释放资源的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

视频解码、像素格式转换与Native原生绘制

一、视频解码

1、FFmpeg 库简介

FFmpeg 一共包含8个库

  • avcodec:编解码(最重要的库)
  • avformat:封装格式处理
  • avfilter:滤镜特效处理
  • avdevice:各自设备的输入输出
  • avutil:工具库(大部分库都需要这个库的支持)
  • postproc:后加工
  • swresample:音频采样数据格式转换
  • swscale:视频像素数据格式转换

2、FFmpeg 解码的流程图

FFmpeg 解码的流程图

3、FFmpeg 数据格式简介

  • AVFormatContext:封装格式上下文结构体,也是统领全局的结构体,保存了视频文件封装格式相关信息
  • AVInputFormat:每种封装格式(例如FLV、MKV、MP4、AVI)对应一个该结构体。
  • AVStream:视频文件中每个视频(音频)流对应一个该结构体
  • AVCodeContext:编解码器上下文结构体,保存了视频(音频)编解码相关信息。
  • AVCodec:每种视频(音频)编解码器(例如H.264解码器)对应一个该结构体
  • AVPacket:存储一帧压缩编码数据
  • AVFrame:存储一帧解码后的像素(采样)数据

二、像素格式转换

像素格式转换就是将yuv420p 的转成ARGB,可以使用 C/C++ 库 libyuv 来进行转换

I420ToARGB

参数按顺序如下:

参数 类型 说明
src_y uint8_t* 来源的frame的 y 帧数据 yuv_frame->data
src_stride_y int 来源的frame的y大小数据 yuv_frame->linesize
src_u uint8_t* 来源的frame的 u 帧数据yuv_frame->data
src_stride_u int 来源的frame的u大小数据 yuv_frame->linesize
src_v uint8_t* 来源的frame的 v 帧数据yuv_frame->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值