diff --git a/lib/web-demuxer/web_demuxer.c b/lib/web-demuxer/web_demuxer.c index 6412a78..b79176a 100644 --- a/lib/web-demuxer/web_demuxer.c +++ b/lib/web-demuxer/web_demuxer.c @@ -86,7 +86,15 @@ WebAVStream *EMSCRIPTEN_KEEPALIVE get_av_stream(const char *filename, int type, stream->id = raw_stream->id; stream->start_time = raw_stream->start_time * av_q2d(raw_stream->time_base); stream->duration = raw_stream->duration > 0 ? raw_stream->duration * av_q2d(raw_stream->time_base) : fmt_ctx->duration * av_q2d(AV_TIME_BASE_Q); // TODO: some file type can not get stream duration - stream->nb_frames = raw_stream->nb_frames; + + int64_t nb_frames = raw_stream->nb_frames; + + // vp8 codec does not have nb_frames + if (nb_frames == 0) { + nb_frames = (fmt_ctx->duration * (double)raw_stream->avg_frame_rate.num) / ((double)raw_stream->avg_frame_rate.den * AV_TIME_BASE); + } + + stream->nb_frames = nb_frames; avformat_close_input(&fmt_ctx);