差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
public:it:spice [2020/12/03 11:06] – oakfire | public:it:spice [2022/08/03 09:04] (当前版本) – [1.3 流传输] oakfire | ||
---|---|---|---|
行 1: | 行 1: | ||
====== SPICE====== | ====== SPICE====== | ||
* [[https:// | * [[https:// | ||
- | * [[https://www.jianshu.com/p/8bfc1bc2fa9f|SPICE 协议的理解]] | + | * [[https://gitlab.freedesktop.org/spice/spice-protocol|SPICE 协议文档]] |
* [[https:// | * [[https:// | ||
* [[https:// | * [[https:// | ||
+ | * {{ : | ||
+ | |||
+ | ===== 1.流媒体重定向 ===== | ||
+ | ==== 1.1 重定向原理 ==== | ||
+ | |||
+ | * SPICE VDI虚拟机视频播放流程:{{ : | ||
+ | * 理想的重定向流程:{{ : | ||
+ | ==== 1.2 截流的可行性 ==== | ||
+ | |||
+ | === 1.2.1 视频播放器 === | ||
+ | |||
+ | * 利用directshow架构开源播放器来自制:便于在解码时截流,便于修改播放区域渲染,但用户只能使用此播放器播放视频 | ||
+ | * 自制directshow解码器并hook或修改流行播放器的解码器设置:便于截流、修改渲染,但需对每一款播放器进行研究适配,大概率需要侵入式修改(杀软会报警) | ||
+ | * Hook MF架构里的 Media Sources 来截取流:只适用使用MF架构的wmp播放器(国内基本没人用), | ||
+ | * 基于WDDM驱动实现虚拟 DXVA 硬解:适用所有播放器(仍然需针对播放器来设置解码器), | ||
+ | === 1.2.2 浏览器 === | ||
+ | |||
+ | * 利用chrome开源浏览器来自制浏览器,在解码层进行截流,并方便修改播放区域渲染,但难度大 | ||
+ | * chrome 播放标签video的架构:https:// | ||
+ | * 利用chrome插件截流:便于实现 | ||
+ | * m3u8 等未加密流可直接获取源地址 | ||
+ | * 从 [[https:// | ||
+ | |||
+ | ==== 1.3 流传输 ==== | ||
+ | |||
+ | * 虚拟机与客户端(盒子)可 tcp 连接:直接推流 | ||
+ | * 不可连接:映射usb字符设备进行流传输,或开辟 spice 新通道 (未实现) | ||
+ | * [[https:// | ||
+ | * 参考 [[https:// | ||
+ | * 参考 [[https:// | ||
+ | * [[.: | ||
+ | * [[.: | ||
+ | |||
+ | |||
+ | ===== 2.代码解析 ===== | ||
+ | ==== 2.1 spice-streaming-agent ==== | ||
+ | * [[https:// | ||
+ | * host服务器端要使用spice-server >= 0.14.1,如果版本没升级,其它都配置了,运行spice-streaming-agent时也会报错:< | ||
+ | * windows spice client(virt-viewer) 的 display2 会显示为黑屏,原因参考[[https:// | ||
+ | |||
+ | === 2.1.1 编译 === | ||
+ | * Ubuntu20.04 | ||
+ | * 安装 meson: <code bash> | ||
+ | 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 | ||
+ | </ | ||
+ | * 编译 <code bash> | ||
+ | git clone https:// | ||
+ | cd spice-streaming-agent | ||
+ | git submodule update --init --recursive | ||
+ | meson build && cd build | ||
+ | ninja | ||
+ | # 生成 build/ | ||
+ | </ | ||
+ | * spice-common 的 meson.build 里对 python 模块 pyparsing 的检查代码需要修改,详见 [[https:// | ||
+ | |||
+ | |||