羽云录屏 是一个强大的录屏 外壳 程序,提供了尽可能丰富的机制以及插件系统,来实现一个强大的录屏交互完成录屏任务。
这里先说明一下什么是 外壳程序 。所谓的外壳程序就是它不实现任何本质功能,也就是说,虽然该软件叫 羽云录屏 ,但是它没有实现任何录屏功能,它提供了一系列的接口和约定,通过本身强大的插件系统,让更多的开发者专注于录屏功能实现和细节优化上,而不是拘泥于UI
的实现细节上。只要你提供的录屏功能有多强大,我的程序就有多强大。
之前在找强大的录屏软件的时候,看到迅捷录屏。功能强大易用,但缺点从用户体验来看就是广告横飞,据说开会员的话可以解锁所有功能。在我翻看它的文件夹的文件结构看到了duilib
和ffmpeg
,就感觉事情有点不简单。然后简单的用PE
分析工具很容易判断出它用的是商业授权的录屏SDK
,利用开源项目来构建。分析到这里,我就有一个大胆的想法。
现在开源社区里面简单的录屏软件不多,功能不太强大,在用户体验上有一定差距。有一个强大的直播推流软件OBS
可以录屏,但需要一些设置,比较专业。那我开发出一个插件系统,让专攻于录制引擎的开源贡献者一起来共同维护一个强大易用的录屏软件。
开发者为 寂静的羽夏 ,英文网名为 wingsummer (大小写不区分,但会写成wingsummer
、Wingsummer
或WingSummer
形式)。本程序为本人的业余时间编写,花费了11
天的时间(仅UI
设计和代码编写),里面花费了我大量的心血。请大家严格遵守我的源代码开放协议,共同为构建开源社区贡献自己的力量,而不是去做一个只想白嫖吸血的白眼狼,丢脸丢到国际化,引起开源社区代码贡献者的公愤。
由于里面用到了很多来源于开源社区的组件,有些组件是以源代码的形式嵌入到该项目中的。当然这些组件基本都经过了一些调整来适配我的项目,但为了尊重原作者,属于原作者的部分仍保持原有协议。但并不是意味着,我进行大量改写的部分仍遵循原协议。所以,该项目遵守的协议是以非商用源代码开放的AGPL-3.0
开源许可协议为主,以其他开源协议为辅的。具体详情请见下面的说明:
对于如下代码文件,遵循本仓库的AGPL-3.0
协议:
- WingRecorder:
- MainWindow.xaml
- MainWindow.xaml.cs
- RecordingRegionWnd.xaml
- RecordingRegionWnd.xaml.cs
- RegionSelectorWindow.xaml
- RegionSelectorWindow.xaml.cs
- SettingWindow.xaml
- SettingWindow.xaml.cs
- SoundCustomWnd.xaml
- WndMsgBox.xaml
- WndMsgBox.xaml.cs
- WingScheduler.cs
- WingAddinSystem.cs
- Utilities.cs
- UserConfigHelper.cs
- RecordingCenter.cs
- LanguageManager.cs
- HotkeyManager.cs
- DataResource.cs
- FontDiag.xaml
- ColorPicker:
- StandardColorPicker.xaml
项目文件如果上述没有任何提及,全部遵循原组件协议。如果是我本人编写的项目,比如IWingRecorder
,考虑到开发者的以后对自己开发的插件进行收费的可能情况,将遵循MIT
协议。
从解决方案的结构来看,它有5个子项目来实现该项目的功能,全部采用WPF
,C#
语言进行开发。下面我将详细介绍一下它们的职能:
该项目是从 PixiEditor / ColorPicker 叉来的,遵守MIT
协议,虽然功能强大,但它的UI
处理有点BUG
,容易导致元素溢出窗体的显示范围,本人用了两三个小时对它的UI
排版进行了重构并对它和我的软件的主题适配。由于UI
设置花费了我不少时间,故StandardColorPicker.xaml
文件遵守本仓库协议,其他遵守原仓库协议,鸣谢Equbuxu
等开发者提供了如此优秀的组件。
进行WPF
开发的都清楚,它并没有提供原生的文件夹选择通用对话框,但用Winform
的太丑,连系统自带的风格都没有。该项目是提供Vista
样式的通用文件夹选择对话框,它的原仓库为baiyanzhao/FolderBrowserForWPF ,感谢BaiYanzhao
等开发者提供的优秀组件,该组件本人没有任何修改,故遵守原仓库的MIT
开源协议。
该项目是由全部由本人开发,是插件开发使用的协议,后期会考虑添加一些SDK
函数简化开发。由于本仓库采用的协议具有强传染性的开源协议,鉴于尊重一些开发者的合理诉求,故采用MIT
协议。
从名字就可以看出,这个就是测试插件,里面的代码为正确的开发插件提供了一个很好的最简单的开发示例,由于比较简单,但有些功能比较实用,就采用MIT
协议。注意:该插件含有虚拟的录制引擎,也就是说,该插件并没有实现任何录制功能,所有的操作都是模拟的。
这个是项目的主程序,虽然代码文件不太多,代码量不算太大,但功能错综复杂,具体细节将会在我的博文后续讲解,以让开发者学习我设计软件的设计思想和实现或者开发更好的录制引擎插件为开源社区贡献自己的力量。在这里鸣谢Captura
项目,有些的代码是从上面参考,解决Bug
和代码简化再适配实现该程序的某些必要部分。下面仅介绍项目代码来源和结构:
这个文件夹存放着所有的类,每一个类具有自己负责的功能,具体详解在后续博文。
FontDialog 同理,WPF
也没有提供字体选择功能,它项目来源 Denny / FontsDialogWPF,据说它的根源来自 MSDN 博客 ,但目前直接404
了,本人仅对它的UI
进行重新排布,删除了一些不必要的代码和我不需要的功能,故FontDiag.xaml
遵循本仓库协议,其他全部遵循原仓库MIT
协议,感谢原作者。
该项目的语言文件,只提供了中文简体版本。
Window本程序的所有窗体文件都会放在这里,全部由本人设计编写。
鸣谢 还有一些开源组件是通过Nuget
包引用的,感谢开发者提供如此优秀的组件:
- Hardcodet.NotifyIcon.Wpf :提供系统托盘功能,项目地址为 https://github.com/Federerer/Notifications.Wpf ,感谢 Federerer 等开发者。
- Newtonsoft.Json :十分有名的高性能
Json
序列化组件,项目地址为 https://github.com/JamesNK/Newtonsoft.Json ,感谢 joperezr 等开发者。 - Notifications.Wpf :提供右下角弹窗信息,项目地址为 https://github.com/Federerer/Notifications.Wpf ,感谢 Federerer 等开发者。
如下是项目实现截图:
主界面
设置——通用
设置——录制
设置——水印
设置——插件
设置——关于
关于 UI 说明 由于有些元素借鉴迅捷录屏,所以有些元素设计有相同相似的部分,有些图标来源于该软件本身。但是,有些图标是由本人从iconfont
和自己稍微修改设计,所有的排版都是由本人进行的。
这套UI
是我之前由本人设计过,只是开始WPF
占用比较大,当时自己水平不够,设计热键调用程序没能够开源。现在WPF
占用也不太大了,使用我的虚拟测试引擎的程序最大使用40MB
大小的内存,比之前刚出来时候一个空窗体的上百兆字节好多了。
虽然该软件设计基本差不多了,但还有一些增强用户体验的小功能还没有完善,但无伤大雅了。插件系统和接口设计还需要大家设计插件时的检验和需求,这需要大家共同的努力。
注意事项 插件系统采用不兼容式设计,与宿主版本号不同的插件一律不加载,因为我学习MEF
来实现的插件系统,没有找到方便快捷的方式来实现。如果想要提相关的需求,必须带上源代码,否则本人不再考虑。
对于如下需求,本人一概不考虑,如果有需要请自行实现或者找其他仓库:
- 开发一个具有录屏功能的插件
- 让软件支持皮肤系统
- 翻译其他语言,虽然该软件实现了多语言的基础
- 插件系统兼容老版本插件
本人没有精力和能力来开发上述需求。
打赏支持如果你觉得该软件设计的不错,欢迎在在仓库给个 star ,如果有闲钱欢迎捐助。你的支持是我维护该软件的动力:
支付宝
微信
鸣谢大家的支持!!!
仓库Gitee :https://gitee.com/wingsummer/wing-recorder
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可