mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2026-10-28 08:20:49 +08:00
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:
14
src/main.rs
14
src/main.rs
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user