从现有的 Packet 拷贝一个新 Packet 的时候,有两种情况:
• ①两个 Packet 的 buf 引用的是 同一数据缓存空间 ,这时 候要注意数据缓存空间的释放问题;
• ②两个 Packet 的 buf 引用不同的数据缓存空间 ,每个 Packet都有数据缓存空间的 copy ;
FFmpeg 是通过数据共享的形式 拷贝数据的,也就是通过浅拷贝完成数据的copy,
那么浅拷贝是有问题的,FFmpeg是如何解决这一问题的呢?
通过引用计数的方式来fix这个问题
更加精确的说明:
对于多个 AVPacket 共享同一个缓存空间, FFmpeg 使用的 引 用计数的机制(reference-count ) :
◼ 初始化引用 计数为 0 ,只有真正分配 AVBuffer 的时候, 引用计数初始化为1 ;
◼ 当有新的 Packet 引用共享的缓存空间时, 就将引用计数 +1;
◼ 当释放了引用共享空间的 Packet ,就将引用计数 -1 ;引 用计数为0 时,就释放掉引用的缓存空间 AVBuffer 。
◼ AVFrame 也是采用同样的机制。
音视频开发10 FFmpeg 内存模型-AVPacket, AVFrame
hunandede2024-06-03 15:06
相关推荐
ai产品老杨5 小时前
打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程的智慧工业开源了非凡ghost13 小时前
FxSound:提升音频体验,让音乐更动听Ai工具分享13 小时前
视频画质差怎么办?AI优化视频清晰度技术原理与实战应用萌虎不虎17 小时前
【鸿蒙(openHarmony)自定义音频播放器的开发使用说明】Hi2024021718 小时前
Orin-Apollo园区版本:订阅多个摄像头画面拼接与硬编码RTMP推流知来者逆18 小时前
视觉语言模型应用开发——Qwen 2.5 VL模型视频理解与定位能力深度解析及实践指南max50060018 小时前
图像处理:实现多图点重叠效果Antonio91519 小时前
【音视频】WebRTC 音视频延时、同步分析以及超低延时优化9527华安19 小时前
Xilinx系列FPGA实现DP1.4视频收发,支持4K60帧分辨率,提供2套工程源码和技术支持