当前位置: 首页 > news >正文

FFmpeg:因码流采集与封装不同步导致录制出来的MP4文件会出现黑屏、绿屏的问题

项目要求实时播放视频,并且需要支持播放中途可以录制视频。但是录制出来的文件会黑屏,过一段时间后正常显示。即:码流采集—>播放—>(一段时间后)录制MP4,黑屏出现的时间就在采集到录制之前。

黑屏现象

原因:

将码流封装成文件主要是通过这个接口实现的

av_interleaved_write_frame(formatContext, &packet);

当开始录制时,传入的packet的pts(播放时间戳)不是从0开始,而视频的播放一般是从0开始播放,所以导致在没到pts时都是显示黑屏。

解决办法:对首帧时间戳进行了归零调整,相关代码如下

int media::saveVideo(AVFormatContext *iFormatContext, AVPacket &packet)
{//写入的第一帧需要是关键帧,否则前面部分会花屏或者绿屏if(!firstKeyFrame){if(!(packet.flags & AV_PKT_FLAG_KEY)){return -1;}else{firstKeyFrame = true;}}qDebug() << "fwefvwae" << "调整前时间戳pts" << packet.pts;//调整时间戳从0开始if(isNewRecode){adjust_dts = packet.dts;adjust_pts = packet.pts;isNewRecode = false;}packet.dts -= adjust_dts;  //关键处理packet.pts -= adjust_pts;qDebug() << "fwefvwae" << "调整后时间戳pts" << packet.pts;dts = packet.dts;frame_count++;//视频数据写文件int ret;ret = av_interleaved_write_frame(formatContext, &packet);if(ret < 0){printErrInfo("MediaRecord av_interleaved_write_frame ", ret);}return ret;
}

如果出现绿屏情况,是因为录制视频时传入的第一帧不是关键帧

http://www.lryc.cn/news/605194.html

相关文章:

  • 达梦数据库(DM Database)角色管理详解|了解DM预定义的各种角色,掌握角色创建、角色的分配和回收
  • 实现了加载 正向 碰撞 雅可比 仿真
  • 第十九周-文档数据库MongoDB、消息队列和微服务
  • I Built an Offline-Capable App by Myself: React Native Frontend, C# Backend
  • WebSocket 简介与在 Vue 中的使用指南
  • Python正则表达式精准匹配独立单词技巧
  • ACL 2025 第二弹:维也纳风情舞会点燃学术之夜
  • 论文阅读:《多目标和多目标优化的回顾与评估:方法和算法》
  • Three.js + AI:结合 Stable Diffusion 生成纹理贴图
  • 如何在 Ubuntu 24.04 或 22.04 LTS 上安装 Deepin 终端
  • 微软OpenAI展开深入谈判
  • SpringCloud -- MQ高级
  • Tdesign-React 模板面包屑如何放到 Header头部
  • MongoDB系列教程-第三章:PyMongo操作MongoDB数据库(1)—— 连接、基本CRUD操作
  • 容器化与Docker核心原理
  • Odoo 18 PWA 全面掌握:从架构、实现到高级定制
  • SpringBoot中ResponseEntity的使用详解
  • 从一开始的网络攻防(十三):WAF入门到上手
  • 基于 Flexible.js + postcss-px-to-viewport 的 REM 适配方案(支持系统缩放与浏览器缩放)
  • SpringBoot+Three.js打造3D看房系统
  • ts 基础知识总结
  • 深入理解PostgreSQL的MVCC机制
  • 【自动化运维神器Ansible】Ansible常用模块之group模块详解
  • C++反射
  • 中大网校社会工作师培训创新发展,多维度赋能行业人才培养
  • vue+elementui+vueCropper裁剪上传图片背景颜色为黑色解决方案
  • OriGene:一种可自进化的虚拟疾病生物学家,实现治疗靶点发现自动化
  • Java 笔记 封装(Encapsulation)
  • vulhub-Thales靶场攻略
  • LRU (Least Recently Used) 缓存实现及原理讲解