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);             
相关推荐
鲲穹AI全能助理1 天前
实用音频合成工具分享:灵境配音 使用场景与功能说明
ffmpeg·音视频
我是Superman丶1 天前
Windows系统FFmpeg官方下载+完整安装配置保姆级教程(2026最新版)
windows·ffmpeg
luoyayun3613 天前
Qt + FFmpeg 视频工具:视频一键压缩功能实现
qt·ffmpeg·音视频·视频压缩
雪的季节3 天前
ffmpeg源码国内gitee下载
ffmpeg·gitee
Mister Leon5 天前
FFmpeg - Jetson Orin 实战部署
ffmpeg
阿拉斯攀登6 天前
售货柜实战:IPC 拉流 → 抽帧 → YOLO 识别完整流水线
yolo·ffmpeg·音视频·webrtc·视频编解码
阿拉斯攀登7 天前
RTSP 拉流与录制:IPC 摄像头本地录像完整方案
ffmpeg·音视频·webrtc·实时音视频·视频编解码
坐望云起7 天前
FFmpeg.wasm 纯浏览器端视频压缩与格式转换实战:零服务器、零上传、100% 隐私
服务器·ffmpeg·wasm
阿拉斯攀登7 天前
FFmpeg 转码详解:封装格式、编码器、码率控制
ffmpeg·音视频·webrtc·实时音视频·视频编解码
阿拉斯攀登8 天前
FFmpeg 入门:命令行的 20 个常用场景
ffmpeg·音视频·webrtc·视频编解码