当前位置: 首页 > news >正文

rust 桌面 sip 软电话(基于tauri 、pjsip库)

本文尝试下rust 的tauri 桌面运用 原因在于体积小

1、pjsip 提供了rust 接口官方的 rust demo 没编译出来 在git找了个sip-phone-rs-master

       https://github.com/Charles-Schleich/sip-phone-rs

可以自己编译下pjsip lib库替换该项目的lib

2、创建一个tauri demo 引用

[dependencies]

tauri = { version = "1", features = ["shell-open"] }

serde = { version = "1", features = ["derive"] }

serde_json = "1"

te-telephony-rs = {path="../../sip-phone-rs-master"}

3.稍微修改下sip-phone-rs项目加了消息回调用到以下

pj_str_t 转CString 找了很久,r

    let c_str =  unsafe { 

        CString::from_vec_unchecked(std::slice::from_raw_parts(ci.state_text .ptr as *const u8, ci.state_text .slen as usize)

        .to_vec())

     };

引用lazy_static   然后做方法消息回调

#[derive(Debug)]

pub struct MyChannel{

    pub sr:mpsc::Sender<String>,

    pub rr:mpsc::Receiver<String>

}

impl MyChannel {

    pub fn new( sr:mpsc::Sender<String>, rr:mpsc::Receiver<String>)->MyChannel{

        MyChannel{ sr,rr  }

    }

}

unsafe  impl Sync for MyChannel {

   

}

lazy_static! { 

    pub static ref GLOBAL_MYCHANNEL: Arc<MyChannel > = {

        let ( sr,rr) = mpsc::channel();

        Arc::new(  MyChannel::new(sr, rr)  )

     };

用法

  GLOBAL_MYCHANNEL.sr.send( format!("reg={}={}",renew,code) );

最后显示到页面

pub fn xunmsg(app: AppHandle<Wry>) {

    let main_window = app.get_window("main").unwrap();

    let main_window_clone = main_window.clone();

    thread::spawn(move  || {

        let cloneChannel= GLOBAL_MYCHANNEL.clone();

        loop{

            let z=cloneChannel.rr.try_recv().unwrap_or_default();

            if z.len()>1{

                println!("get:{:?}",z);

                main_window_clone.emit("msg_callstate", Payload { message: z }).unwrap();

            }

            sleep(Duration::from_secs(1));

        }

    });

}

最后效果7.54M 好小  比包括一个google 内核小的多

sip客户端和freeswitch 需求可到https://item.taobao.com/item.htm?id=653611115230

http://www.lryc.cn/news/414725.html

相关文章:

  • Linux 进程优先级、程序地址空间、进程控制
  • 学习笔记一
  • Linux中信号的发送及信号的自定义捕捉方法
  • yum仓库的制作与使用
  • 牛客周赛54:D.清楚姐姐跳格子(bfs)
  • 用户空间 lmkd
  • 二叉树专题
  • Spring MVC 之简介及常见注解
  • 除了使用本地存储,还有哪些方法可以实现只出现一次的弹窗?
  • 微软蓝屏事件揭示的网络安全深层问题与未来应对策略
  • C#:通用方法总结—第11集
  • Web开发-html篇-下
  • 【C++从小白到大牛】多态那些事儿(上)
  • 网站在线查询工具箱源码分享
  • SSH简写且免密登陆终端设备
  • 算力共享中神经网络切片和算力分配策略
  • 3章4节:R的逻辑运算和矩阵运算
  • 使用EasyAR打包安卓操作注意
  • 驾驭PyCharm:破解环境配置的迷宫
  • 大数据技术原理-Hadoop的安装
  • 从根儿上学习spring 八 之run方法启动第四段(2)
  • 牛顿插值法代替泰勒公式
  • 为 Laravel 提供生产模式下的容器化环境:打造现代开发环境的终极指南
  • Visual Studio 和 VSCode 哪个好?
  • 百款精选的HTML5小游戏源码,你可以下载并直接运行在你的小程序或者自己的网站上
  • 01 LVS负载均衡群集
  • Redis结合Lua脚本的简单使用
  • Java使用zip4j加密压缩和解压文件与文件夹
  • 一款好用的开源网站内容管理系统
  • Qt Modbus 寄存器读写实例