ffmpeg кодирование видео с помощью time_base Не равно частоте кадров, не работает в проигрывателях видео HML5 - PullRequest
0 голосов
/ 01 июля 2019

У меня есть time_base 90000 с частотой кадров 30. Я могу сгенерировать видео h264 и заставить его работать в VLC, но это видео не работает в плеере браузера.Если я изменю time_base на 30, он будет работать нормально.

Примечание. Я соответствующим образом изменяю frame-> pts в соответствии с временной базой.
Примечание. Видео не имеет аудиопотока

//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);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...