video - 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);
关于为什么第二个示例有效而第一个示例在视频播放器中无效的任何想法。
解决方案
推荐阅读
- sql - Power bi 代码作为预计算迁移到 SQL
- javascript - 如何使用 Microsoft Graph 对 Vue.js 渐进式 Web 应用程序进行身份验证
- javascript - 如何从中间开始对数组进行排序?
- ios - ProjectName.iOS 无法注册程序集“OpenTK-1.0”
- flutter - 如何对齐 FlatButton 的子元素
- c# - 如何在 c# 中获取我的 HttpResponseMessage 的流响应?
- python - Python:如何使用 pyglet 生成我的世界风格的地形?
- android - 我可以更改按钮布局运行时吗?
- python - 处理 matplotlib 条形图中的倾斜数据
- javascript - 我怎样才能制作这个自定义步进器?