diff --git a/Makefile b/Makefile index 67dd13a..6dc3182 100644 --- a/Makefile +++ b/Makefile @@ -31,6 +31,7 @@ WEB_DEMUXER_ARGS = \ -s EXPORTED_RUNTIME_METHODS=cwrap,getValue,UTF8ToString \ -s EXPORTED_FUNCTIONS=_free \ -s ASYNCIFY \ + -s WASM_BIGINT \ -s ALLOW_MEMORY_GROWTH=1 clean: diff --git a/lib/web-demuxer/post.js b/lib/web-demuxer/post.js index 50d16cd..00e5ead 100644 --- a/lib/web-demuxer/post.js +++ b/lib/web-demuxer/post.js @@ -29,7 +29,8 @@ function getAVStream(file, type = 0, streamIndex = -1) { const id = Module.getValue(av_stream_ptr + 4, "i32"); const start_time = Module.getValue(av_stream_ptr + 8, "double"); const duration = Module.getValue(av_stream_ptr + 16, "double"); - const codecpar_ptr = Module.getValue(av_stream_ptr + 24, "*"); + const nb_frames = Module.getValue(av_stream_ptr + 24, "i64"); + const codecpar_ptr = Module.getValue(av_stream_ptr + 32, "*"); const codecpar_codec_string_ptr = Module.getValue(codecpar_ptr + 8, "i8*"); let codecpar = { codec_type: Module.getValue(codecpar_ptr, "i32"), @@ -63,6 +64,7 @@ function getAVStream(file, type = 0, streamIndex = -1) { codecpar, start_time, duration, + nb_frames }; // free wasm memory diff --git a/lib/web-demuxer/web_demuxer.c b/lib/web-demuxer/web_demuxer.c index 11195d8..6412a78 100644 --- a/lib/web-demuxer/web_demuxer.c +++ b/lib/web-demuxer/web_demuxer.c @@ -86,6 +86,7 @@ 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; avformat_close_input(&fmt_ctx); diff --git a/lib/web-demuxer/web_demuxer.h b/lib/web-demuxer/web_demuxer.h index 66652f6..fd960bd 100644 --- a/lib/web-demuxer/web_demuxer.h +++ b/lib/web-demuxer/web_demuxer.h @@ -26,6 +26,7 @@ typedef struct { int id; double start_time; double duration; + int64_t nb_frames; WebAVCodecParameters *codecpar; } WebAVStream; diff --git a/src/types/demuxer.ts b/src/types/demuxer.ts index cd0bc2a..9dcc077 100644 --- a/src/types/demuxer.ts +++ b/src/types/demuxer.ts @@ -23,6 +23,7 @@ export interface WebAVStream { id: number; start_time: number; duration: number; + nb_frames: number; codecpar: WebAVCodecParameters; }