定位(2026-10-29 方案裁决 A1-A4): 纯 Rust、平台无关,只做「怎么连 + 收发什么」——QUIC 会话、协议 v2 认证、 视频帧流、输入上行、Ping/Pong、KeyFrameReq。解码/渲染/触摸全在 Kotlin 侧, 本 crate 不碰像素、不依赖 openh264(dev-dependency 仅验证工具用)。 设计要点 - PeerTarget::Direct 是唯一的连接形态;不做中继、不定义 Relay 变体 (《多平台架构设计》§6.1 裁决)。将来设备码+打洞只换 connect() 内部。 - 帧经容量 2 的 mpsc 交付,**不丢帧**:跳帧决策属于看得到解码器状态的消费方 (Kotlin),Rust 层丢帧会重演 R-3 教训(跳帧断参考链)。 - insecure_skip_verify=false 时明确报错而非静默放行——证书钉扎登记在方案 阶段 4,安全红线不允许默默降级。 - 双流结构与桌面 viewer 一致(流1 认证+视频,流2 输入+控制),入会即请求 IDR。 验证(headless,桌面→桌面 127.0.0.1) - 单测 3 passed(帧契约、默认配置、strict-verify 显式报错) - examples/headless_check:300 帧,seq 违例 0、keyframe 标志不符 0、 解码成功 300/300、RTT 路径工作(RTT=1ms 出现) - 全 workspace 回归:common 20 passed,构建全绿
23 lines
619 B
TOML
23 lines
619 B
TOML
[package]
|
||
name = "viewer-core"
|
||
version = "0.1.0"
|
||
edition = "2021"
|
||
|
||
# 阶段 1 先做纯 Rust 库并在桌面 headless 验证;
|
||
# UniFFI / cdylib 在下一步(Android 接入)再加,隔离未知项。
|
||
[lib]
|
||
name = "viewer_core"
|
||
crate-type = ["lib"]
|
||
|
||
[dependencies]
|
||
common = { path = "../common" }
|
||
anyhow.workspace = true
|
||
tokio.workspace = true
|
||
quinn.workspace = true
|
||
rustls.workspace = true
|
||
|
||
[dev-dependencies]
|
||
# headless_check 用软解交叉验证收到的码流合法(库本身刻意不依赖 openh264,
|
||
# 解码在 Android 侧由 MediaCodec 承担)
|
||
openh264 = { version = "0.9.9", features = ["source"] }
|