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

news2024/9/23 9:32:01

本文尝试下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.coloradmin.cn/o/1964356.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

操作系统(4)——文件系统

目录 小程一言文件系统管理基础概念&功能基本概念文件的结构和属性文件的操作文件的安全性和权限控制文件系统的实现和分配方式 问题&解答1、文件系统在操作系统中起到什么作用&#xff1f;2、文件的逻辑结构和物理结构有何区别&#xff1f;3、如何理解文件权限控制在操…

时间序列异常值检验替换——基于Hampel滤波器

Hampel滤波器作为一种强大的时间序列异常值处理工具&#xff0c;在数据清洗和分析中发挥着重要作用。本文将深入研究Hampel滤波器的原理和数学推导&#xff0c;并通过实际代码演示其在异常值处理中的应用 1. Hampel滤波器简介 1.1 什么是Hampel滤波器&#xff1f; Hampel滤波…

【达梦数据库】通过线程pid定位会话SQL

【达梦数据库】通过线程pid定位会话SQL 1、查找数据库进程 ps -ef|grep dmserver2、通过进程pid去找对应的线程 top -H -p $pid -------------------- top命令经常用来监控linux的系统状况&#xff0c;是常用的性能分析工具&#xff0c;能够实时显示系统中各个进程的资源占用…

Signac包-1.Analyzing PBMC scATAC-seq

–https://stuartlab.org/signac/articles/pbmc_vignette 好的&#xff0c;开始学习scATAC-seq的数据是怎么玩的了&#xff0c;先跑完Signac的教程&#xff0c;边跑边思考怎么跟自己的课题相结合。 留意更多内容&#xff0c;欢迎关注微信公众号&#xff1a;组学之心 数据和R…

Qt安卓开发的一些概念

目录 1、Android 版本和 API 的对应关系&#xff1f; 2、ABI是什么 2.1、x86_64 2.2、x86 2.3、arm64-v8a 2.4、armeabi-v7a 3、不同架构的特点 3.1、32位 ARM 架构 (ARMv7) 3.2、64位 ARM 架构 (ARMv8-A) 3.3、32位 Intel 架构 (x86) 3.4、64位 Intel 架构 (x86-64…

vue+element-ui的列表查询条件/筛选条件太多以下拉选择方式动态添加条件(支持全选、反选、清空)

1、此功能已集成到TQueryCondition组件中 2、最终效果 3、具体源码(新增moreChoose.vue) <template><el-popoverpopper-class"t_query_condition_more":bind"popoverAttrsBind"ref"popover"v-if"allcheckList.length>0"…

本地VSCode连接远程linux环境服务器的docker

目录 1、安装远程SSH 2、连接远程主机 3、远程中安装docker 4、查看容器 &#xff08;1&#xff09;直接查看容器和镜像 &#xff08;2&#xff09;使用命令查看 最近在新服务器中执行程序&#xff0c;要用到远程的docker。但是命令行环境下查看代码非常不方便&#xff0…

upload-labs 1-19关 攻略 附带项目下载地址 小白也能看会

本文章提供的工具、教程、学习路线等均为原创或互联网收集&#xff0c;旨在提高网络安全技术水平为目的&#xff0c;只做技术研究&#xff0c;谨遵守国家相关法律法规&#xff0c;请勿用于违法用途&#xff0c;如有侵权请联系小编处理。 环境准备&#xff1a; 1.靶场搭建 下…

Nsight System and Nsight Compute 性能分析工具

Nsight System 系统级别去分析性能&#xff0c;也就是宏观方向。 Achieved Accupacy低&#xff1a;在Nsight System pipline可以直接看出来 kernel launch 延迟&#xff1a;cpu发起gpu执行kernel过程中&#xff0c;有个kernel launch环节&#xff0c;grid block。优化方法&a…

ScrollView(滚动条)

1.滚动到底部&#xff1a; 我们可以直接利用ScrollView给我们提供的:fullScroll()方法&#xff1a; scrollView.fullScroll(ScrollView.FOCUS_DOWN);滚动到底部 scrollView.fullScroll(ScrollView.FOCUS_UP);滚动到顶部 另外用这玩意的时候要小心异步的玩意&#xff0c;就是a…

iOS 18:照片应用添加“恢复”相册,可恢复数据库损坏所丢失照片!

小伙伴们可能在使用 iPhone 拍摄时遇到“明明拍下了&#xff0c;但是相册中却根本没有相关照片”的问题&#xff0c;而在 iOS 18 / macOS 15 中&#xff0c;苹果公司悄悄为“照片”应用引入了一项“恢复”功能以解决相关 Bug。 按照苹果的描述&#xff0c;照片、视频丢失可能是…

XXE漏洞复现

XML外部实体注入(XML Extenrnal Entity Injection)&#xff0c;简称XXE漏洞。引发XXE漏洞的主要原因是XML解析依赖库libxml默认开启了对外部实体的引用&#xff0c;导致服务端在解析用户提交的XML信息时未作处理直接进行解析&#xff0c;导致加载恶意的外部文件和代码&#xff…

一文剖析高可用向量数据库的本质

面对因电力故障、网络问题或人为操作失误等导致的服务中断&#xff0c;数据库系统高可用能够保证系统在这些情况下仍然不间断地提供服务。如果数据库系统不具备高可用性&#xff0c;那么系统就需要承担停机和数据丢失等重大风险&#xff0c;而这些风险极有可能造成用户流失&…

SpringBoot通过3种方式实现AOP切面

❃博主首页 &#xff1a; 「码到三十五」 &#xff0c;同名公众号 :「码到三十五」&#xff0c;wx号 : 「liwu0213」 ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a…

实战内测-某内测项目站点FUZZ到Sql注入

0x1 前言 下面给师傅们分享的案例呢是前段时间实战的一个站点&#xff0c;也是我朋友前段时间让我测的一个站点。整体的测试流程也还算ok&#xff0c;然后里面有些细节要是对师傅们有帮助可以收藏下&#xff0c;后面主要是利用FUZZ打了一个sql注入漏洞上去。 0x2 fuzz和sql结…

MAC安装acl

在编译前&#xff0c;需要先从 github https://github.com/acl-dev/acl 下载源码&#xff0c;国内用户可以选择从 gitee https://gitee.com/acl-dev/acl 下载源码。 3.1、Linux/Unix 平台上编译安装 在 Linux/Unix 平台上的编译非常简单&#xff0c;可以选择使用 make 方式或 …

【高校科研前沿】马里兰大学地理科学系在环境科学Top期刊发文:美国本土湿地因不透水面而损失的热点区域

1.文章简介 论文名称&#xff1a;Hotspots of wetland loss to impervious surfaces in the conterminous United States&#xff08;美国本土湿地因不透水面而损失的热点区域&#xff09; 第一作者及单位&#xff1a;Zhenhua Zou&#xff08;马里兰大学(美国)|助理研究教授&a…

Widget自定义动画按钮实战(鼠标进入则放大,离开恢复)

目录 引言 准备工作 步骤一&#xff1a;创建项目和基础控件 步骤二&#xff1a;设计UI 步骤三&#xff1a;自定义按钮类&#xff08;AniBtn&#xff09; 步骤四&#xff1a;在主窗口中使用自定义按钮 步骤五&#xff1a;编译和运行 总结 引言 在Qt开发中&#xff0c;自…

226翻转二叉树

解题思路&#xff1a; \qquad 树相关的题&#xff0c;大部分都可以通过递归来解决。因为树结构&#xff08;尤其是二叉树&#xff09;天然地具有递归发展的性质&#xff1a;对于二叉树的每个树节点&#xff0c;都有一个左节点和一个右节点&#xff0c;且能无限重复延伸。 \qqu…

World of Warcraft [retail] 100G download 2024.07.31

正式服 D:\Battle.net\World of Warcraft\_retail_