一些有趣但又值得思考的事情

引子

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.

-- Martin Fowler

作为程序员,我猜,当看完这句话后,你肯定会觉得这句话是对的,但是不见得会由衷的信服这句话。我还猜,你一定在想,Martin Fowler 究竟是谁呀?

阅读更多...

为什么 OpenCV 计算的视频 FPS 是错的

我们有一个平台来周期性的对线上的直播流数据进行某些检测,例如黑/白屏检测、静态画面检测……在检测中,我们会根据提取到的直播流的帧率来预估要计算的帧数量,例如如果要检测 5s 的直播流,而该直播流的帧率为 20 fps,需要计算的帧数量则为 100。忽然有一天,我们发现,平台开始大面积的超时,之前只需要 2s 就能完成的计算,现在却需要 30+ 分钟。查了之后,我们发现,之所以计算超时是因为 OpenCV 计算的帧率为 2000,从而导致需要计算的帧数量从之前的 100 变为了 10000,进而引起了计算超时。

阅读更多...

Chrome浏览器中的视频解码硬件加速

Google Chrome version history 可以知道,2011 年 3 月 发布的 10.0.648 版本的 Chrome 浏览器就已经支持视频的硬件加速能力。从 chromium/chrome 88 开始,视频的硬件加速已经成为默认配置

即便如此,因为视频的硬件解码需要 GPU 的特殊支持,而目前的视频编解码标准又比较丰富,我们如何判断 Chrome 在解码视频的时候是否启用了硬件加速呢?

阅读更多...

在解决问题之前首先要正确的定义问题

多年以前,我阅读了一本至今都让我受益匪浅的书:《你的灯亮着吗?》。工作中,我总会按照书中的内容来训练自己解决工作中遇到的问题。作为一名测试开发工程师,在定位 BUG 时,我也会用到该书中介绍的问题解决思维模式。

在这本书的第一章「这是谁的问题」中提到:

初出茅庐的问题解决者总是在还没有定义好问题的时候就仓促的给出解决方案。迫于外界环境的压力,经验丰富的问题解决者有时也耐不住性子。在这种情况下,尽管他们能找到很多方法来解决问题,但是不一定对症。

我们一直在孜孜不倦的追求解决问题的方法、策略、妙招,却从来没有仔细想过,问题究竟是什么?

阅读更多...

如何阅读并使用开源项目

我会经常浏览并借鉴很多开源项目的代码来完成自己的工作,有很多时候这种方法让我的工作效率非常高。阅读并借鉴开源项目的成果,让我得以站在巨人的肩膀上,使得我可以更高效的工作。

不知道你也是否和我一样?如果你也和我一样,那么我们是否思考过?我们在引用别人的代码完成自己的项目时,我们的项目是否变成了一个如下图所示的四不像呢?

阅读更多...

用 FFmpeg 把以秒为周期的帧序号信息写入到视频

利用 FFmpeg 的 drawtext 滤镜,我们可以把特定的文本信息绘制于视频之上。FFmpeg 的 drawtext 滤镜可以绘制的文本信息可以参见文档 Text expansion 中的描述。例如,我们可以把视频的帧号信息描绘在视频上:

1
$ ffmpeg -i test.mp4 -vf drawtext=text=%{n}:x=50:y=50 -y output.mp4

有时候,我们想绘制一些特殊的内容,比如:当前帧是每秒中的第几帧?这是一件有趣的事情,但是 drawtext 却没办法支持这种内容的绘制。在大多数场景下,我们几乎用户到这种特殊的功能,但是,如果遇到了,我们如何解决呢?

阅读更多...

视频压缩标准发展简史

多年以来,人们设计出许多不同的算法来压缩视频。视频压缩虽然听起来是一个很现代的词,但其实它从模拟视频开始,已经有很长的历史了。在本篇文章中,我会向大家一一介绍视频压缩史上的里程碑事件,正是这些事件的发生才有了今天的视频压缩。从过去到现在,各类视频压缩方法由最初的概念最终演化成现今的标准。很多压缩标准今天还在使用,人们也一直在继续开发和完善新的标准。[1]

本文仅仅是对文献[1:1]的进一步整理,用时间轴的形式把视频压缩算法的演进历程更好的表现出来。

帧间压缩首次出现

英国的 R.D. Kell 提出将帧间压缩用于模拟视频,这一概念随后便延续下来并应用在今天的数字视频上。

1929

差分脉冲编码调制

阅读更多...

GraphQL 实践

纸上得来终觉浅,绝知此事要躬行。

GraphQL 初探一文中,对 GraphQL 进行了初步的介绍和分析。在对 GraphQL 有了一定认识之后,总想着能在实践中真正的体验一下 GraphQL。实践是检验真理的唯一标准嘛,与其轻信与网络上的各种对比分析,倒不如真正的去体验一下。

恰好近期有一个小型的项目需要优化,于是就在该小型项目基础上实践了 GraphQL。之前,该项目是基于 django 框架开发的 REST API,此次实践,采用 Graphene-Django 为该项目增加了对应的 GraphQL API。

阅读更多...
  • Copyrights © 2020-2024 wangwei
  • 本站访问人数: | 本站浏览次数:

请我喝杯咖啡吧~