编译rustdesk,使用flutter、hwcodec硬件编解码、支持Windows 7系统

最近某desk免费的限制越来越多,实在没办法,平时远程控制用的比较多,只能用rustdesk了,rustdesk的安装包默认没有服务器和API服务器的,因此想着自己编译并设置一些参数直接写入程序中。

安装相应的环境

安装visual studio

到网站Visual studio下载安装包
打开后
在这里插入图片描述
切换至单个主件
在这里插入图片描述
安装后即可

安装vpkg

到github下载vpkg下载地址

在这里插入图片描述

或者使用git clone

# 克隆vcpkg到E盘
git clone https://github.com/microsoft/vcpkg.git E:\vcpkg

# 创建VCPKG_ROOT环境变量
$vcpkgPath = "E:\vcpkg"
[Environment]::SetEnvironmentVariable("VCPKG_ROOT", $vcpkgPath, [EnvironmentVariableTarget]::User)

# 将VCPKG_ROOT添加到PATH环境变量
$currentPath = [Environment]::GetEnvironmentVariable("PATH", [EnvironmentVariableTarget]::User)
if ($currentPath -notlike "*$vcpkgPath*") {
   
    [Environment]::SetEnvironmentVariable("PATH", 
### 如何在 Flutter 项目中集成 RustDesk #### 集成背景 RustDesk 是一个开源的远程桌面应用程序,主要使用 Rust 编写,并支持多种编程语言环境下的开发需求[^1]。对于希望在其移动应用中加入远程控制功能的开发者来说,在 Flutter 中集成 RustDesk 可以提供一种高效且安全的方式。 #### 技术栈准备 由于 RustDesk 主要由 Rust 构建而成,而 Flutter 应用程序通常基于 Dart 开发,因此需要借助 FFI (Foreign Function Interface) 来实现两者之间的交互。具体而言: - **Dart FFI**: 使用 `dart:ffi` 库可以调用外部 C 函数接口,从而间接访问编译后的 Rust 功能模块。 - **rust-bindgen**: 工具用于生成绑定代码,使 Dart 能够理解并操作 Rust 定义的数据结构和方法。 #### 实现步骤概述 为了简化说明过程,下面给出了一种可能的技术路线图: ##### 创建 Rust SDK 首先创建一个新的 Cargo 包含库 crate 并将其配置为动态链接库形式以便于后续加载到 Flutter 环境下运行。这一步骤涉及到修改项目的 `Cargo.toml` 文件以及编写必要的业务逻辑函数供上层调用。 ```toml # Cargo.toml [lib] crate-type = ["cdylib"] ``` 接着定义好对外暴露的方法签名,确保这些 API 符合跨平台调用的要求。 ##### 生成功能绑定文件 利用 rust-bindgen 自动生成 Dart 所需的头文件声明,这样就可以轻松地从 Dart 端发起对底层 Rust 方法的请求了。 ```bash bindgen wrapper.h -o src/bindings.rs ``` 注意这里假设已经有一个名为 `wrapper.h` 的 C/C++ 头文件描述了所有想要导出给 Dart 层使用的符号表项。 ##### 修改 pubspec.yaml 添加依赖关系 向现有的 Flutter 项目中的 `pubspec.yaml` 增加关于本地扩展的支持部分,指定包含刚才构建好的 `.so`,`.dylib` 或者 `.dll` 文件的位置信息。 ```yaml flutter: plugin: platforms: android: package: com.example.rustdesk_plugin pluginClass: RustDeskPlugin ios: pluginClass: FLTMyPlugin assets: - path/to/native/lib/ ``` 此处仅展示了 Android 和 iOS 平台的相关设置;实际情况下还需要考虑 Windows, Linux 等其他操作系统上的适配工作。 ##### 编写 Dart 封装类 最后就是根据前面得到的信息来设计一组易于管理的操作接口啦!通过这种方式可以让前端工程师更加方便快捷地上手使用这套混合架构带来的强大能力。 ```dart import 'package:ffi/ffi.dart'; import 'dart:io'; class RemoteControl { static final DynamicLibrary nativeLib = Platform.isAndroid ? DynamicLibrary.open("libnative.so") : DynamicLibrary.process(); Pointer<Utf8> _connect(String address) => nativeLib.lookup<NativeFunction<Int8 Function(Pointer<Utf8>)>>('Connect').asFunction()(address.toNativeUtf8()); void disconnect() => nativeLib.lookup<Void Function()>('Disconnect')(); } ``` 以上只是一个非常基础的例子用来展示整个流程的大致框架,真实场景里往往还会牵涉更多细节处理如错误捕捉机制、性能优化措施等方面的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值