рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдЕрдиреБрд╡рд╛рджрд┐рдд рднрд╛рдЧреЛрдВ рдХреА рд╕реВрдЪреА:
- рдЦрд╛рдирд╛ рдкрдХрд╛рдиреЗ
- Emscripten рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рди (рдЖрдк рдпрд╣рд╛рдБ рд╣реИрдВ)
- рдХрдиреНрд╡рд░реНрдЯ AVI рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП mp4
рдЗрд╕ рднрд╛рдЧ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдирд╛, рд╕рд╛рдордЧреНрд░реА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП рдкрдврд╝рдиреЗ рдХреЗ рджреМрд░рд╛рди Google рд╕реЗ рд╕рдВрдХреЛрдЪ рди рдХрд░реЗрдВ, рдЕрдЧрд░ рдЖрдкрдХреЛ рд╕рдордЭ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рддрд╛рдХрд┐ рдЖрдк рдЕрдкрдиреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХреЗрдВред
рдЗрд╕ рднрд╛рдЧ рдореЗрдВ рд╣рдо рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ:
- рдбреЙрдХрд░ рдореЗрдВ Emscripten рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╛рддрд╛рд╡рд░рдг рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВ
- Emconfigure рдФрд░ emmake рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
- Emscripten рдХреЗ рд╕рд╛рде FFmpeg рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд░реЗрдВ
рдбреЙрдХрд░ рдореЗрдВ Emscripten рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╛рддрд╛рд╡рд░рдг рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВ
рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ FFmpeg рдХреЛ gcc рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдФрд░ рдбреЙрдХрдЯрд░ рдЫрд╡рд┐ рдХреЛ emscripten рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВ trzeci / emscripten рд╕рдВрд╕реНрдХрд░рдг 1.38.45 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛:
$ docker pull trzeci/emscripten:1.38.45
рдЪреВрдВрдХрд┐ рдЫрд╡рд┐ рдореЗрдВ рд▓рдЧрднрдЧ 1 рдЬреАрдмреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред
рдЕрдм рд╣рдо рдкрд░реАрдХреНрд╖рдг рдФрд░ рддреНрд░реБрдЯрд┐ рджреНрд╡рд╛рд░рд╛ рдПрдлрдПрдордПрд╕рдПрдордкреА рдХреЛ рдИрд╕реНрдХреНрд░рд┐рдкреНрдЯрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд╛рдПрдВрдЧреЗ, рдЬрд┐рд╕рдореЗрдВ рджреГрдврд╝рддрд╛ рдФрд░ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдмрдбрд╝реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред Emscripten рдХреЗ рд╕рд╛рде рдХрдВрдЯреЗрдирд░ рдЪрд▓рд╛рдПрдБ рдФрд░ FFmpeg рд╕реНрд░реЛрддреЛрдВ рдХреЛ / src рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдорд╛рдЙрдВрдЯ рдХрд░реЗрдВред
# , FFmpeg $ docker run -it \ -v $PWD:/src \ trzeci/emscripten:1.38.45 \ /bin/bash
рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░, рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреБрдЫ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП ls --color рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
Emconfigure рдФрд░ emmake рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рд╕рдВрдХрд▓рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд░реЗрдВ
рдЪрд▓реЛ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ ред/configure --disable-x86asm , emscripten рдореЗрдВ рдЗрд╕реЗ emconfigure рдХреЗ рд╕рд╛рде рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред/configure --disable-x86asm рдХрдорд╛рдВрдб ред (Emconfigure рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ)
$ emconfigure ./configure --disable-x86asm
рдФрд░ рдЬрдм рд╕реЗ рд╣рдордиреЗ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рджреЗрдЦреА, рддреЛ рдпрд╣ рдХреЗрд╡рд▓ emmake -j4 рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдФрд░ рдкреНрд░рддрд┐рд╖реНрдард┐рдд FFmpeg.js рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ? рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдирд╣реАрдВред Emconfigure рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ gcc рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ emcc (рдпрд╛ g ++ рдХреЗ рд╕рд╛рде em ++) рдХреЗ рд╕рд╛рде рдмрджрд▓рдирд╛, рд▓реЗрдХрд┐рди ./configure рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЕрднреА рднреА gcc рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИред
root@57ab95def750:/src# emconfigure ./configure --disable-x86asm emscripten sdl2-config called with /emsdk_portable/emscripten/tag-1.38.45/system/bin/sdl2-config --cflags emscripten sdl2-config called with /emsdk_portable/emscripten/tag-1.38.45/system/bin/sdl2-config --libs install prefix /usr/local source path . C compiler gcc # emcc C library glibc ARCH x86 (generic) big-endian no runtime cpu detection yes standalone assembly no x86 assembler nasm
рдХрд┐рд╕реА рднреА рд╕реНрд╡рдЪрд╛рд▓рди рдХреА рдЕрдкрдиреА рд╕реАрдорд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдореЗрдВ рд╕рдм рдХреБрдЫ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдорд╛рд░реА рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рддрд░реНрдХ рд╣реИрдВ:
$ ./configure --help
рдЯреВрд▓рдЪреИрди рд╡рд┐рдХрд▓реНрдк рдЕрдиреБрднрд╛рдЧ рдХреЗ рддрд╣рдд, рд╣рдо рд╕рдВрдХрд▓рдХ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рджреЗрдЦрддреЗ рд╣реИрдВред
root@57ab95def750:/src# ./configure --help Usage: configure [options] Options: [defaults in brackets after descriptions]Help options: ... Toolchain options: ... --nm=NM use nm tool NM [nm -g] --ar=AR use archive tool AR [ar] --as=AS use assembler AS [] --ln_s=LN_S use symbolic link tool LN_S [ln -s -f] --strip=STRIP use strip tool STRIP [strip] --windres=WINDRES use windows resource compiler WINDRES [windres] --x86asmexe=EXE use nasm-compatible assembler EXE [nasm] --cc=CC use C compiler CC [gcc] --cxx=CXX use C compiler CXX [g++] --objcc=OCC use ObjC compiler OCC [gcc] --dep-cc=DEPCC use dependency generator DEPCC [gcc] --nvcc=NVCC use Nvidia CUDA compiler NVCC [nvcc] --ld=LD use linker LD [] ...
рдЖрдЗрдП рдЗрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдЗрдореНрд╕реНрдХреНрд░рд┐рдкреНрдЯреЗрди рдореЗрдВ рдХрд░реЗрдВ
$ emconfigure ./configure \ --disable-x86asm \ --nm="llvm-nm -g" \ --ar=emar \ --cc=emcc \ --cxx=em++ \ --objcc=emcc \ --dep-cc=emcc
рдЕрдм рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ ред/configure рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣рдореЗрдВ emcc рдорд┐рд▓рддрд╛ рд╣реИред
root@57ab95def750:/src# emconfigure ... emscripten sdl2-config called with /emsdk_portable/emscripten/tag-1.38.45/system/bin/sdl2-config --cflags emscripten sdl2-config called with /emsdk_portable/emscripten/tag-1.38.45/system/bin/sdl2-config --libs install prefix /usr/local source path . C compiler emcc # emcc C library ARCH x86 (generic) big-endian no runtime cpu detection yes standalone assembly no
рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдХрд▓рди рдХреИрд╕реЗ рдЬрд╛рддрд╛ рд╣реИред
$ emmake make -j4
рдФрд░ рддреБрд░рдВрдд рдПрдХ рдЧрд▓рддреА ...
root@57ab95def750:/src# emmake make -j4 ... ./libavutil/x86/timer.h:39:24: error: invalid output constraint '=a' in asm : "=a" (a), "=d" (d)); ^
рд╕рдВрджреЗрд╢ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред Open ./libavutil/x86/timer.h рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рдорд╕реНрдпрд╛ x86 рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓рд░ рдореЗрдВ рд╣реИ, рдЬреЛ WebAssembly рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджреЗрдВред
$ emconfigure ./configure \ --disable-x86asm \ --disable-inline-asm \ # asm --nm="llvm-nm -g" \ --ar=emar \ --cc=emcc \ --cxx=em++ \ --objcc=emcc \ --dep-cc=emcc
рдЖрдЗрдП рдлрд┐рд░ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
$ emmake make -j4
рдЕрдЧрд▓реА рддреНрд░реБрдЯрд┐ рддрдХ рд╕рдВрдХрд▓рди рдЬрд╛рд░реА рд╣реИред
root@57ab95def750:/src# emmake make -j4 ... AR libavdevice/libavdevice.a AR libavfilter/libavfilter.a AR libavformat/libavformat.a AR libavcodec/libavcodec.a AR libswresample/libswresample.a AR libswscale/libswscale.a AR libavutil/libavutil.a HOSTLD doc/print_options GENTEXI doc/avoptions_format.texi /bin/sh: 1: doc/print_options: Exec format error doc/Makefile:59: recipe for target 'doc/avoptions_format.texi' failed make: *** [doc/avoptions_format.texi] Error 2 make: *** Waiting for unfinished jobs....
рдкреНрд░рд▓реЗрдЦрди рдХреА рдкреАрдврд╝реА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ, рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджреЗрдВред
$ emconfigure ./configure \ --disable-x86asm \ --disable-inline-asm \ --disable-doc \ # --nm="llvm-nm -g" \ --ar=emar \ --cc=emcc \ --cxx=em++ \ --objcc=emcc \ --dep-cc=emcc
рд╣рдо рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
$ emmake make -j4
рдЕрдм рд╕реНрдЯреНрд░рд┐рдк рд╕реНрдЯреЗрдЬ рдкрд░ рдПрд░рд░ рдЖ рдЧрдИ рд╣реИред
root@57ab95def750:/src# emmake make -j4 ... STRIP ffmpeg STRIP ffprobe strip:ffmpeg_g: File format not recognized strip:ffprobe_g: File format not recognized Makefile:101: recipe for target 'ffmpeg' failed make: *** [ffmpeg] Error 1 make: *** Waiting for unfinished jobs.... Makefile:101: recipe for target 'ffprobe' failed make: *** [ffprobe] Error 1
рдЪреВрдВрдХрд┐ рджреЗрд╢реА рдлрд╕рд▓ WebAssembly рдХреЗ рд╣рдорд╛рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдЕрдХреНрд╖рдо рднреА рдХрд░реЗрдВрдЧреЗред
$ emconfigure ./configure \ --disable-x86asm \ --disable-inline-asm \ --disable-doc \ --disable-stripping \ # strip --nm="llvm-nm -g" \ --ar=emar \ --cc=emcc \ --cxx=em++ \ --objcc=emcc \ --dep-cc=emcc
рдЪреМрдерд╛ рдкреНрд░рдпрд╛рд╕ред
$ emmake make -j4
рдЕрдВрдд рдореЗрдВ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрд┐рдирд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдИред рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рд╣рдореЗрдВ ffmpeg рдлрд╝рд╛рдЗрд▓ рдорд┐рд▓реА, рдЬреЛ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдФрд░ рдпрд╣ рдПрдХ js рдлрд╝рд╛рдЗрд▓ (рдпрд╛ рдлрд╝рд╛рдЗрд▓ рдлрд╝рд╛рдЗрд▓) рдирд╣реАрдВ рд╣реИред Js рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ -o ffmpeg.js рдХреЛ emcc рдХрдорд╛рдВрдб рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- FFmpeg рдХрд╛ рдореЗрдХрдлрд┐рд▓ рдЦреБрдж рдмрджрд▓реЗрдВ
- рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрдХрд▓рди / рд▓рд┐рдВрдХрд┐рдВрдЧ рдЬреЛрдбрд╝реЗрдВ
рд╣рдо рджреВрд╕рд░рд╛ рд░рд╛рд╕реНрддрд╛ рдЪреБрдиреЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╕рдВрднрд╛рд╡рд┐рдд рджреБрд╖реНрдкреНрд░рднрд╛рд╡реЛрдВ рдХреЗ рдХрд╛рд░рдг FFmpeg рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдирд╣реАрдВ рдЫреВрдирд╛ рдЪрд╛рд╣рддрд╛ред рддреЛ рд╣рдо рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдореЗрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ ffmpeg рдХреИрд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рдпрд╣реАрдВ рдкрд░ рдбреНрд░рд╛рдИ рд░рди рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдХ рдСрдкреНрд╢рди рдХрд╛рдо рдЖрддрд╛ рд╣реИред
$ emmake make -n
рд╣рдо рдкреАрдврд╝реА рдЯреАрдо рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред
root@57ab95def750:/src# emmake make -n ... printf "LD\t%s\n" ffmpeg_g; emcc -Llibavcodec -Llibavdevice -Llibavfilter -Llibavformat -Llibavresample -Llibavutil -Llibpostproc -Llibswscale -Llibswresample -Wl,--as-needed -Wl,-z,noexecstack -Wl,--warn-common -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample -Qunused-arguments -o ffmpeg_g fftools/ffmpeg_opt.o fftools/ffmpeg_filter.o fftools/ffmpeg_hw.o fftools/cmdutils.o fftools/ffmpeg.o -lavdevice -lavfilter -lavformat -lavcodec -lswresample -lswscale -lavutil -lm -pthread -lm -lm -pthread -lm -lm -lm -pthread -lm printf "CP\t%s\n" ffmpeg; cp -p ffmpeg_g ffmpeg ...
рдмрд╣реБрдд рд╕рд╛рд░реА рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЪреАрдЬрд╝реЗрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЪрд▓рд┐рдП рдЕрдкреНрд░рдпреБрдХреНрдд рддрд░реНрдХреЛрдВ (рдЬреЛ рдЖрдк рд╕рдВрдХрд▓рди рдХреЗ рдЕрдВрдд рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗ) рдХреЛ рд╣рдЯрд╛ рджреЗрдВ, рдереЛрдбрд╝рд╛ рд╕рд╛рдл рдХрд░реЗрдВ рдФрд░ ffmpeg_js рдХреЗ рд▓рд┐рдП ffmpeg_g рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВред
$ emcc \ -Llibavcodec -Llibavdevice -Llibavfilter -Llibavformat -Llibavresample -Llibavutil -Llibpostproc -Llibswscale -Llibswresample \ -Qunused-arguments \ -o ffmpeg.js fftools/ffmpeg_opt.o fftools/ffmpeg_filter.o fftools/ffmpeg_hw.o fftools/cmdutils.o fftools/ffmpeg.o \ -lavdevice -lavfilter -lavformat -lavcodec -lswresample -lswscale -lavutil -lm -pthread
рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛, рд▓реЗрдХрд┐рди рд╣рдо рд╕реНрдореГрддрд┐ рдХреА рдХрдореА рдХреА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдВрдЧреЗред
root@57ab95def750:/src# emcc ... shared:ERROR: Memory is not large enough for static data (11794000) plus the stack (5242880), please increase TOTAL_MEMORY (16777216) to at least 17037904
рд╕реНрдореГрддрд┐ рдЖрдХрд╛рд░ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП TOTAL_MEMORY рддрд░реНрдХ рдЬреЛрдбрд╝реЗрдВ (33554432 рдмрд╛рдЗрдЯреНрд╕: = 32 рдПрдордмреА)ред
$ emcc \ -Llibavcodec -Llibavdevice -Llibavfilter -Llibavformat -Llibavresample -Llibavutil -Llibpostproc -Llibswscale -Llibswresample \ -Qunused-arguments \ -o ffmpeg.js fftools/ffmpeg_opt.o fftools/ffmpeg_filter.o fftools/ffmpeg_hw.o fftools/cmdutils.o fftools/ffmpeg.o \ -lavdevice -lavfilter -lavformat -lavcodec -lswresample -lswscale -lavutil -lm -pthread \ -s TOTAL_MEMORY=33554432
рдЕрдВрдд рдореЗрдВ рд╣рдореЗрдВ рд╣рдорд╛рд░реА js рдФрд░ wasm рдлрд╛рдЗрд▓реЗрдВ рдорд┐рд▓реАрдВ
root@57ab95def750:/src# ls ffmpeg* ffmpeg ffmpeg.js ffmpeg.js.mem ffmpeg.wasm ffmpeg.worker.js ffmpeg_g
FFmpeg.js рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП test.html рдмрдирд╛рдПрдВ
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <script src="./ffmpeg.js"></script> </head> <body> </body> </html>
рдЪрд▓рд┐рдП рдЖрд╕рд╛рди рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ ( python2 -m SimpleHTTPServer рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдХреЗ ) рдФрд░ рдкрд░рд┐рдгрд╛рдорд┐рдд рдкреГрд╖реНрда рдЦреЛрд▓реЗрдВ ( http: // localhost: 8000 / test.html ) , рдлрд┐рд░ Chrome DevTools рдЦреЛрд▓реЗрдВред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, FFmpeg рдПрдХ рдкрд╛рдк рдХреЗ рд╕рд╛рде рдЖрдзреЗ рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдм рдЖрдк ffmpeg.js рдХреЛ рдЪрдордХрд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкреВрд░реА рдмрд┐рд▓реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ (build-with-docker.sh рдФрд░ build-js.sh)
ред