`学习笔记`分类下的文章

学习笔记

利用FFmpeg处理鱼眼视频分成4个方向的视野画面

介绍

首先,FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它的功能强大,这里就不多做阐述了。

本次实验主要是为了学习FFmpeg的Filter功能,它提供了很多音视频的特效处理,比如:视频的缩放、翻转、叠加等等。常用的Filter有:

  • Scale:画面的缩放
  • Overlay:画面的叠加
  • Crop:画面的裁剪
  • More:查看更多

我们可以通过命令查看全部Filter的简介:

1
ffmpeg -filters

实验

原始材料

我们手里现在有一段鱼眼镜头录制的视频源文件,命名:original.mp4。我们先来看看它长什么样子:

out

尝试球形转方形

这一步,我暂时还没找到一个很好的方法把其展平成一个广角镜头全景的画面,但是我使用v360这个filter通过不断修改参数,得到了一个比较满意的部分画面的方形画面。

该Filter的基本参数格式如下:

1
v360=input:output:format_1:arg_name=value

其中inputoutput分别是原始投影格式和目标投影格式,这里我们是从鱼眼视频转换为常规视频,所以要填入的参数为:

1
v360=input=fisheye:output=flat # 都有哪些投影格式,可以通过ffmpeg -h filter=v360获取查看

format_1是指具体要设置的格式,这里我并没有用到。arg_namevalue指具体的参数项和值。

我的使用例子:

1
v360=input=fisheye:output=flat:ih_fov=180:iv_fov=180:h_fov=90:v_fov=60:w=720:h=360:pitch=45

解释一下,其中ih_foviv_fov分别表示设置的输入横向视野范围和输入纵向视野范围,我这里都设置为180度;h_fovv_fov分别表示设置的输出横向视野范围和输出纵向视野范围,我这里设置横向90度,纵向60度。然后还设置了输出画面的宽高为720x360,俯仰旋转角(pitch)为45度。

我的个人理解(个人瞎猜),就如同人眼可接受光的范围,理论上横向和纵向都能够覆盖180度的范围,但是我们在眼球不转动的情况下,有效的水平视野大概是90度,纵向视野60度。因为这个是我具体调参的出来的个人觉得比较好的参数条件,所以不具有权威性!哈哈!

那么现在能输出一个什么样的画面呢?

up

Nice!这就已经很像一个普通摄像头的画面了。那么如何得到其它几个方向的画面呢?前面我们有提到,FFmpeg可以使画面旋转!如果我先将原始画面旋转一下,让其它几个方向的画面都转到上面,然后转换画面不就行了吗?

画面旋转

FFmpeg有个Filter叫做transpose。它可以非常简单的完成画面的旋转或翻转:

阅读剩下更多

利用FFmpeg处理鱼眼视频分成4个方向的视野画面
学习笔记

自建CA服务器学习笔记

​ 我人生中的第一次遇到证书问题并加以解决,还是在大约3年前,那时还专门写了一篇文章《解决Chrome更新到63后.dev/.app后缀域名强制HTTPS的问题》。当时是因为本地开发环境一直都是用的.dev后缀结尾的域名,一直都是以http://www.test.dev的方式进行本地web开发。那天浏览器突然提示访问不安全的网站,此处黑人问号?? Chrome强制.dev后缀的域名都得走https,无奈之下,不想更换后缀的我走上了自签发https证书的道路,但当时直接使用了开源工具,并没有深入研究。

​ 日月如梭,今时今日的我已经不再是那个年少的小孩!日常工作中免不了与SSL/TLS这玩意儿打交道,除了访问web用https外,只要与建立加密连接有关的统统都少不了证书和秘钥。这次需要自建CA服务器并签发下级证书以达到加密访问的目的,那么这次的笔记将会成为以后温习的主要文献了。(哈哈哈)

阅读剩下更多

默认配图
学习笔记

ESP-Touch智能配网是如何实现的

写在前面

近年来物联网发展迅速,目前依旧是比较热门的领域,现今世界处处都是物联网,可谓无处不物联(哈哈,扯远了!)。我接触物联网这块比较晚,去年才开始入门,最早的实战项目就是将传感器上云,借助腾讯的物联网通信平台,我可以对传感器进行远程控制以及读取传感器采集到的数据。当然,这些都离不开网络(Internet)。设备上云的首要前提就是接入互联网,而接入互联网的方式有很多种(如:有线网络、无线WiFi、NB-IoT、移动蜂窝2G/3G/4G等),不同场景下自然有各自合适的网络接入方式。

我们现在生活中的很多智能家电都是通过WiFi接入的,不用我说大家也能举很多例子(像小米智能家居有小爱同学、空气净化器、电视、冰箱、洗衣机等blablabla~),这些设备刚到手的时候你一般都需要按照指导说明去下载个APP,然后绑定设备给设备配网,给设备配网可不像给手机连上WiFi那么容易,毕竟你买的小爱同学不能接鼠标键盘,也没有操作系统给你用。那么配网是如何完成的呢?

快速配网的两种途径:

  1. SoftAP配网
  2. SmartConfig配网

第一种很好理解,就类似给自己家里的路由器配置网络,你首先通过WiFi或者网线连接你家路由器,然后进入http://192.168.xxx.xxx进行Web可视化配置,也有一些小型单片机,自己搭载了一个WiFi模组以AP模式运行,你通过指定的APP就可以与其建立通信并发送配置信息过去。但是这种配网方式比较繁琐,用户体验较差。

第二种就比较高级了,你只需要打开设备的配网开关,并在你的手机上连接即将给设备配置的WiFi网络,然后在App或者小程序上输入对应的密码并点击开始,设备能够在很短的时间内(大约7~30s)就可以完成网络的配置。

这篇文章我将以我自己的学习成果来讲述SmartConfig配网的整个过程

阅读剩下更多

ESP-Touch智能配网是如何实现的
学习笔记

利用Dockerfile创建PHP7.3环境镜像

关于Docker以及Dockerfile

Docker容器就不详细介绍了,把它理解成类似“虚拟机”的一种介质吧。至于如何创建一个镜像,主要有两种方法:1. 从现有的镜像基础上,创建容器并自定义后Commit成镜像;2. 利用Dockerfile,根据自己的需要,如同写shell脚本一般,将自己需要搭建的容器环境所需的指令一条一条的汇集成指令集,然后让Docker根据Dockerfile来自动创建你想要的镜像

创建自己的PHP7.3镜像

下载PHP源码:https://www.php.net/downloads.php

我这里下载了php-7.3.6.tar.bz2

阅读剩下更多

默认配图
学习笔记

Go-Server/Client以及PHP-Client之间的GRPC初次尝试

写这篇笔记的目的

为了应对后续开发生涯中可能遇到的种种情况以及分布式计算的趋势(讲白了就是后续对工作会很有帮助)。如若总是依赖http-api/restful编写并提供外部调用接口,当接口数量不断上升,文档内容不断增加,这给设计者和使用者都带来非常不好的体验,而RPC在这体就现出了非常大的优势。我将自己的理解和体会以及学习的过程记录在这里,以便今后遇到问题能够从这儿获得些许的线索以及提供一个参考给同道中人。

前提

不妨思考这样一个情形:作为接口设计者,我早已经定义好的接口的请求方式(RESTFul)和返回结构(json),但是每个接口我还需要另外维护一个文档来说明各个接口的用法(请求参数)和解释返回的结果(字段描述)。而对于接口的调用者而言,不但要去文档中查找自己需要的接口并阅读说明,在实际调用中,还要以防接口提供者返回非既定结构的结果而导致的报错。

阅读剩下更多

默认配图
学习笔记

判断IP地址是否内网IP

当你的服务同时开放于公网和内网,子服务却仅允许内网访问,那么则会涉及到IP白名单的功能。但是如果名单太多或者服务进行了迁移,那么维护起来会相当的麻烦,最简单的就是判断访问的来源IP是否内网IP地址,从而直接屏蔽掉公网IP。

首先,我们认识了3类私有地址:

A类:10.0.0.0-10.255.255.255

B类:172.16.0.0-172.31.255.255

C类:192.168.0.0-192.168.255.255

还有一个本机地址:127.0.0.1

他们就是我们平时所谓的内网IP地址。

方法一: PHP自带函数

阅读剩下更多

默认配图
学习笔记

更新升级MacOSX到10.14 Mojave (MacBook Air 13-inch early 2014)

写在前面的话:

如果不是真的很需要,其实最好是不去更新系统,以免带来更多的麻烦。如果新的系统对你真的很重要,我也建议你备份现有数据,然后全新安装新的系统版本。我就是那个单纯的升级系统,导致原有的软件无法正常运行的傻逼,下面虽然记录了我的问题,但我最终的解决方案还是把软件卸载后重新安装和配置。

既然App Store推送了本次更新,我也就傻傻的更新了,谁知道会发生什么呢?

阅读剩下更多

默认配图
学习笔记

Linux下的安装Ngrok服务器的故事

使用场景

公司A是一家服务提供商,公司B是一家知名企业。
现在公司B中的一个软件服务出现了故障,需要公司A的专业人员来排查。由于两家公司相隔甚远,他们采用了远程排查方案。但是公司B的这个软件部署在内网环境的机器C上,层层网关以及种种原因(和谐部分)导致无法将机器C映射到公司B的公网端口。为了解决这种需要打通从一个局域网到另外一个局域网的网络通路,我们叫它‘内网穿透’。

总所周知,处在同一个局域网的所有机器是可以互通的,而不同局域网中的机器是无法跨域访问的。解决这种问题,我能想到的有:

  1. 交换机和路由
  2. 使用公网VPN服务器
  3. 使用内网穿透服务器

配置交换机和路由往往非常复杂,遇到复杂的组网环境,还是杀了我吧!

公网VPN服务器我也试过了,使用简单,但是稳定性得不到保证。

所以我最终尝试了内网穿透服务器:Ngrok。(当然还有别的比如:frp)

阅读剩下更多

默认配图
学习笔记

mysql中几种Log和打开方法

Mysql中常见的log有:错误日志log_error慢查询日志slow_query_log二进制日志bin_log通用查询日志general_log

错误日志(error_log)

这个日志记载mysql服务器的启动和关闭以及运行过程中发生的故障或异常情况,如果你发现mysql无法正常启动,那么你首先应该查看这个日志。

配置:

1
log_error = error.log

服务器上查询log位置:show variables like 'log_error'

慢查询日志(slow_query_log)

为了改善数据库性能,需要减少慢查询SQL的使用次数,那么哪些SQL需要改善呢?通过这个日志可以更清楚如何去改善。

配置:

1
2
3
slow_query_log = 1
lone_query_time = 10
slow_query_log_file = slow_query.log

二进制查询日志(bin_log)

Mysql的binlog日志作用是用来记录mysql内部增删改查等对mysql数据库有更新的内容的记录(对数据库的改动),对数据库的查询select或show等不会被binlog日志记录;主要用于数据库的主从复制以及增量恢复。

配置:

1
log_bin = mysql_bin.log

通用查询日志(general_log)

会记录mysql运行期间的所有sql语句

配置:

1
2
3
log_output=[none|file|table|file,table]  #通用查询日志输出格式
general_log=[on|off] #是否启用通用查询日志
general_log_file[=filename] #通用查询日志位置及名字

阅读剩下更多

默认配图
学习笔记

skip-name-resolve可以解决远程连接mysql数据库时候的缓慢或超时

  咳咳,迁了新的机器,全新的机器但是环境还是跟以前一样,基本没变过什么配置。但是远程连接mysql却很慢,甚至10s超时都还没连上!!! 当然,仅仅只是建立连接的时候,连接成功后一切操作都行如流水。

  所以最快最简单的方法就是直接在数据库的配置文件my.cnf|my.ini中添加一行skip-name-resolve来解决。

  其实mysql在用户登录建立连接的时候,会对客户端进行DNS反查,如果遇到服务器的DNS解析出现问题,那么就可能导致客户端迟迟连接不上。此方法可禁止mysql进行DNS反查从而解决了这个问题。

阅读剩下更多

默认配图
返回顶部