record-camera-and-screen/zongjie.txt

71 lines
7.9 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

录制项目终于做完,不用总是提醒自己抓紧时间这样来想问题了。
在完成之后带着一些满足感回头看看哪些地方是需要改进的哪些地方又是有更好的替代方案自己又有哪些不足如果未来能够从事PyQt的开发该怎么深入的学习
下面就按照软件的各部分分别做作总结:
0.软件应用场景:客户希望用视频+音频的方式录制下会议的内容。除了录制会议室情况之外会议中还有可能需要录制电脑屏幕内容比如在做PPT讲解等所以需要一个在两种
录制方式之间快捷切换的软件。除此之外,需要一个防止复制运行的机制和完整的安装包。
1.核心subprocess子进程运行控制。描述代码逻辑结构、方法功能。
由应用来看关键是录制屏幕和录制摄像头以及用快捷键控制在这两者之间切换。我的实现是通过python3调用ffmpegffmpeg实现录制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不能再忘。以下自己按照使用逻辑再手敲一遍常用gitversion: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占用率 、文档归类、简化总结发布到知乎、客户满意度