首页 > 解决方案 > ffmpeg 使用 time_base 编码视频不等于帧率不起作用硬件加速视频播放器

问题描述

我的 time_base 为 90000,帧速率为 30。我可以生成一个 h264 视频并让它在 VLC 中运行,但该视频在使用 Intel HD Graphics 530 的硬件加速 Web chrome 播放器中不起作用。如果我将 time_base 更改为30 它工作正常。

注意:我正在适当地更改 frame->pts 以匹配 time_base。注意:视频没有音频流

//header.h
AVCodecContext *cctx;
AVStream* stream;

这是非工作示例代码

//source.cpp
stream->time_base = { 1, 90000 };
stream->r_frame_rate = { fps, 1 };
stream->avg_frame_rate = { fps, 1 };

cctx->codec_id = codecId;
cctx->time_base = { 1 ,  90000 };
cctx->framerate = { fps, 1 };

// ...... 
// add frame code later on timestamp are in millisecond
frame->pts = (timestamp - startTimeStamp)* 90;

这是工作示例代码

//source.cpp
stream->time_base = { 1, fps};
stream->r_frame_rate = { fps, 1 };
stream->avg_frame_rate = { fps, 1 };

cctx->codec_id = codecId;
cctx->time_base = { 1 ,  fps};
cctx->framerate = { fps, 1 };

// ...... 
//  add frame code timestamp are in millisecond
frame->pts = (timestamp - startTimeStamp)/(1000/fps);

关于为什么第二个示例有效而第一个示例在视频播放器中无效的任何想法。

标签: videoffmpeghardware-acceleration

解决方案


推荐阅读