c++ - 媒体基础:H264 编码器丢帧
问题描述
我正在尝试将来自监视器的帧数据编码到 MP4 文件中MFVideoFormat_H264
,使用MFCreateSinkWriterFromURL
. 我将输入 IMFMediaType 配置为包含
inputMediaType->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video);
inputMediaType->SetGUID(MF_MT_SUBTYPE, MFVideoFormat_RGB32);
inputMediaType->SetUINT32(MF_MT_INTERLACE_MODE, MFVideoInterlace_Progressive);
MFSetAttributeRatio(inputMediaType, MF_MT_FRAME_RATE, 60, 1);
MFSetAttributeRatio(inputMediaType, MF_MT_FRAME_RATE_RANGE_MAX, 120, 1);
FSetAttributeRatio(inputMediaType, MF_MT_FRAME_RATE_RANGE_MIN, 1, 1);
MFSetAttributeRatio(inputMediaType, MF_MT_PIXEL_ASPECT_RATIO, 1, 1);
MFSetAttributeSize(inputMediaType, MF_MT_FRAME_SIZE, 1920, 1080);
全部在 60Hz 刷新率的 1080p 显示器上。我的 outputMediaType 除了
outMediaType->SetGUID(MF_MT_SUBTYPE, MFVideoFormat_H264);
outputMediaType->SetUINT32(MF_MT_AVG_BITRATE, 10000000);
接收器写入器本身也被配置为 MF_SINK_WRITER_DISABLE_THROTTLING=TRUE 和 MF_READWRITE_ENABLE_HARDWARE_TRANSFORMS=TRUE 以在可用时使用硬件加速获得最佳性能。一切正常,视频成功创建。但是,每个视频似乎在整个持续时间内都有口吃。我曾尝试降低比特率并提高平均 FPS 以尝试补偿,但它更多的是在上面贴上创可贴。我的假设是由于存储桶溢出而导致出现这种卡顿的丢帧?
是否有人知道在保留 h264 编码格式的同时解决最终视频文件中的帧丢失/卡顿问题?
编辑:我还修改了输入和输出类型设置的不同属性,
hr = MFSetAttributeRatio(pMediaTypeIN/OUT, MF_MT_FRAME_RATE_RANGE_MIN, 60, 1);
但无济于事。
解决方案
推荐阅读
- java - Xlint 弃用
- kubernetes - kubernetes podAffinity 优先级分数是如何计算的?
- mysql - 在 MySQL 中编写触发器时出现语法错误
- google-cloud-platform - GCP 负载平衡器显示“无效指纹”
- php - Laravel 关系不起作用但外键有价值
- c# - 实体框架不加载相关对象
- vba - 在同一行显示两个数字之间的数字
- sql - 在 sql 中使用子查询。显示无输出
- javascript - 在函数中使用 .each() 时,有没有办法避免同时传递 $ 和 $foo ?
- matlab - 交叉验证后如何在 Matlab 中应用学习到的模型