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

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

黑屏现象

原因:

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

cpp 复制代码
av_interleaved_write_frame(formatContext, &packet);

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

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

cpp 复制代码
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;
}

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

相关推荐
redfred8 小时前
HyperFrames 部署教程:5.6 万 Star 开源「写 HTML 出视频」框架,Windows 从零上手(CLI 三条命令 + 7 个避坑)
ffmpeg·开源·自动化·html·音视频
Arcai102410 小时前
PostgreSQL数据备份和恢复完全指南
数据库·postgresql·ffmpeg·备份一体机·备份软件·smartstor·智备科技
可乐鸡翅yeah_20 小时前
FFmpeg 生成 HLS 独立分片 independent‑segments 参数到底有什么用
javascript·ffmpeg·音视频·safari·m3u8
企业数字化笔记1 天前
视觉处理为什么会慢?解码、预处理、模型推理、后处理和编码的性能拆解
ffmpeg·gpu算力
Maynor9962 天前
6张商品图→17秒带货短视频:开源12个Claude Skills,配音、字幕花字、BGM本地一条命令出片
ffmpeg·ai编程·claude·电商·agent skills
AIGC小尼2 天前
8G 显存零基础本地部署 AI 漫剧全流程|ComfyUI+Wan2.2+FFmpeg 离线成片完整方案(含代码 / 指令 / 排坑)
人工智能·ffmpeg·php·comfyui·ai漫剧
开开心心就好2 天前
以图搜图找重复图片,本地工具离线就能用
javascript·智能手机·ffmpeg·c#·ocr·word·音视频
可乐鸡翅yeah_3 天前
AES‑128 加密 M3U8,IV 初始化向量新手容易踩坑
前端·网络·数据库·ffmpeg·音视频·m3u8在线
企业数字化笔记4 天前
视频视觉任务怎样选择媒体处理技术?FFmpeg、OpenCV、GStreamer 的职责与适用场景
ffmpeg·音视频·媒体
可乐鸡翅yeah_5 天前
网页端 M3U8 播放器性能监控,怎么看播放卡顿指标
javascript·ffmpeg·音视频·safari·m3u8