NodePlayer.js正式支持SIMD解码加速

SIMD全称Single Instruction Multiple Data,单指令多数据流,能够复制多个操作数,并把它们打包在大型寄存器的一组指令集。

以加法指令为例,单指令单数据(SISD)的CPU对加法指令译码后,执行部件先访问内存,取得第一个操作数;之后再一次访问内存,取得第二个操作数;随后才能进行求和运算。而在SIMD型的CPU中,指令译码后几个执行部件同时访问内存,一次性获得所有操作数进行运算。这个特点使SIMD特别适合于多媒体应用等数据密集型运算。

在微处理器中,单指令流多数据流技术则是一个控制器控制多个平行的处理微元,如X86中的SSE,AVX,Arm中的Beon,现在叫asimd。

NodePlayer.js正式支持SIMD解码加速_第1张图片

在js运行环境中,目前还没有完美的线程方案来利用多核解码,那么我们可以优化至少让单核进行并行运算。这是chrome91和firefox89正式带来的WebAssembly SIMD技术。

NodePlayer.js 更新v0.10.1版,利用这项技术,在高分辨率解码环境下,带来比SISD性能提升1倍以上!尤其是在高分辨率,HEVC解码下。

测试对比:

首先准备一个hevc编码,2M码率,1080分辨率,30帧的视频

ffprobe http://192.168.0.3:8000/live/enc1.flv

ffprobe version 4.3.2 Copyright (c) 2007-2021 the FFmpeg developers

  built with Apple clang version 13.0.0 (clang-1300.0.29.30)

  configuration: --enable-small --disable-doc --enable-libsrt --enable-libfreetype --enable-libspeex --enable-libx264 --enable-libx265 --enable-openssl --enable-gpl --enable-nonfree --enable-version3 --enable-libopenh264 --cc='ccache cc'

  libavutil      56. 51.100 / 56. 51.100

  libavcodec     58. 91.100 / 58. 91.100

  libavformat    58. 45.100 / 58. 45.100

  libavdevice    58. 10.100 / 58. 10.100

  libavfilter     7. 85.100 /  7. 85.100

  libswscale      5.  7.100 /  5.  7.100

  libswresample   3.  7.100 /  3.  7.100

  libpostproc    55.  7.100 / 55.  7.100

Input #0, flv, from 'http://192.168.0.3:8000/live/enc1.flv':

  Metadata:

    encoder         : Lavf57.71.100

    server          : NMS v3.14.2

  Duration: 00:00:00.00, start: 91.998000, bitrate: N/A

    Stream #0:0: Audio: aac, 48000 Hz, stereo, fltp, 128 kb/s

    Stream #0:1: Video: hevc, yuv420p(tv, bt709), 1920x1080, 2000 kb/s, 30.30 fps, 30 tbr, 1k tbn, 30 tbc

NodePlayer.js正式支持SIMD解码加速_第2张图片

可以看出,WASM版解码cpu占用90.6% ,而SIMD版解码cpu占用42.3%,达到1倍以上的性能提升!

wasm 版在线demo:NodePlayer.js wasm Demo

simd 版在线demo:NodePlayer.js SIMD Decode Demo

NodePlayer.js 文档:NodeMedia 文档系统

你可能感兴趣的:(Web,javascript,开发语言,ecmascript)