feat, multi_flutter_ui_sessions

Signed-off-by: dignow <linlong1265@gmail.com>
This commit is contained in:
dignow
2023-10-08 21:44:54 +08:00
parent 5e616dd502
commit 013d307bcd
83 changed files with 2954 additions and 1319 deletions

View File

@@ -5,7 +5,7 @@ use hbb_common::{
mpsc::{unbounded_channel, UnboundedReceiver, UnboundedSender},
Mutex as TokioMutex,
},
ResultType, SessionID,
ResultType,
};
use serde_derive::{Deserialize, Serialize};
use std::{
@@ -61,7 +61,7 @@ pub enum ClipboardFile {
}
struct MsgChannel {
session_uuid: SessionID,
peer_id: String,
conn_id: i32,
sender: UnboundedSender<ClipboardFile>,
receiver: Arc<TokioMutex<UnboundedReceiver<ClipboardFile>>>,
@@ -90,12 +90,12 @@ impl ClipboardFile {
}
}
pub fn get_client_conn_id(session_uuid: &SessionID) -> Option<i32> {
pub fn get_client_conn_id(peer_id: &str) -> Option<i32> {
VEC_MSG_CHANNEL
.read()
.unwrap()
.iter()
.find(|x| x.session_uuid == session_uuid.to_owned())
.find(|x| x.peer_id == peer_id)
.map(|x| x.conn_id)
}
@@ -106,13 +106,10 @@ fn get_conn_id() -> i32 {
}
pub fn get_rx_cliprdr_client(
session_uuid: &SessionID,
peer_id: &str,
) -> (i32, Arc<TokioMutex<UnboundedReceiver<ClipboardFile>>>) {
let mut lock = VEC_MSG_CHANNEL.write().unwrap();
match lock
.iter()
.find(|x| x.session_uuid == session_uuid.to_owned())
{
match lock.iter().find(|x| x.peer_id == peer_id) {
Some(msg_channel) => (msg_channel.conn_id, msg_channel.receiver.clone()),
None => {
let (sender, receiver) = unbounded_channel();
@@ -120,7 +117,7 @@ pub fn get_rx_cliprdr_client(
let receiver2 = receiver.clone();
let conn_id = get_conn_id();
let msg_channel = MsgChannel {
session_uuid: session_uuid.to_owned(),
peer_id: peer_id.to_owned(),
conn_id,
sender,
receiver,
@@ -140,7 +137,7 @@ pub fn get_rx_cliprdr_server(conn_id: i32) -> Arc<TokioMutex<UnboundedReceiver<C
let receiver = Arc::new(TokioMutex::new(receiver));
let receiver2 = receiver.clone();
let msg_channel = MsgChannel {
session_uuid: SessionID::nil(),
peer_id: "".to_string(),
conn_id,
sender,
receiver,

View File

@@ -27,6 +27,7 @@ message VideoFrame {
EncodedVideoFrames vp8s = 12;
EncodedVideoFrames av1s = 13;
}
int32 display = 14;
}
message IdPk {
@@ -491,6 +492,12 @@ message SwitchDisplay {
Resolution original_resolution = 8;
}
message CaptureDisplays {
repeated int32 add = 1;
repeated int32 sub = 2;
repeated int32 set = 3;
}
message PermissionInfo {
enum Permission {
Keyboard = 0;
@@ -688,6 +695,8 @@ message Misc {
uint32 full_speed_fps = 27;
uint32 auto_adjust_fps = 28;
bool client_record_status = 29;
CaptureDisplays capture_displays = 30;
int32 refresh_video_display = 31;
}
}

View File

@@ -13,7 +13,7 @@ use hbb_common::{
anyhow::{anyhow, Context},
bytes::Bytes,
log,
message_proto::{EncodedVideoFrame, EncodedVideoFrames, Message, VideoFrame},
message_proto::{EncodedVideoFrame, EncodedVideoFrames, VideoFrame},
ResultType,
};
use std::{ptr, slice};
@@ -240,7 +240,7 @@ impl EncoderApi for AomEncoder {
}
}
fn encode_to_message(&mut self, frame: &[u8], ms: i64) -> ResultType<Message> {
fn encode_to_message(&mut self, frame: &[u8], ms: i64) -> ResultType<VideoFrame> {
let mut frames = Vec::new();
for ref frame in self
.encode(ms, frame, STRIDE_ALIGN)
@@ -249,7 +249,7 @@ impl EncoderApi for AomEncoder {
frames.push(Self::create_frame(frame));
}
if frames.len() > 0 {
Ok(Self::create_msg(frames))
Ok(Self::create_video_frame(frames))
} else {
Err(anyhow!("no valid frame"))
}
@@ -311,16 +311,14 @@ impl AomEncoder {
}
#[inline]
pub fn create_msg(frames: Vec<EncodedVideoFrame>) -> Message {
let mut msg_out = Message::new();
pub fn create_video_frame(frames: Vec<EncodedVideoFrame>) -> VideoFrame {
let mut vf = VideoFrame::new();
let av1s = EncodedVideoFrames {
frames: frames.into(),
..Default::default()
};
vf.set_av1s(av1s);
msg_out.set_video_frame(vf);
msg_out
vf
}
#[inline]

View File

@@ -23,8 +23,8 @@ use hbb_common::{
config::PeerConfig,
log,
message_proto::{
supported_decoding::PreferCodec, video_frame, EncodedVideoFrames, Message,
SupportedDecoding, SupportedEncoding,
supported_decoding::PreferCodec, video_frame, EncodedVideoFrames,
SupportedDecoding, SupportedEncoding, VideoFrame,
},
sysinfo::{System, SystemExt},
tokio::time::Instant,
@@ -60,7 +60,7 @@ pub trait EncoderApi {
where
Self: Sized;
fn encode_to_message(&mut self, frame: &[u8], ms: i64) -> ResultType<Message>;
fn encode_to_message(&mut self, frame: &[u8], ms: i64) -> ResultType<VideoFrame>;
fn use_yuv(&self) -> bool;

View File

@@ -8,7 +8,7 @@ use hbb_common::{
bytes::Bytes,
config::HwCodecConfig,
log,
message_proto::{EncodedVideoFrame, EncodedVideoFrames, Message, VideoFrame},
message_proto::{EncodedVideoFrame, EncodedVideoFrames, VideoFrame},
ResultType,
};
use hwcodec::{
@@ -92,12 +92,7 @@ impl EncoderApi for HwEncoder {
}
}
fn encode_to_message(
&mut self,
frame: &[u8],
_ms: i64,
) -> ResultType<hbb_common::message_proto::Message> {
let mut msg_out = Message::new();
fn encode_to_message(&mut self, frame: &[u8], _ms: i64) -> ResultType<VideoFrame> {
let mut vf = VideoFrame::new();
let mut frames = Vec::new();
for frame in self.encode(frame).with_context(|| "Failed to encode")? {
@@ -117,8 +112,7 @@ impl EncoderApi for HwEncoder {
DataFormat::H264 => vf.set_h264s(frames),
DataFormat::H265 => vf.set_h265s(frames),
}
msg_out.set_video_frame(vf);
Ok(msg_out)
Ok(vf)
} else {
Err(anyhow!("no valid frame"))
}

View File

@@ -4,7 +4,7 @@
use hbb_common::anyhow::{anyhow, Context};
use hbb_common::log;
use hbb_common::message_proto::{EncodedVideoFrame, EncodedVideoFrames, Message, VideoFrame};
use hbb_common::message_proto::{EncodedVideoFrame, EncodedVideoFrames, VideoFrame};
use hbb_common::ResultType;
use crate::codec::{base_bitrate, codec_thread_num, EncoderApi, Quality};
@@ -172,7 +172,7 @@ impl EncoderApi for VpxEncoder {
}
}
fn encode_to_message(&mut self, frame: &[u8], ms: i64) -> ResultType<Message> {
fn encode_to_message(&mut self, frame: &[u8], ms: i64) -> ResultType<VideoFrame> {
let mut frames = Vec::new();
for ref frame in self
.encode(ms, frame, STRIDE_ALIGN)
@@ -186,7 +186,7 @@ impl EncoderApi for VpxEncoder {
// to-do: flush periodically, e.g. 1 second
if frames.len() > 0 {
Ok(VpxEncoder::create_msg(self.id, frames))
Ok(VpxEncoder::create_video_frame(self.id, frames))
} else {
Err(anyhow!("no valid frame"))
}
@@ -266,8 +266,10 @@ impl VpxEncoder {
}
#[inline]
pub fn create_msg(codec_id: VpxVideoCodecId, frames: Vec<EncodedVideoFrame>) -> Message {
let mut msg_out = Message::new();
pub fn create_video_frame(
codec_id: VpxVideoCodecId,
frames: Vec<EncodedVideoFrame>,
) -> VideoFrame {
let mut vf = VideoFrame::new();
let vpxs = EncodedVideoFrames {
frames: frames.into(),
@@ -277,8 +279,7 @@ impl VpxEncoder {
VpxVideoCodecId::VP8 => vf.set_vp8s(vpxs),
VpxVideoCodecId::VP9 => vf.set_vp9s(vpxs),
}
msg_out.set_video_frame(vf);
msg_out
vf
}
#[inline]