perf(video): 优化视频流水线并统一使用 vendored OpenSSL

使用固定采集、解码和编码线程及同步最新帧槽,减少同步异步跨界和无效 MJPEG 解码。

编码前预留消费者容量,以完整批次投递编码结果并隔离慢客户端,避免丢失 H.264 参考帧;保留 PTS 修正,不增加 IDR 节流。

复用 Annex-B 缓冲并增加低频发送分项统计,默认启用 vendored OpenSSL SRTP AES-CM 后端。

HTTP 客户端、HTTPS 服务端和本地 DTLS 证书验证迁移至 OpenSSL,移除 rustls TLS 引擎依赖,保留证书验证、媒体加密和原有协议协商。
This commit is contained in:
mofeng-git
2026-10-01 18:34:21 +08:00
parent 48cd06c7a4
commit 318b58b26a
115 changed files with 18160 additions and 273 deletions

View File

@@ -4,10 +4,9 @@ use std::io::Write;
use std::net::{IpAddr, SocketAddr};
use std::path::PathBuf;
use axum_server::tls_rustls::RustlsConfig;
use axum_server::tls_openssl::OpenSSLAcceptor;
use clap::{Args, Parser, Subcommand, ValueEnum};
use futures::{stream::FuturesUnordered, StreamExt};
use rustls::crypto::{ring, CryptoProvider};
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
use one_kvm::auth::{SessionStore, TwoFactorService, UserStore};
@@ -17,6 +16,7 @@ use one_kvm::platform::PlatformCapabilities;
use one_kvm::runtime::{RuntimeBuilder, WebConfigOverrides};
use one_kvm::state::ShutdownAction;
use one_kvm::utils::bind_tcp_listener;
use one_kvm::utils::tls::server_config_from_pem_file;
#[derive(Debug, Clone, Copy, Default, ValueEnum)]
enum LogLevel {
@@ -100,9 +100,6 @@ async fn main() -> anyhow::Result<()> {
init_logging(args.log_level);
CryptoProvider::install_default(ring::default_provider())
.expect("Failed to install rustls crypto provider");
tracing::info!("Starting One-KVM v{}", env!("CARGO_PKG_VERSION"));
let platform = PlatformCapabilities::current();
tracing::info!(
@@ -187,7 +184,7 @@ async fn main() -> anyhow::Result<()> {
let tls_config = if let (Some(cert_path), Some(key_path)) =
(&config.web.ssl_cert_path, &config.web.ssl_key_path)
{
RustlsConfig::from_pem_file(cert_path, key_path).await?
server_config_from_pem_file(cert_path, key_path).await?
} else {
let cert_dir = data_dir.join("certs");
let cert_path = cert_dir.join("server.crt");
@@ -203,7 +200,7 @@ async fn main() -> anyhow::Result<()> {
tracing::info!("Using existing TLS certificate from {}", cert_dir.display());
}
RustlsConfig::from_pem_file(&cert_path, &key_path).await?
server_config_from_pem_file(&cert_path, &key_path).await?
};
let servers = FuturesUnordered::new();
@@ -211,7 +208,8 @@ async fn main() -> anyhow::Result<()> {
let local_addr = listener.local_addr()?;
tracing::info!("Starting HTTPS server on {}", local_addr);
let server = axum_server::from_tcp_rustls(listener, tls_config.clone())?
let server = axum_server::from_tcp(listener)?
.acceptor(OpenSSLAcceptor::new(tls_config.clone()))
.serve(app.clone().into_make_service());
servers.push(server);
}