public:it:spice

SPICE

  • SPICE VDI虚拟机视频播放流程:
  • 理想的重定向流程:

1.2.1 视频播放器

  • 利用directshow架构开源播放器来自制:便于在解码时截流,便于修改播放区域渲染,但用户只能使用此播放器播放视频
  • 自制directshow解码器并hook或修改流行播放器的解码器设置:便于截流、修改渲染,但需对每一款播放器进行研究适配,大概率需要侵入式修改(杀软会报警)
  • Hook MF架构里的 Media Sources 来截取流:只适用使用MF架构的wmp播放器(国内基本没人用), 不方便修改播放区域渲染
  • 基于WDDM驱动实现虚拟 DXVA 硬解:适用所有播放器(仍然需针对播放器来设置解码器), 不方便修改播放区域渲染,实现有一定难度

1.2.2 浏览器

  • host服务器端要使用spice-server >= 0.14.1,如果版本没升级,其它都配置了,运行spice-streaming-agent时也会报错:
    spice-streaming-agent[2223]: Reading message from device failed: read() returned 0, device is closed.
  • windows spice client(virt-viewer) 的 display2 会显示为黑屏,原因参考这个issue, 只能在linux (remote-viewer) 上演示。

2.1.1 编译

  • Ubuntu20.04
  • 安装 meson:
    sudo apt install python3 python3-pip ninja-build 
    sudo pip3 install meson
    sudo pip3 install pyparsing
  • 安装依赖库:
    sudo apt install build-essential libspice-protocol-dev libssl-dev libglib2.0-dev libpixman-1-dev libopus-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libjpeg-dev libdrm-dev libxcb-xfixes0-dev libxrandr-dev
  • 编译
    git clone https://gitlab.freedesktop.org/spice/spice-streaming-agent.git
    cd spice-streaming-agent
    git submodule update --init --recursive
    meson build && cd build
    ninja
    # 生成 build/src/spice-streaming-agent
  • spice-common 的 meson.build 里对 python 模块 pyparsing 的检查代码需要修改,详见 这个commit, 否则在 meson build 时会错误报告缺失pyparing模块
  • public/it/spice.txt
  • 最后更改: 2022/08/03 09:04
  • oakfire