dev
parent
aed1f7a534
commit
a69560168e
|
@ -0,0 +1,70 @@
|
|||
录制项目终于做完,不用总是提醒自己抓紧时间这样来想问题了。
|
||||
在完成之后带着一些满足感,回头看看哪些地方是需要改进的,哪些地方又是有更好的替代方案,自己又有哪些不足?如果未来能够从事PyQt的开发该怎么深入的学习?
|
||||
|
||||
下面就按照软件的各部分分别做作总结:
|
||||
0.软件应用场景:客户希望用视频+音频的方式录制下会议的内容。除了录制会议室情况之外,会议中还有可能需要录制电脑屏幕内容,比如在做PPT讲解等,所以需要一个在两种
|
||||
录制方式之间快捷切换的软件。除此之外,需要一个防止复制运行的机制和完整的安装包。
|
||||
1.核心:subprocess子进程运行控制。描述代码逻辑结构、方法功能。
|
||||
由应用来看,关键是录制屏幕和录制摄像头,以及用快捷键控制在这两者之间切换。我的实现是通过python3调用ffmpeg,ffmpeg实现录制,python来完成切换。从开发角度来说,
|
||||
并不算难,抛去录制这个功能,这个软件实际上应该这样描述:python完全控制ffmpeg.exe进程的应用。进一步地说,ffmpeg能做到的,软件大部分都可以做到,不同的是可以
|
||||
添加快捷键控制等,可以用python对除了ffmpeg功能之外做一些必要的补充。比如,客户在需求实现之前测试发现win10系统下自买的摄像头运行时间长了之后会随机的中断录制,
|
||||
卖家也无办法解决,因为是win10系统兼容性问题。所以客户提出在录制异常中断的情况下,能够自动重新开始录制。这个需求的满足就依赖python对ffmpeg的补充。另外,完全
|
||||
控制ffmpeg进程关键在于如何自然退出,ffmpeg在cmd运行按下q键是退出,利用这一点往子进程输入流写入'q'实现了自然退出,保证了数据的正常写入和保存,并且不会引发异常
|
||||
情况。如果不得益于这一点,用os.kill(process_id)等方式都很难去控制进程的正常退出。
|
||||
.界面和pyqt5:
|
||||
界面相当的简单,主界面是一个按钮+录制时间显示。程序主要的录制状态变化通过托盘图标的来展示。为了尽可能少的让主界面出现在录制内容中,当失去焦点时,窗口就会隐藏。
|
||||
界面实现用的是pyqt5,因为以前自己做过c#的winform和java的swing开发,界面的处理逻辑又大同小异,所以参照着qt的文档这块能够比较顺手的处理。pyqt源自qt,qt的文档非常全
|
||||
面,在写pyqt代码时注意一点与c++语法的区别就好了。如果能够更深入的用pyqt开发,有想过写一篇《qt大局观》的总结,就是整理一下图形界面开发的模型以及与qt相比的相同点
|
||||
不同点,帮助从其他语言切换到qt或者新学习qt的开发人员在查询文档之前有更清晰的思路。比如都是基于事件驱动,通常有哪些常用或特别的控件?每个或某类控件都有哪些通用的
|
||||
事件?窗体加载机制有何不同?在qt开发时又是怎么样的? quitOnLastWindowClosed()的效果是怎样的?会带来什么问题?qt的信号槽机制相比winform事件机制有何不同?等等。
|
||||
.简易的防复制运行机制
|
||||
这个机制的目的是限制不是通过安装包安装的,运行都要受到限制。限制条件是超过三个月快捷键失效。实现分两步:1.安装时在注册表特定位置,假如是A,写入目录相关信息。
|
||||
2.在程序运行时,检测当前目录是否存在于注册表A下。具体实现时,A位置下保存两类信息,一类是正常安装的目录,比如以'INSTALL+时间'为键名称,值为安装目录,时间用以区分
|
||||
多次安装;另一类是在非安装目录第一次运行的时间,实际就一个而且不可改变,这样保证了所有非安装目录都有同一个时间限制基础。更完善的实现应该对所有的键值加密处理。
|
||||
.小功能点:快捷键、
|
||||
.软件打包,包括cx_freeze编译和inno setup打包正安装文件。【自启动】
|
||||
这是第一个有自己署名的软件,也是第一次从无到有完整的做出一个软件。软件打包分成了两步:1.用cx_Freeze将python代码编译为exe文件。编译python代码为exe一般常见的工具有
|
||||
py2exe、pyinstaller、cx_Freeze等,因为这次开发用的python3.6,而只有cx_Freeze对3.6支持最好,所以自然也就用了cx_Freeze。原本网上的教程看到cx_Freeze也是可以定制打包复
|
||||
杂安装文件的,但是在自己的实验过程中始终在access数据库相关的模块报错。使用bdist_msi生成的简单安装包不够用,而且中文支持不好。然后仔细看过一篇文档,发现cx_Freeze推荐
|
||||
的inno setup。2.用inno setup定制软件安装包。按照inno setup默认的生成安装包向导实验一遍后,发现这东西太强了太好用了,前面花在cx_Freeze上折腾的时间简直是浪费。inno setup使用
|
||||
类似配置文件的结构来定制安装包所需要的功能。最常用的应该是[Tasks]即任务节点,在该节点下面定义安装包需要执行的任务。任务属性有名称、描述、触发条件、可选属性等,
|
||||
其他节点可通过任务的名称来关联任务。比如给用户添加是否开机启动的选择项,首先定义任务:
|
||||
[Tasks]
|
||||
Name: "startupicon"; Description: "开机启动"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
|
||||
然后,当这个任务startupicon被选中需要执行时,在用户电脑的启动目录添加快捷方式:
|
||||
[Icons]
|
||||
Name: "{userstartup}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: startupicon
|
||||
这里[Icons]节点和[Tasks]关联起来的属性就是[Icons]的Tasks: startupicon。其他的[Files][Registry]等节点也可以用同样的方式关联任务。
|
||||
一个完整的inno配置文件的逻辑性非常简洁。让我觉得它很强大的另一个原因是inno自带一个叫Pascal的脚本语言,这可就让可定制性直接上升一个台阶。Pascal不仅内置常用的函数,
|
||||
还可以自己写Pascal代码。看过示例脚本过后,也就不难想象为什么现在的下载网站下载下来的安装包有各种各样的广告是怎么实现的了。
|
||||
.不能再忘的git
|
||||
版本管理软件对开发人员来说就像一个保险柜一样,重要性不言而喻。以前自己总是零零碎碎的接触到git,始终没有用git真正的来管理一个项目,这次利用这个软件正好好好的学习
|
||||
用好git,不能再忘。以下自己按照使用逻辑再手敲一遍常用git(version:2.16.2.windows)管理命令及注释:
|
||||
git init 梦开始的地方
|
||||
git status 查看项目状态,使用率最高
|
||||
git add <file>/. 将文件修改让git管理
|
||||
git reset HEAD <file> 撤销git管理
|
||||
git checkout -- <file> 撤销修改(未add之前)
|
||||
|
||||
git rm [-r] <file> 删除git已管理的文件,撤销删除跟撤销修改一样,文件被删除
|
||||
git rm [-r] --cached <file> 撤销git已管理的文件,文件仍存在
|
||||
|
||||
git commit -m '注释' 提交修改并备注修改缘由
|
||||
git log 提交记录
|
||||
git reflog 命令历史记录
|
||||
git reset --hard HEAD^^/HEAD~2/commit_id 回退到上上个版本
|
||||
|
||||
git push origin master 将本地的修改推送到远程仓库origin下的master分支
|
||||
git pull origin master 与远程仓库origin下的master分支同步
|
||||
|
||||
git remote -v 查看远程仓库信息
|
||||
git branch 查看全部分支
|
||||
git branch <branch_name> 创建分支
|
||||
git checkout <branch_name> 切换到分支
|
||||
git checkout -b <branch_name> 创建分支并切换到该分支
|
||||
|
||||
|
||||
.configparser
|
||||
|
||||
.改进:完善快捷键、添加支付接口、录制状态切换音效和添加动画【学习pyqt的绘制】、视频输出优化:添加水印和标签等、界面美化:用圆形框取代方形按钮
|
||||
其他:cpu占用率 、文档归类、简化总结发布到知乎、客户满意度
|
Loading…
Reference in New Issue