FFmpeg--packet数据包和frame数据帧的区别

文章目录

基本概念

数据包(packet),是存储压缩编码数据的基本单位,在音频编码中,通常一个数据包只包含一帧数据,在视频编码中,由于B帧和P帧的存在,可以出现一个数据包包含多帧数据的情况

数据帧(frame), 存储非压缩数据的基本单位,对于视频为yuv 或者 rgb , 音频为aac数据

结构体字段:

Frame:

  • dataAV_NUM_DATA_POINTERS:存放解码后的原始媒体数据的指针数组,
    对于视频数据,planar格式中, Y、U、V分量会被分别存放在data0、data1、data2 ,packet格式的数据会被存放在data0中。
    对于音频数据,channel的不同声道分别存储在data0、data1

AVPacket:

  • buf:指向数据包内存的引用。
  • pts 和 dts:分别代表显示时间戳和解码时间戳。
  • data 和 size:指向数据包的数据和大小。
  • stream_index:该数据包属于哪个流。

主要函数

获取音频/视频包:

int av_read_frame(AVFormatContext *s, AVPacket *pkt);

// pkt 为解析后获取的数据包

cpp 复制代码
AVPacket *pkt = av_packet_alloc();
while (1)
    {
        av_read_frame(ifmt_ctx, pkt);
        av_packet_unref(pkt);
    }
    if(pkt)
        av_packet_free(&pkt);

获取音频/视频帧:

int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame);

cpp 复制代码
AVFrame *pFrame = av_frame_alloc(); 
while(){
	av_receive_frame(ctx, pFrame);
	//...
	av_frame_unref(pFrame);         
} 
av_frame_free(pFrame);             
相关推荐
风哥2号3 天前
数据库教程FGMT02‑生产环境Linux+Oracle19c安装配置与项目实战
linux·数据库·ffmpeg
Bruce_Liuxiaowei4 天前
录屏片段无损合并:从 ffmpeg concat 原理到 Python 自动化脚本
python·ffmpeg·自动化
工具派5 天前
口播视频怎么自动剪掉冷场?视频静音删除的阈值实测
ffmpeg·音视频·视频
❀͜͡傀儡师5 天前
移动端 360° 商品展示方案:从 20MB 雪碧图到 800KB 丝滑视频
ffmpeg·webgl·sprite
2501_930472446 天前
深度复盘|数据库迁移实战(上):腾讯云助手解析慢查询日志,定位索引缺失与语法不兼容
数据库·阿里云·ffmpeg·云计算·腾讯云·aws
我就是DaLing呀!6 天前
flutter + ffmpeg_kit_extended_flutter 大视频合并下载
flutter·ffmpeg·音视频
可乐鸡翅yeah_8 天前
多浏览器 HLS 兼容性差异排查,Chrome、Firefox、Safari 表现不一致定位
chrome·ffmpeg·音视频·firefox·safari·m3u8
行者-全栈开发9 天前
Spring Boot + FFmpeg 视频批量处理实战:压缩、HLS切片与异步任务引擎
spring boot·ffmpeg·异步处理·视频压缩·hls切片·批量任务·redis队列
可乐鸡翅yeah_9 天前
M3U8测试流使用指南,流媒体开发自测与环境校验标准化方案
网络·ffmpeg·音视频·m3u8·m3u8在线·音视频在线播放
heqingchun169 天前
Ubuntu 22.04 交叉编译 RK3568 MPP + FFmpeg 完整指南
linux·ubuntu·ffmpeg