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.pswp.cn/bicheng/91297.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/91297.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C 语言与 C++、Java、Python 等编程语言的区别

C 语言与 C、Java、Python 等编程语言在设计理念、特性和应用场景上存在显著差异&#xff0c;以下从核心区别、特性对比和适用场景三个维度详细解析&#xff1a;一、C 语言与 C 的核心区别C 是在 C 语言基础上发展而来&#xff08;最初名为 “C with Classes”&#xff09;&…

Apache Ignite 的分布式锁Distributed Locks的介绍

以下这段内容是关于 Apache Ignite 的分布式锁&#xff08;Distributed Locks&#xff09; 的介绍。这是一个非常重要的功能&#xff0c;用于在分布式系统中协调多个节点对共享资源的并发访问。 下面我们来一步步深入理解它。&#x1f3af; 一、一句话理解&#xff1a;什么是 I…

第十二天:C++ 标准库函数分类总结

C 标准库函数分类总结 数学函数&#xff08;<cmath>&#xff09; 基本运算函数 abs(x)&#xff1a;返回整数或浮点数的绝对值。int a abs(-5); // 返回 5fabs(x)&#xff1a;返回浮点数的绝对值。double b fabs(-3.14); // 返回 3.14fmod(x, y)&#xff1a;计算 x 除以…

Unity Standard Shader 解析(四)之ForwardAdd(简化版)

一、ForwardAdd// Additive forward pass (one light per pass)Pass{Name "FORWARD_DELTA"Tags { "LightMode" "ForwardAdd" }Blend [_SrcBlend] OneFog { Color (0,0,0,0) } // in additive pass fog should be blackZWrite OffZTest LEqualC…

第十九周-文档数据库MongoDB、消息队列和微服务

1. 完成redis单机安装&#xff0c;哨兵模式安装&#xff0c;主从安装&#xff0c;集群安装单机安装#安装依赖包 [rootcentos8~]#yum -y install gcc make jemalloc-devel #如果支持systemd需要安装下面包 [rootubuntu2204 ~]#apt update && apt -y install make gcc li…

C++中sizeof运算符全面详解和代码示例

sizeof 是 C 中的一个编译时运算符&#xff0c;用于获取对象或类型所占的字节数&#xff08;以 size_t 返回&#xff09;。它是掌握底层内存模型、结构体对齐、数组大小计算等的重要工具。1. 基本语法 sizeof(type) // 获取类型的大小 sizeof expression // 获取表达式结果…

内容中台:在一个地方管理多渠道内容

在数字化竞争愈演愈烈的今天&#xff0c;企业官网、社交平台、移动应用、邮件营销等渠道已成为品牌触达用户的关键接口。内容仍是连接企业与客户的核心资产。然而&#xff0c;内容创作与分发的复杂性持续攀升&#xff0c;多平台运营面临重复维护、更新不一致、资源冗余等诸多挑…

【刷题】东方博宜oj 1307 - 数的计数

样例输入&#xff1a; 6输出&#xff1a; 16 26 126 36 136原版是直接输出总数量&#xff0c;但我修改了一些&#xff0c;输出所有的新数。 #include <iostream> #include <vector> #include <string> using namespace std; //int c; void g(int num, string…

阿里云AI代码助手通义灵码开发指导

与阿里云一起轻松实现数智化让算力成为公共服务&#xff1a;用大规模的通用计算&#xff0c;帮助客户做从前不能做的事情&#xff0c;做从前做不到的规模。让数据成为生产资料&#xff1a;用数据的实时在线&#xff0c;帮助客户以数据为中心改变生产生活方式创造新的价值。智能…

设计模式(二十三)行为型:模板方法模式详解

设计模式&#xff08;二十三&#xff09;行为型&#xff1a;模板方法模式详解模板方法模式&#xff08;Template Method Pattern&#xff09;是 GoF 23 种设计模式中的行为型模式之一&#xff0c;其核心价值在于定义一个操作中的算法骨架&#xff0c;而将一些步骤延迟到子类中实…

Postgresql 查询使用正则

今天接到任务&#xff0c;要从数据库中查询数据&#xff0c;对于postgresql 我并不熟悉&#xff0c;问了百度&#xff0c;问了通义千问。发现Postgresql 在写query sql 的时候&#xff0c;可以使用正则匹配&#xff0c;不单是使用like 这种关键字。我像发现了新大陆一样的兴奋。…

【WRF-Chem Emissions教程第八期】转换实用程序

转换实用程序 8.1 将中间二进制文件转换为 WRF-Chem 数据文件 文件命名规范与风格 8.2 Binary data file format(中间二进制排放数据文件的格式和结构) FORTRAN 示例程序说明 8.3 Building the WRF-Chemistry emissions conversion code 编译步骤 验证编译结果 8.4 Namelist …

Qt Ribbon效果界面

实现效果&#xff1a;头文件&#xff1a;#pragma once #include <QMdiArea> #include <QMdiSubWindow> #include <QMainWindow> #include "ui_MainFrame1.h" #include "DockManager.h" #include "DockAreaWidget.h"class Main…

如何修改 MySQL 8.0 的密码,和忘记密码时如何修改

要修改 MySQL 8.0 的密码&#xff0c;可以通过以下几种方法实现&#xff1a;方法 1&#xff1a;使用 ALTER USER 命令&#xff08;推荐&#xff09;这是 MySQL 8.0 推荐的修改密码方式&#xff1a;-- 修改当前登录用户的密码 ALTER USER USER() IDENTIFIED BY 新密码;-- 修改指…

图像处理控件Aspose.Imaging教程:使用 C# 编程将 CMX 转换为 PNG

PNG图像文件格式是广泛使用的图像格式之一。这种图像文件格式提供了增强的共享和显示功能。另一方面&#xff0c;CMX也是 Corel 应用程序主要使用的图像文件格式。然而&#xff0c;将 CMX 转换为 PNG 可以帮助用户在网络上查看和共享文件。因此&#xff0c;在本指南中&#xff…

迪丽热巴写真壁纸

下载&#xff1a;https://pan.quark.cn/s/a740dbac8274迪丽热巴绝美写真&#xff0c;高清壁纸展现独特魅力&#xff0c;每一张都是视觉盛宴

C++11 std::function 详解:通用多态函数包装器

在C11标准中&#xff0c;引入了std::function这一通用多态函数包装器&#xff0c;定义于<functional>头文件中。它彻底改变了C中函数对象的使用方式&#xff0c;为不同类型的可调用实体提供了统一的接口。std::function能够存储、复制和调用任何可复制构造的可调用目标&a…

Kafka运维实战 16 - kafka 分区重新分配【实战】

💻 Kafka运维实战 (17篇) 📝Kafka运维实战 17 - kafka 分区副本从 1 增加到 3【实战】 📝Kafka运维实战 16 - kafka 分区重新分配【实战】 📝Kafka运维实战 15 - kafka 重设消费者组位移入门和实战【实战】 📝Kafka运维实战 14 - kafka消费者组消费进度(Lag)深入理…

智汇AI,应用领航 | 华宇万象问数入选2025全景赋能典型案例

7月29日&#xff0c;以“AI城市&#xff1a;数启新纪元”为主题中关村人工智能与未来城市论坛在中关村国家自主创新示范区展示中心举办。本次论坛围绕人工智能创新应用落地实践、新型数据基础设施建设、数据要素价值释放机制、城市智能治理等关键议题&#xff0c;邀请院士专家和…

sqli-labs:Less-7关卡详细解析

1. 思路&#x1f680; 本关的SQL语句为&#xff1a; $sql"SELECT * FROM users WHERE id(($id)) LIMIT 0,1";注入类型&#xff1a;字符串型&#xff08;单引号、双括号包裹&#xff09;提示&#xff1a;参数id需以))闭合 同样无法像常规一样回显&#xff0c;php输出语…