首页 > 解决方案 > 媒体基础: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);但无济于事。

标签: c++videoh.264ms-media-foundation

解决方案


推荐阅读