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视频的播放
- p2p 文件传输联调
- es-center-server-webrtc-service: 部署在数证管理服务器上, 实现回放文件的 p2p 传输, 支持编译为 linux, windows 程序
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 后发出
- es-center-server-webrtc-service: 部署在数证管理服务器上, 实现回放文件的 p2p 传输, 支持编译为 linux, windows 程序
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 联调用的播放端, 联调通过后将移入中心服务历史回放模块
- 单个文件传输, 改进为批量文件传输
已完成图片文件接收完成后显示已完成音频文件接收完成后播放
- 单个文件传输, 改进为批量文件传输
- es-center-server-webrtc-service: 部署在数证管理服务器上, 实现回放文件的 p2p 传输, 支持编译为 linux, windows 程序
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
- es-center-server-webrtc-service: 部署在数证管理服务器上, 实现回放文件的 p2p 传输, 支持编译为 linux, windows 程序
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) 格式的也需服务端处理
- es-center-server-webrtc-service: 部署在数证管理服务器上, 实现回放文件的 p2p 传输, 支持编译为 linux, windows 程序
2024年07月19日
- 中心服务
- es-center-server-webrtc-service: 部署在数证管理服务器上, 实现回放文件的 p2p 传输, 支持编译为 linux, windows 程序
- p2p 传视频文件优化
已完成数据通道由一个, 改为三个; 分别为:控制,主,从;控制用来交互信令,主用来发送视频文件解复用后的视频帧以及图片文件、音频文件,从用来发送视频文件解复用后的音频
已完成h264/h265 文件解复用库选型
- p2p 传视频文件优化
- es-center-server-webrtc-app: 开发与 es-center-server-webrtc-service 联调用的播放端, 联调通过后将移入中心服务历史回放模块
已完成数据通道交互按服务端的改变进行调整
- es-center-server-webrtc-service: 部署在数证管理服务器上, 实现回放文件的 p2p 传输, 支持编译为 linux, windows 程序
Last updated on