当前位置: 首页 > 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.dtcms.com/a/306516.html

相关文章:

  • Zynq SoC 中断控制系统设计与实现:基于 GPIO 的中断驱动开发
  • LocalDateTime vs Instant vs ZonedDateTime:到底该用哪个?
  • .net6的webapi项目统一封装返回值
  • 剧本杀系统 App 开发:科技赋能,重塑剧本杀游戏体验
  • 光伏气象监测系统:当阳光遇见科技
  • Javascript 基础总结
  • 做题笔记:某大讯飞真题28道
  • 浅拷贝和深拷贝
  • uni-app,uni.navigateTo
  • 【LangChain4j 详解】Java生态大语言模型框架设计哲学与架构原理
  • Node.js以及异步编程
  • vue模块化导入
  • 网络安全学习第16集(cdn知识点)
  • Android调用python库和方法的实现
  • 开源项目:排序算法的多种实现方式
  • DAY15-指针(3)
  • 解决:React Native 中常见的 状态栏遮挡内容
  • python 中 TypeError: self类型对象传入错误解决办法
  • 在职申硕,怎么选适合自己的学科专业呢?
  • 计算机网络1-3:三种交换方式
  • sed编程入门
  • Android RTMP推送|轻量级RTSP服务同屏实践:屏幕+音频+录像全链路落地方案
  • 本地 docker 部署 HAR包分析工具 harviewer
  • 2025年7月技术问答第5期
  • MySQL: with as与with RECURSIVE如何混合使用?
  • 【算法】十大排序算法超深度解析,从数学原理到汇编级优化,涵盖 15个核心维度
  • 专题:2025机器人产业技术图谱与商业化指南|附130+份报告PDF、数据汇总下载
  • C++实战:抖音级视频应用开发精髓
  • LazyLLM教程 | 第2讲:10分钟上手一个最小可用RAG系统
  • [极客时间]LangChain 实战课 -----|(11) 记忆:通过Memory记住客户上次买花时的对话细节