Skip to content

Need small (SingleThread) ffmpeg-core.wasm #312

Description

@pvitaliy84

I try this: #137

I need:

  1. compile only audio:
  • mp3 -> ogg(vorbis)
  • wav -> ogg(vorbis)
  • ogg(opus) -> ogg(vorbis)
  1. Compile small size of the wasm.

My changes:

core-st.yaml

name: Build FFmpeg.wasm (Single Thread)
on:
  push:
    branches:
      - n4.3.1-wasm
  pull_request:
    branches:
      - n4.3.1-wasm

env:
  FFMPEG_ST: yes
  DIST_PATH: wasm/packages/core-st/dist
  CACHE_KEY_PREFIX: ffmpeg.wasm-core-st
  # EM_VERSION: 2.0.8
  # EM_CACHE_FOLDER: 'emsdk-cache'

jobs:
  build-libs:
    strategy:
      max-parallel: 1
      matrix:
        script:
          - build-wavpack
          - build-lame
          - build-ogg
          - build-vorbis
          - build-opus
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          submodules: recursive
      - name: Get commit hash
        id: get-commit-hash
        run: |
          echo "::set-output name=hash::$(git rev-parse --short HEAD)"
      - name: Cache libs
        uses: actions/cache@v2
        with:
          path: |
            build
            wasm/cache
          key: ${{ env.CACHE_KEY_PREFIX }}-${{ steps.get-commit-hash.outputs.hash }}-${{ matrix.script }}
          restore-keys: |
            ${{ env.CACHE_KEY_PREFIX }}-${{ steps.get-commit-hash.outputs.hash }}-
      - name: List cached libs
        run: ls -R build || true
      - name: Build FFMpeg Libs
        run: bash build-with-docker.sh install-deps ${{ matrix.script }}
  build-ffmpeg:
    runs-on: ubuntu-latest
    needs: build-libs
    steps:
      - uses: actions/checkout@v2
        with:
          submodules: recursive
      - name: Get commit hash
        id: get-commit-hash
        run: |
          echo "::set-output name=hash::$(git rev-parse --short HEAD)"
      - name: Cache multiple paths
        uses: actions/cache@v2
        env:
          GIT_HASH: $(git rev-parse --short HEAD)
        with:
          path: |
            build
            wasm/cache
          key: ${{ env.CACHE_KEY_PREFIX }}-${{ steps.get-commit-hash.outputs.hash }}-ffmpeg
          restore-keys: |
            ${{ env.CACHE_KEY_PREFIX }}-${{ steps.get-commit-hash.outputs.hash }}-
      - name: List cached libs
        run: ls -R build || true
      - name: Build FFMpeg
        run: |
          bash build-with-docker.sh \
            install-deps \
            configure-ffmpeg \
            build-ffmpeg
      - uses: actions/upload-artifact@master
        with:
          name: ffmpeg-core
          path: ${{ env.DIST_PATH }}

var.sh

#!/bin/bash
#
# Common variables for all scripts

set -euo pipefail

# Include llvm binaries
export PATH=$PATH:$EMSDK/upstream/bin

# if yes, we are building a single thread version of
# ffmpeg.wasm-core, which is slow but compatible with
# most browsers as there is no SharedArrayBuffer.
FFMPEG_ST=${FFMPEG_ST:-no}

# Root directory
ROOT_DIR=$PWD

# Directory to install headers and libraries
BUILD_DIR=$ROOT_DIR/build

# Directory to look for pkgconfig files
EM_PKG_CONFIG_PATH=$BUILD_DIR/lib/pkgconfig

# Toolchain file path for cmake
TOOLCHAIN_FILE=$EMSDK/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake

# Flags for code optimization, focus on speed instead
# of size
OPTIM_FLAGS="-O3"

if [[ "$OSTYPE" == "linux-gnu"* ]]; then
  # Use closure complier only in linux environment
  OPTIM_FLAGS="$OPTIM_FLAGS --closure 1"
fi

# Unset OPTIM_FLAGS can speed up build
# OPTIM_FLAGS=""

CFLAGS_BASE="$OPTIM_FLAGS -I$BUILD_DIR/include"
CFLAGS="$CFLAGS_BASE -s USE_PTHREADS=1"

if [[ "$FFMPEG_ST" == "yes" ]]; then
  CFLAGS="$CFLAGS_BASE"
  EXTRA_FFMPEG_CONF_FLAGS="--disable-pthreads --disable-w32threads --disable-os2threads"
fi

export CFLAGS=$CFLAGS
export CXXFLAGS=$CFLAGS
export LDFLAGS="$CFLAGS -L$BUILD_DIR/lib"
export STRIP="llvm-strip"
export EM_PKG_CONFIG_PATH=$EM_PKG_CONFIG_PATH

FFMPEG_CONFIG_FLAGS_BASE=(
  --target-os=none        # use none to prevent any os specific configurations
  --arch=x86_32           # use x86_32 to achieve minimal architectural optimization
  --enable-cross-compile  # enable cross compile
  --disable-x86asm        # disable x86 asm
  --disable-inline-asm    # disable inline asm
  --disable-stripping     # disable stripping
  --disable-programs      # disable programs build (incl. ffplay, ffprobe & ffmpeg)
  --disable-doc           # disable doc
  --disable-debug         # disable debug info, required by closure
  --disable-runtime-cpudetect   # disable runtime cpu detect
  --disable-autodetect    # disable external libraries auto detect
  --disable-everything
  --disable-network
  --enable-small
  --enable-protocol=file
  --enable-ffmpeg
  --extra-cflags="$CFLAGS"
  --extra-cxxflags="$CFLAGS"
  --extra-ldflags="$LDFLAGS"
  --pkg-config-flags="--static"
  --nm="llvm-nm"
  --ar=emar
  --ranlib=emranlib
  --cc=emcc
  --cxx=em++
  --objcc=emcc
  --dep-cc=emcc

  ${EXTRA_FFMPEG_CONF_FLAGS-}
)

echo "EMSDK=$EMSDK"
echo "FFMPEG_ST=$FFMPEG_ST"
echo "CFLAGS(CXXFLAGS)=$CFLAGS"
echo "BUILD_DIR=$BUILD_DIR"

configure-ffmpeg.sh

#!/bin/bash

set -euo pipefail
source $(dirname $0)/var.sh

FLAGS=(
  "${FFMPEG_CONFIG_FLAGS_BASE[@]}"
  # --enable-gpl            # required by x264
  # --enable-nonfree        # required by fdk-aac
  # --enable-zlib           # enable zlib
  # --enable-libx264        # enable x264
  # --enable-libx265        # enable x265
  # --enable-libvpx         # enable libvpx / webm
  --enable-libwavpack     # enable libwavpack
  --enable-libmp3lame     # enable libmp3lame
  # --enable-libfdk-aac     # enable libfdk-aac
  # --enable-libtheora      # enable libtheora
  --enable-libvorbis      # enable libvorbis
  # --enable-libfreetype    # enable freetype
  --enable-libopus        # enable opus
  # --enable-libwebp        # enable libwebp
  # --enable-libass         # enable libass
  # --enable-libfribidi     # enable libfribidi
  # --enable-libaom         # enable libaom
)
echo "FFMPEG_CONFIG_FLAGS=${FLAGS[@]}"
emconfigure ./configure "${FLAGS[@]}"

build-ffmpeg.sh

#!/bin/bash

set -eo pipefail
source $(dirname $0)/var.sh

if [[ "$FFMPEG_ST" != "yes" ]]; then
  mkdir -p wasm/packages/core/dist
  EXTRA_FLAGS=(
    -pthread
    -s USE_PTHREADS=1                             # enable pthreads support
    -s PROXY_TO_PTHREAD=1                         # detach main() from browser/UI main thread
    -o wasm/packages/core/dist/ffmpeg-core.js
  )
else
  mkdir -p wasm/packages/core-st/dist
  EXTRA_FLAGS=(
    -o wasm/packages/core-st/dist/ffmpeg-core.js
  )
fi
FLAGS=(
  -I. -I./fftools -I$BUILD_DIR/include
  -Llibavcodec -Llibavdevice -Llibavfilter -Llibavformat -Llibavresample -Llibavutil -Llibass -Llibpostproc -Llibswscale -Llibswresample -L$BUILD_DIR/lib
  -Wno-deprecated-declarations -Wno-pointer-sign -Wno-implicit-int-float-conversion -Wno-switch -Wno-parentheses -Qunused-arguments
  -lavutil -lm -lwavpack -lmp3lame -lvorbis -lvorbisenc -lvorbisfile -logg -lopus
  fftools/ffmpeg_opt.c fftools/ffmpeg_filter.c fftools/ffmpeg_hw.c fftools/cmdutils.c fftools/ffmpeg.c
  -s USE_SDL=2                                  # use SDL2
  -s INVOKE_RUN=0                               # not to run the main() in the beginning
  -s EXIT_RUNTIME=1                             # exit runtime after execution
  -s MODULARIZE=1                               # use modularized version to be more flexible
  -s EXPORT_NAME="createFFmpegCore"             # assign export name for browser
  -s EXPORTED_FUNCTIONS="[_main]"  # export main and proxy_main funcs
  -s EXPORTED_RUNTIME_METHODS="[FS, cwrap, ccall, setValue, writeAsciiToMemory]"   # export preamble funcs
  -s INITIAL_MEMORY=2146435072                  # 64 KB * 1024 * 16 * 2047 = 2146435072 bytes ~= 2 GB
  --pre-js wasm/src/pre.js
  --post-js wasm/src/post.js
  $OPTIM_FLAGS
  ${EXTRA_FLAGS[@]}
)

echo "FFMPEG_EM_FLAGS=${FLAGS[@]}"
emmake make -j
emcc "${FLAGS[@]}"

ERROR on build-ffmpeg:

error: undefined symbol: av_bsf_free (referenced by top-level compiled C/C++ code)
warning: Link with `-s LLD_REPORT_UNDEFINED` to get more information on undefined symbols
warning: To disable errors for undefined symbols use `-s ERROR_ON_UNDEFINED_SYMBOLS=0`
warning: _av_bsf_free may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_bsf_get_by_name (referenced by top-level compiled C/C++ code)
warning: _av_bsf_get_by_name may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_bsf_get_class (referenced by top-level compiled C/C++ code)
warning: _av_bsf_get_class may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_bsf_init (referenced by top-level compiled C/C++ code)
warning: _av_bsf_init may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_bsf_iterate (referenced by top-level compiled C/C++ code)
warning: _av_bsf_iterate may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_bsf_list_parse_str (referenced by top-level compiled C/C++ code)
warning: _av_bsf_list_parse_str may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_bsf_receive_packet (referenced by top-level compiled C/C++ code)
warning: _av_bsf_receive_packet may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_bsf_send_packet (referenced by top-level compiled C/C++ code)
warning: _av_bsf_send_packet may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_buffersink_get_channel_layout (referenced by top-level compiled C/C++ code)
warning: _av_buffersink_get_channel_layout may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_buffersink_get_channels (referenced by top-level compiled C/C++ code)
warning: _av_buffersink_get_channels may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_buffersink_get_format (referenced by top-level compiled C/C++ code)
warning: _av_buffersink_get_format may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_buffersink_get_frame_flags (referenced by top-level compiled C/C++ code)
warning: _av_buffersink_get_frame_flags may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_buffersink_get_frame_rate (referenced by top-level compiled C/C++ code)
warning: _av_buffersink_get_frame_rate may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_buffersink_get_h (referenced by top-level compiled C/C++ code)
warning: _av_buffersink_get_h may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_buffersink_get_hw_frames_ctx (referenced by top-level compiled C/C++ code)
warning: _av_buffersink_get_hw_frames_ctx may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_buffersink_get_sample_aspect_ratio (referenced by top-level compiled C/C++ code)
warning: _av_buffersink_get_sample_aspect_ratio may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_buffersink_get_sample_rate (referenced by top-level compiled C/C++ code)
warning: _av_buffersink_get_sample_rate may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_buffersink_get_time_base (referenced by top-level compiled C/C++ code)
warning: _av_buffersink_get_time_base may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_buffersink_get_type (referenced by top-level compiled C/C++ code)
warning: _av_buffersink_get_type may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_buffersink_get_w (referenced by top-level compiled C/C++ code)
warning: _av_buffersink_get_w may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_buffersink_set_frame_size (referenced by top-level compiled C/C++ code)
warning: _av_buffersink_set_frame_size may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_buffersrc_add_frame (referenced by top-level compiled C/C++ code)
warning: _av_buffersrc_add_frame may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_buffersrc_add_frame_flags (referenced by top-level compiled C/C++ code)
warning: _av_buffersrc_add_frame_flags may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_buffersrc_close (referenced by top-level compiled C/C++ code)
warning: _av_buffersrc_close may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_buffersrc_get_nb_failed_requests (referenced by top-level compiled C/C++ code)
warning: _av_buffersrc_get_nb_failed_requests may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_buffersrc_parameters_alloc (referenced by top-level compiled C/C++ code)
warning: _av_buffersrc_parameters_alloc may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_buffersrc_parameters_set (referenced by top-level compiled C/C++ code)
warning: _av_buffersrc_parameters_set may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_codec_get_id (referenced by top-level compiled C/C++ code)
warning: _av_codec_get_id may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_codec_get_tag2 (referenced by top-level compiled C/C++ code)
warning: _av_codec_get_tag2 may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_codec_is_decoder (referenced by top-level compiled C/C++ code)
warning: _av_codec_is_decoder may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_codec_is_encoder (referenced by top-level compiled C/C++ code)
warning: _av_codec_is_encoder may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_codec_iterate (referenced by top-level compiled C/C++ code)
warning: _av_codec_iterate may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_demuxer_iterate (referenced by top-level compiled C/C++ code)
warning: _av_demuxer_iterate may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_dump_format (referenced by top-level compiled C/C++ code)
warning: _av_dump_format may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_filename_number_test (referenced by top-level compiled C/C++ code)
warning: _av_filename_number_test may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_filter_iterate (referenced by top-level compiled C/C++ code)
warning: _av_filter_iterate may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_find_input_format (referenced by top-level compiled C/C++ code)
warning: _av_find_input_format may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_get_audio_frame_duration (referenced by top-level compiled C/C++ code)
warning: _av_get_audio_frame_duration may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_get_exact_bits_per_sample (referenced by top-level compiled C/C++ code)
warning: _av_get_exact_bits_per_sample may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_guess_codec (referenced by top-level compiled C/C++ code)
warning: _av_guess_codec may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_guess_format (referenced by top-level compiled C/C++ code)
warning: _av_guess_format may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_guess_frame_rate (referenced by top-level compiled C/C++ code)
warning: _av_guess_frame_rate may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_init_packet (referenced by top-level compiled C/C++ code)
warning: _av_init_packet may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_input_audio_device_next (referenced by top-level compiled C/C++ code)
warning: _av_input_audio_device_next may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_input_video_device_next (referenced by top-level compiled C/C++ code)
warning: _av_input_video_device_next may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_interleaved_write_frame (referenced by top-level compiled C/C++ code)
warning: _av_interleaved_write_frame may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_muxer_iterate (referenced by top-level compiled C/C++ code)
warning: _av_muxer_iterate may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_new_program (referenced by top-level compiled C/C++ code)
warning: _av_new_program may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_output_audio_device_next (referenced by top-level compiled C/C++ code)
warning: _av_output_audio_device_next may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_output_video_device_next (referenced by top-level compiled C/C++ code)
warning: _av_output_video_device_next may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_packet_get_side_data (referenced by top-level compiled C/C++ code)
warning: _av_packet_get_side_data may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_packet_make_refcounted (referenced by top-level compiled C/C++ code)
warning: _av_packet_make_refcounted may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_packet_move_ref (referenced by top-level compiled C/C++ code)
warning: _av_packet_move_ref may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_packet_new_side_data (referenced by top-level compiled C/C++ code)
warning: _av_packet_new_side_data may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_packet_ref (referenced by top-level compiled C/C++ code)
warning: _av_packet_ref may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_packet_rescale_ts (referenced by top-level compiled C/C++ code)
warning: _av_packet_rescale_ts may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_packet_unref (referenced by top-level compiled C/C++ code)
warning: _av_packet_unref may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_pkt_dump_log2 (referenced by top-level compiled C/C++ code)
warning: _av_pkt_dump_log2 may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_program_add_stream_index (referenced by top-level compiled C/C++ code)
warning: _av_program_add_stream_index may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_read_frame (referenced by top-level compiled C/C++ code)
warning: _av_read_frame may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_sdp_create (referenced by top-level compiled C/C++ code)
warning: _av_sdp_create may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_stream_get_codec_timebase (referenced by top-level compiled C/C++ code)
warning: _av_stream_get_codec_timebase may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_stream_get_end_pts (referenced by top-level compiled C/C++ code)
warning: _av_stream_get_end_pts may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_stream_get_parser (referenced by top-level compiled C/C++ code)
warning: _av_stream_get_parser may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_stream_get_side_data (referenced by top-level compiled C/C++ code)
warning: _av_stream_get_side_data may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_stream_new_side_data (referenced by top-level compiled C/C++ code)
warning: _av_stream_new_side_data may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: av_write_trailer (referenced by top-level compiled C/C++ code)
warning: _av_write_trailer may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avcodec_alloc_context3 (referenced by top-level compiled C/C++ code)
warning: _avcodec_alloc_context3 may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avcodec_close (referenced by top-level compiled C/C++ code)
warning: _avcodec_close may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avcodec_configuration (referenced by top-level compiled C/C++ code)
warning: _avcodec_configuration may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avcodec_copy_context (referenced by top-level compiled C/C++ code)
warning: _avcodec_copy_context may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avcodec_decode_subtitle2 (referenced by top-level compiled C/C++ code)
warning: _avcodec_decode_subtitle2 may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avcodec_default_get_buffer2 (referenced by top-level compiled C/C++ code)
warning: _avcodec_default_get_buffer2 may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avcodec_descriptor_get (referenced by top-level compiled C/C++ code)
warning: _avcodec_descriptor_get may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avcodec_descriptor_get_by_name (referenced by top-level compiled C/C++ code)
warning: _avcodec_descriptor_get_by_name may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avcodec_descriptor_next (referenced by top-level compiled C/C++ code)
warning: _avcodec_descriptor_next may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avcodec_encode_subtitle (referenced by top-level compiled C/C++ code)
warning: _avcodec_encode_subtitle may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avcodec_find_best_pix_fmt_of_2 (referenced by top-level compiled C/C++ code)
warning: _avcodec_find_best_pix_fmt_of_2 may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avcodec_find_decoder (referenced by top-level compiled C/C++ code)
warning: _avcodec_find_decoder may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avcodec_find_decoder_by_name (referenced by top-level compiled C/C++ code)
warning: _avcodec_find_decoder_by_name may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avcodec_find_encoder (referenced by top-level compiled C/C++ code)
warning: _avcodec_find_encoder may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avcodec_find_encoder_by_name (referenced by top-level compiled C/C++ code)
warning: _avcodec_find_encoder_by_name may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avcodec_flush_buffers (referenced by top-level compiled C/C++ code)
warning: _avcodec_flush_buffers may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avcodec_free_context (referenced by top-level compiled C/C++ code)
warning: _avcodec_free_context may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avcodec_get_class (referenced by top-level compiled C/C++ code)
warning: _avcodec_get_class may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avcodec_get_hw_config (referenced by top-level compiled C/C++ code)
warning: _avcodec_get_hw_config may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avcodec_get_name (referenced by top-level compiled C/C++ code)
warning: _avcodec_get_name may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avcodec_open2 (referenced by top-level compiled C/C++ code)
warning: _avcodec_open2 may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avcodec_parameters_alloc (referenced by top-level compiled C/C++ code)
warning: _avcodec_parameters_alloc may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avcodec_parameters_copy (referenced by top-level compiled C/C++ code)
warning: _avcodec_parameters_copy may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avcodec_parameters_free (referenced by top-level compiled C/C++ code)
warning: _avcodec_parameters_free may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avcodec_parameters_from_context (referenced by top-level compiled C/C++ code)
warning: _avcodec_parameters_from_context may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avcodec_parameters_to_context (referenced by top-level compiled C/C++ code)
warning: _avcodec_parameters_to_context may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avcodec_receive_frame (referenced by top-level compiled C/C++ code)
warning: _avcodec_receive_frame may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avcodec_receive_packet (referenced by top-level compiled C/C++ code)
warning: _avcodec_receive_packet may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avcodec_send_frame (referenced by top-level compiled C/C++ code)
warning: _avcodec_send_frame may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avcodec_send_packet (referenced by top-level compiled C/C++ code)
warning: _avcodec_send_packet may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avcodec_version (referenced by top-level compiled C/C++ code)
warning: _avcodec_version may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avdevice_configuration (referenced by top-level compiled C/C++ code)
warning: _avdevice_configuration may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avdevice_free_list_devices (referenced by top-level compiled C/C++ code)
warning: _avdevice_free_list_devices may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avdevice_list_input_sources (referenced by top-level compiled C/C++ code)
warning: _avdevice_list_input_sources may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avdevice_list_output_sinks (referenced by top-level compiled C/C++ code)
warning: _avdevice_list_output_sinks may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avdevice_register_all (referenced by top-level compiled C/C++ code)
warning: _avdevice_register_all may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avdevice_version (referenced by top-level compiled C/C++ code)
warning: _avdevice_version may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avfilter_configuration (referenced by top-level compiled C/C++ code)
warning: _avfilter_configuration may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avfilter_get_by_name (referenced by top-level compiled C/C++ code)
warning: _avfilter_get_by_name may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avfilter_get_class (referenced by top-level compiled C/C++ code)
warning: _avfilter_get_class may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avfilter_graph_alloc (referenced by top-level compiled C/C++ code)
warning: _avfilter_graph_alloc may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avfilter_graph_alloc_filter (referenced by top-level compiled C/C++ code)
warning: _avfilter_graph_alloc_filter may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avfilter_graph_config (referenced by top-level compiled C/C++ code)
warning: _avfilter_graph_config may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avfilter_graph_create_filter (referenced by top-level compiled C/C++ code)
warning: _avfilter_graph_create_filter may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avfilter_graph_free (referenced by top-level compiled C/C++ code)
warning: _avfilter_graph_free may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avfilter_graph_parse2 (referenced by top-level compiled C/C++ code)
warning: _avfilter_graph_parse2 may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avfilter_graph_queue_command (referenced by top-level compiled C/C++ code)
warning: _avfilter_graph_queue_command may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avfilter_graph_request_oldest (referenced by top-level compiled C/C++ code)
warning: _avfilter_graph_request_oldest may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avfilter_graph_send_command (referenced by top-level compiled C/C++ code)
warning: _avfilter_graph_send_command may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avfilter_graph_set_auto_convert (referenced by top-level compiled C/C++ code)
warning: _avfilter_graph_set_auto_convert may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avfilter_init_str (referenced by top-level compiled C/C++ code)
warning: _avfilter_init_str may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avfilter_inout_free (referenced by top-level compiled C/C++ code)
warning: _avfilter_inout_free may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avfilter_link (referenced by top-level compiled C/C++ code)
warning: _avfilter_link may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avfilter_pad_count (referenced by top-level compiled C/C++ code)
warning: _avfilter_pad_count may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avfilter_pad_get_name (referenced by top-level compiled C/C++ code)
warning: _avfilter_pad_get_name may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avfilter_pad_get_type (referenced by top-level compiled C/C++ code)
warning: _avfilter_pad_get_type may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avfilter_version (referenced by top-level compiled C/C++ code)
warning: _avfilter_version may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avformat_alloc_context (referenced by top-level compiled C/C++ code)
warning: _avformat_alloc_context may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avformat_alloc_output_context2 (referenced by top-level compiled C/C++ code)
warning: _avformat_alloc_output_context2 may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avformat_close_input (referenced by top-level compiled C/C++ code)
warning: _avformat_close_input may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avformat_configuration (referenced by top-level compiled C/C++ code)
warning: _avformat_configuration may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avformat_find_stream_info (referenced by top-level compiled C/C++ code)
warning: _avformat_find_stream_info may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avformat_free_context (referenced by top-level compiled C/C++ code)
warning: _avformat_free_context may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avformat_get_class (referenced by top-level compiled C/C++ code)
warning: _avformat_get_class may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avformat_match_stream_specifier (referenced by top-level compiled C/C++ code)
warning: _avformat_match_stream_specifier may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avformat_network_deinit (referenced by top-level compiled C/C++ code)
warning: _avformat_network_deinit may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avformat_network_init (referenced by top-level compiled C/C++ code)
warning: _avformat_network_init may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avformat_new_stream (referenced by top-level compiled C/C++ code)
warning: _avformat_new_stream may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avformat_open_input (referenced by top-level compiled C/C++ code)
warning: _avformat_open_input may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avformat_query_codec (referenced by top-level compiled C/C++ code)
warning: _avformat_query_codec may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avformat_seek_file (referenced by top-level compiled C/C++ code)
warning: _avformat_seek_file may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avformat_transfer_internal_stream_timing_info (referenced by top-level compiled C/C++ code)
warning: _avformat_transfer_internal_stream_timing_info may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avformat_version (referenced by top-level compiled C/C++ code)
warning: _avformat_version may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avformat_write_header (referenced by top-level compiled C/C++ code)
warning: _avformat_write_header may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avio_check (referenced by top-level compiled C/C++ code)
warning: _avio_check may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avio_close (referenced by top-level compiled C/C++ code)
warning: _avio_close may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avio_close_dyn_buf (referenced by top-level compiled C/C++ code)
warning: _avio_close_dyn_buf may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avio_closep (referenced by top-level compiled C/C++ code)
warning: _avio_closep may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avio_enum_protocols (referenced by top-level compiled C/C++ code)
warning: _avio_enum_protocols may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avio_find_protocol_name (referenced by top-level compiled C/C++ code)
warning: _avio_find_protocol_name may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avio_flush (referenced by top-level compiled C/C++ code)
warning: _avio_flush may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avio_open (referenced by top-level compiled C/C++ code)
warning: _avio_open may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avio_open2 (referenced by top-level compiled C/C++ code)
warning: _avio_open2 may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avio_open_dyn_buf (referenced by top-level compiled C/C++ code)
warning: _avio_open_dyn_buf may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avio_print_string_array (referenced by top-level compiled C/C++ code)
warning: _avio_print_string_array may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avio_printf (referenced by top-level compiled C/C++ code)
warning: _avio_printf may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avio_protocol_get_class (referenced by top-level compiled C/C++ code)
warning: _avio_protocol_get_class may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avio_r8 (referenced by top-level compiled C/C++ code)
warning: _avio_r8 may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avio_read (referenced by top-level compiled C/C++ code)
warning: _avio_read may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avio_seek (referenced by top-level compiled C/C++ code)
warning: _avio_seek may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avio_size (referenced by top-level compiled C/C++ code)
warning: _avio_size may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avio_w8 (referenced by top-level compiled C/C++ code)
warning: _avio_w8 may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avio_write (referenced by top-level compiled C/C++ code)
warning: _avio_write may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: avsubtitle_free (referenced by top-level compiled C/C++ code)
warning: _avsubtitle_free may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: swr_alloc (referenced by top-level compiled C/C++ code)
warning: _swr_alloc may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: swr_free (referenced by top-level compiled C/C++ code)
warning: _swr_free may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: swr_get_class (referenced by top-level compiled C/C++ code)
warning: _swr_get_class may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: swresample_configuration (referenced by top-level compiled C/C++ code)
warning: _swresample_configuration may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: swresample_version (referenced by top-level compiled C/C++ code)
warning: _swresample_version may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: sws_alloc_context (referenced by top-level compiled C/C++ code)
warning: _sws_alloc_context may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: sws_freeContext (referenced by top-level compiled C/C++ code)
warning: _sws_freeContext may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: sws_get_class (referenced by top-level compiled C/C++ code)
warning: _sws_get_class may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: sws_isSupportedInput (referenced by top-level compiled C/C++ code)
warning: _sws_isSupportedInput may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: sws_isSupportedOutput (referenced by top-level compiled C/C++ code)
warning: _sws_isSupportedOutput may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: swscale_configuration (referenced by top-level compiled C/C++ code)
warning: _swscale_configuration may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: swscale_version (referenced by top-level compiled C/C++ code)
warning: _swscale_version may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
Error: Aborting compilation due to previous errors
emcc: error: '/emsdk/node/14.15.5_64bit/bin/node /emsdk/upstream/emscripten/src/compiler.js /tmp/tmpadxazvty.txt' failed (returned 1)
Error: Process completed with exit code 1.

Please, help me

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions