Ffmpeg кодирование видео с time_base Не равно частоте кадров не работает с аппаратным ускорением Video Player - PullRequest
0 голосов
/ 10 января 2020

У меня есть time_base 90000 с частотой кадров 30. Я могу сгенерировать видео h264 и заставить его работать в VL C, но это видео не работает в веб-плеере с аппаратным ускорением chrome, использующем Intel HD Graphics 530. Если я изменю 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);

Любые идеи о том, почему второй пример работает, а первый - в проигрывателе видео.

...