Skip to Content

2024年07月19日

本周计划

  • 中心服务
    • es-center-server-webrtc-service: 部署在数证管理服务器上, 实现回放文件的 p2p 传输, 支持编译为 linux, windows 程序
      • p2p 文件传输联调
      • 对端 webrtc 连接失效, 服务端回收资源, 比如: 内存, 中断发送数据
      • 多路 webrtc 上限默认为 16 路, 可配置; 超过上限时, 需信令回复对应的消息
      • 读取h264视频文件进行 p2p 推送
    • es-center-server-webrtc-app: 开发与 es-center-server-webrtc-service 联调用的播放端, 联调通过后将移入中心服务历史回放模块
      • p2p 文件传输联调
        • 图片文件接收完成后显示
        • 音频文件接收完成后播放
      • p2p 回放h264视频的播放

2024年07月15日

  • 中心服务
    • es-center-server-webrtc-service: 部署在数证管理服务器上, 实现回放文件的 p2p 传输, 支持编译为 linux, windows 程序
      • 已完成文件传输联调
    • es-center-server-webrtc-app: 开发与 es-center-server-webrtc-service 联调用的播放端, 联调通过后将移入中心服务历史回放模块
      • 文件传输联调
        • 已完成图片文件接收完成后显示
    • 发现的问题处理
      • 已完成p2p 成功率处理: rust webrtc 程序中, 在没有设置远程 sdp 之前, 不发送 candidate 给对端, on_ice_candidate 产生的 candidate 存入队列中, 等待设置远程 sdp 后发出
pub async fn on_ice_candidate(&self, rtcice_candidate: String) -> Result<(), Box<dyn Error>> { if self .rtc_peer_connection .remote_description() .await .is_none() { let local_sender_cloen = self.local_sender.clone(); tokio::spawn(async move { time::sleep(std::time::Duration::from_millis(5)).await; local_sender_cloen .try_send(("on-ice-candidate".to_owned(), rtcice_candidate)) .unwrap_or_else(|e| log::error!("{:?}", e)); }); return Ok(()); } let candidate: RTCIceCandidateInit = serde_json::from_str(&rtcice_candidate)?; let candidate_topic = format!( "{}/{}/{}/webrtc/candidate", self.remote_type_code.clone(), self.remote_type_no.clone(), self.remote_session_id.clone() ); let candidate_object = RootMessageDto { session_id: Default::default(), type_code: Some(self.local_type_code.clone()), type_no: Some(self.local_type_no.clone()), data_encryption_mode: Some(String::from("PLAIN")), version: Some(String::from("1.0.0")), data: Some(CandidateMessageDataDto { candidate: candidate.candidate, sdp_mid: candidate.sdp_mid, sdp_mline_index: candidate.sdp_mline_index, username_fragment: candidate.username_fragment, }), }; let candidate_string = serde_json::to_string(&candidate_object)?; self.signalling_sender .try_send((candidate_topic, candidate_string))?; Ok(()) }

2024年07月16日

  • 中心服务
    • es-center-server-webrtc-service: 部署在数证管理服务器上, 实现回放文件的 p2p 传输, 支持编译为 linux, windows 程序
      • 已完成单个文件传输, 改进为批量文件传输
    • es-center-server-webrtc-app: 开发与 es-center-server-webrtc-service 联调用的播放端, 联调通过后将移入中心服务历史回放模块
      • 单个文件传输, 改进为批量文件传输
        • 已完成图片文件接收完成后显示
        • 已完成音频文件接收完成后播放

2024年07月17日

  • 中心服务
    • es-center-server-webrtc-service: 部署在数证管理服务器上, 实现回放文件的 p2p 传输, 支持编译为 linux, windows 程序
      • 已完成信令调整为更通用
      • 已完成播放端离开, 服务端及时回收资源, 比如: 内存, 中断发送数据
      • 已完成超过 15 秒未收到播放端通过 webrtc data channel 发送的心跳, 关闭 webrtc 回收资源
    • es-center-server-webrtc-app: 开发与 es-center-server-webrtc-service 联调用的播放端, 联调通过后将移入中心服务历史回放模块
      • 已完成信令调整为更通用
      • 已完成webrtc 连接成功后, 每十秒使用 webrtc data channel 发送心跳
      • 测试发现的问题处理
        • 已完成图片有时显示不全: next.js 的 Image 组件更换为 h5 的 img 标签
        • 已完成火狐浏览器收到图片不显示问题, 跟进发现: webrtc data channel 发送的二进制数据, 在火狐浏览器收到的是 Blob 类型, 在chrome和edge收到的是 ArrayBuffer 类型, 需要加业务逻辑处理
        • 已完成mp4 无法正常播放 p2p 传文件的方式如果行不通, 将改为 p2p 直播文件的方式
    • 已完成安装公司办公电脑为 windows 11 系统, 用来测试 h265 视频播放: 从家里带过来的电脑是 linux 系统, 不支持 h265
let last_ping_time_clone = last_ping_time.clone(); let local_sender_clone = local_sender.clone(); tokio::spawn(async move { let mut interval = interval(std::time::Duration::from_secs(15)); loop { interval.tick().await; match last_ping_time_clone.lock() { Ok(last_ping_time) => { let elapsed = Instant::now().duration_since(last_ping_time.clone()); if elapsed.as_secs() >= 15 { local_sender_clone .try_send(("stop".to_owned(), "".to_owned())) .unwrap_or_else(|e| log::error!("{:?}", e)); break; } } Err(e) => { log::error!("{:?}", e); } } } }); let local_sender_clone = local_sender.clone(); rtc_peer_connection.on_peer_connection_state_change(Box::new( move |rtc_peer_connection_state: RTCPeerConnectionState| { let local_sender_clone_clone = local_sender_clone.clone(); Box::pin(async move { log::debug!("Peer Connection State change: {rtc_peer_connection_state}"); if matches!( rtc_peer_connection_state, RTCPeerConnectionState::Failed | RTCPeerConnectionState::Disconnected ) { local_sender_clone_clone .try_send(("stop".to_owned(), "".to_owned())) .unwrap_or_else(|e| log::error!("{:?}", e)); } }) }, ));

2024年07月18日

  • 中心服务
    • es-center-server-webrtc-service: 部署在数证管理服务器上, 实现回放文件的 p2p 传输, 支持编译为 linux, windows 程序
      • 已完成p2p 传视频文件优化: 传输缓冲处理; 缓冲超大时等待缓冲变小后再发送;
    • es-center-server-webrtc-app: 开发与 es-center-server-webrtc-service 联调用的播放端, 联调通过后将移入中心服务历史回放模块
      • 已完成视频文件接收完成后播放: 多次传输过来的二进制合并优化
      • 测试发现的问题处理
        • 已完成H.264 (Main Profile) 格式的视频 p2p 传输并播放, 可以播放 现在需等文件完整传输完后; 边传边播需服务端解复用; H.264 (High Profile) 格式的也需服务端处理
        • 已完成H.265 (Main Profile) 格式的视频 p2p 传输并播放, 可以播放 现在需等文件完整传输完后; 边传边播需服务端解复用; H.264 (High Profile) 格式的也需服务端处理

2024年07月19日

Last updated on