首页 > 其他分享 >PC软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具

PC软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具

时间:2024-10-10 10:48:55浏览次数:9  
标签:string 新体验 缩略图 Hybrid PC var Blazor public MD5

前言

国庆假期各种活动比较多,直到上班才有时间来更新文章~

不过这两天我还是做了个小玩意(Clipify),起因是想给之前开发来自己用的简单视频剪辑工具 QuickCutSharp 加个功能,不过这个软件是基于 WinForms 开发的,做界面得拖拉控件,感觉繁琐又不灵活,于是索性重新做一个。

原有代码是C#,于是我就继续在这个生态里寻找开发方案,Avalonia、MAUI等都是不错的选择,前者我之前用过,做了个简单的图片管理工具,后者听说是微软新推出的跨平台开发方案,我这次也试了一下,不过单纯处理环境就比较复杂了,直接劝退。

接下来我就把目光瞄准了类似 Electron 这类套壳开发,既然要用前端技术开发软件界面,那么 C# 生态的 Blazor 就可以拿出来了,我之前也用 Blazor 开发过几个项目,感觉使用 Blazor 搭配 TailwindCSS 应该可以有不错的开发体验。

说干就干,我选择了 Blazor Hybrid 这个方向,然后宿主容器依然选择 WinForms,原因是暂时没有跨平台的需求,而且 Blazor Hybrid 目前也没有比较好的跨平台方案,虽然有 MAUI 但太重而且也不支持 Linux…


项目已经开源,Github: https://github.com/Deali-Axy/clipify

一些截图

老规矩前面先放一些截图,软件的功能直接看图就清楚了。

软件主页

提取音频界面

导出视频界面

PS:目前只实现了部分功能

主要技术

正如前言说到的,使用了 Blazor Hybrid 来开发,那么界面就是 Blazor 实现的,然后运行在一个 Winforms 软件的 BlazorWebView 中。

视频相关的功能是调用了 ffmpeg (实际上在没有这个软件之前,我都是手动输入命令操作的…)

  • Microsoft.AspNetCore.Components.WebView.WindowsForms - 微软官方的 Blazor Hybrid 方案,可以依托 WinForms 运行 Blazor
  • MediatR - C#版的EventBus,用于实现浏览器和WinForms的通信
  • xFFmpeg.NET - 用于简化 ffmpeg 的调用(实际上这个库已经停更两三年了,很多功能只能自己去实现,我甚至打算fork一个来适配新版ffmpeg)
  • Microsoft.Extensions.Logging - 日志组件,没啥好说的,AspNetCore项目里的常客
  • AntDesign - 一些组件不想自己封装(如modal和message)就用这个

前端方面依然是 pnpm、gulp、tailwindcss、flowbite、fortawesome 这些

关于 Blazor Hybrid

Electron技术大家都很熟悉了,现在连QQ都用Electron重构了,在开发了这个项目之后,我也能理解这种做法,用前端技术来写界面真的爽,只要稍微牺牲一下性能,就可以获得不错的效果,而且现在电脑的性能都已经足够了,正好给web技术上桌面提供了条件。

而 Blazor 对于 C# 开发人员的优势是不需要学习各种 JavaScript 框架就可以开发交互式的 web 应用;虽然我做过不少前端项目,React也用得比较熟了,不过 Blazor Hybrid 还有一个优势是可以直接使用 C# 调用系统功能,Blazor Hybrid 一方面是运行在浏览器中,一方面又是直接在操作系统层面运行,C# 代码可以不受浏览器沙箱的限制,直接访问系统文件、设备等(虽然本项目中还是用到了Blazor与WinForms通信,不过那不是 C# 的功能限制,而是必须用到 WinForms 的功能)。

创建 Blazor Hybrid 项目

创建一个基于 WinForms 的 Blazor Hybrid 项目很简单,首先是创建 .NetCore(.Net8) 的 WinForms 项目,然后添加 Microsoft.AspNetCore.Components.WebView.WindowsForms 依赖

接着把 BlazorWebView 组件添加到 Form 上面

然后开始写代码初始化

public partial class FormMain : Form {
  public FormMain() {
    InitializeComponent();

    var services = new ServiceCollection();
    services.AddLogging(c => {
      c.AddDebug();
      c.AddFilter("Microsoft.AspNetCore.Components.WebView", LogLevel.Trace);
    });

    services.AddAntDesign();
    services.AddMediatR(cfg => { cfg.RegisterServicesFromAssemblyContaining<FormMain>(); });
    services.AddWindowsFormsBlazorWebView();
    #if DEBUG
    services.AddBlazorWebViewDeveloperTools();
    #endif

    services.AddSingleton(this);
    services.AddScoped<IHostingEnvironment, HostingEnvironment>();
    services.AddScoped<DialogService>();
    services.AddScoped<VideoService>();

    blazorWebView1.HostPage = "wwwroot\\index.html";
    blazorWebView1.Services = services.BuildServiceProvider();
    blazorWebView1.RootComponents.Add<App>("#app");
  }
}

关键的就在于最下面的三行代码,设置主页、把服务容器绑定的 Blazor 控件上,设置根组件。

然后其他的就和普通的 Blazor 项目一样。

搭建项目基础架构

本文限于篇幅,只能简单介绍一下。

想要进一步了解的同学可以看官网的指引文档和实例项目。

不过微软官网关于这方面的文档也不是很详细,只是浅尝辄止,很多内容要靠自己摸索。

index.html

按需添加了各种 css 和 js 引用

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <title>Clipify</title>
    <base href="/"/>
    <link href="css/app.css" rel="stylesheet"/>
    <link href="css/tailwind.min.css" rel="stylesheet"/>
    <link href="lib/font-awesome/css/all.min.css" rel="stylesheet">
    <link href="_content/AntDesign/css/ant-design-blazor.css" rel="stylesheet" />
    <link href="Clipify.Forms.styles.css" rel="stylesheet"/>
  </head>

  <body>

    <div id="app">Loading...</div>

    <div id="blazor-error-ui" data-nosnippet>
      An unhandled error has occurred.
      <a href="" class="reload">Reload</a>
      <a class="dismiss">

标签:string,新体验,缩略图,Hybrid,PC,var,Blazor,public,MD5
From: https://www.cnblogs.com/deali/p/18455870

相关文章

  • 手把手教你学PCIE(6.9)--驱动程序开发实例的网络设备驱动程序开发
    目录1.开发环境准备1.1安装开发工具1.2创建项目目录2.驱动程序代码2.1驱动程序头文件2.2驱动程序主文件3.编译驱动程序4.加载和卸载驱动程序5.测试驱动程序6.总结开发一个网络设备驱动程序是一个复杂的任务,涉及到网络协议栈的集成和硬件设备的管理。在......
  • 【gRPC】2—gRPC与PB&桩代码生成与扩展
    gRPC与PB&桩代码生成与扩展⭐⭐⭐⭐⭐⭐Github主页......
  • 基于yolov8、yolov5的PCB板缺陷检测系统(含UI界面、数据集、训练好的模型、Python代码)
    blog.csdnimg.cn/direct/6f53422ed9fd44dc8daad6dc5481c4c9.png)项目介绍项目中所用到的算法模型和数据集等信息如下:算法模型:  yolov8、yolov8+SE注意力机制或yolov5、yolov5+SE注意力机制,直接提供最少两个训练好的模型。模型十分重要,因为有些同学的电脑......
  • The 2023 ICPC Asia Hangzhou Regional Contest (The 2nd Universal Cup. Stage 22: H
    The2023ICPCAsiaHangzhouRegionalContest(The2ndUniversalCup.Stage22:Hangzhou)M.V-Diagram题意:给定一个“v图”,求平均值最大的子"v图"思路:原图的最低点以及左右两个点必须取,如何先取满左边或者右边在贪心即可voidsolve(){lln;cin>>n;vect......
  • 剪映国际版 CapCut 序列号
    CapCut是剪映的国际版本,操作和各种功能几乎和剪映一模一样,是一款优秀的视频剪辑软件。该版本已内置序列号,可以使用全部功能。使用说明:1、将压缩文件解压到某固定位置,不要随意移动。2、解压后,双击start_CapCut.bat来运行软件下载地址:https://www.mediafire.com/file/289......
  • PCB大神的设计经验,都是干货
    它不仅关系到电路的性能,还直接影响到产品的可靠性和生产成本。以下是资深PCB设计师在实战中积累的宝贵经验,旨在指导新手避免常见陷阱,提升设计质量。1.FPGA器件的管脚规划在涉及FPGA的电路设计前,使用QuartusII等软件进行管脚分配验证是必不可少的步骤。某些FPGA管脚具有......
  • 基于GA遗传优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
    1.算法运行效果图预览(完整程序运行后无水印)  2.算法运行软件版本MATLAB2022A 3.部分核心程序(完整版代码包含详细中文注释和操作步骤视频)figureplot(Error2,'linewidth',2);gridonxlabel('迭代次数');ylabel('遗传算法优化过程');legend('Averagefitness'......
  • 2023 ICPC 南京
    10.5想要袋鼠。赛时5题深刻感觉到代码能力瓶颈。I签到C也是签到,需要枚举的次数很少。F似乎是签到但是队友debug卡了一百年,晚点补一下看看Gxixike秒的L思路就是贪心。我写了两遍错的,xixike重构了一下把能合并的都合并了就过了。A比较显然的是连通块里面的袋鼠都胜......
  • 2022 CCPC 绵阳AE
    2022CCPC绵阳A.BanorPick,What’stheTrick?题面描述:红蓝双方有一个大小为nnn的英雄池,每次操作一方可以选择一个英雄或者......
  • 2021 ICPC 南京
    10.7赛时四题,也是可能是赛前最后一场vp,国庆爽vp了4场但是似乎毫无长进。这场其实7题思路都有开出来,但是由于我睡着了没能阻止队友连开两小时J所以浪费太多时间。。感觉D和I都比J简单(大概24级军爷都要开始军训了,然后我在机房军训,大家都有光明的未来。A签到M选取一个最大值一......