Enki's Notes


  • 首页

  • 分类

  • 归档

  • 标签

  • 关于

macOS 开启 Web 服务器

发表于 2019-07-11 | 分类于 知识整理/总结 | 阅读次数

macOS 系统下自带了 Apache 和 PHP 环境,如果有需要的话,以下命令来控制服务器的启动、重启与停止:

1
2
3
4
5
6
7
8
# 启动 Apache 服务器
$sudo apachectl start
# 重启 Apache 服务器
$sudo apachectl restart
# 停止 Apache 服务器
$sudo apachectl stop
阅读全文 »

mac 平台 git 命令自动补全

发表于 2019-06-05 | 分类于 知识整理/总结 | 阅读次数

安装 brew

如果有安装 brew 则跳过该步骤,执行如下命令进行安装:

1
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安装 bash-completion

执行 brew list 查看是否安装了 bash-completion 如果没有则执行以下命令进行安装:

1
$ brew install bash-completion
阅读全文 »

方差、标准差、均方差、均方误差

发表于 2018-12-14 | 分类于 机器学习 | 阅读次数

方差是在概率论和统计学中衡量随机变量或一组数据时离散程度的度量。概率论中方差用来度量随机变量和其数学期望(即均值)之间的偏离程度。统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数。方差可以用来描述变量的波动程度。

方差在统计学和概率分布中各有不同的定义,并有不同的公式。在统计学中,方差用来计算每一个变量(观察值)与总体均数之间的差异。为避免出现离均差总和为零,离均差平方和受样本含量的影响,统计学采用平均离均差平方和来描述变量的变异程度。总体方差计算公式:

阅读全文 »

同步 WebRTC 主仓库

发表于 2018-11-14 | 分类于 音视频/WebRTC | 阅读次数

之前在 WebRTC iOS&OSX 库的编译 介绍了如何下载和编译 WebRTC 的源码,但是很多时候可能只需要查看最新 WebRTC 的源码,并不需要下载庞大的第三方库以及编译依赖。

WebRTC 的仓库是使用 Git 来管理的,地址为 https://chromium.googlesource.com/external/webrtc/ 所以我们只需要 clone 到本地就好了(前提得备好梯子),如下命令:

阅读全文 »

Mac OSX 鼠标键盘事件的监听和模拟

发表于 2018-09-12 | 分类于 知识整理/总结 | 阅读次数

最近完成了 Mac OSX 平台下的远程控制功能,期间找了不少资料,这里做个总结,主要涉及到一下知识点:

  1. OSX 的事件机制
  2. OSX/iOS 响应链者链
  3. 鼠标事件的监听及模拟(鼠标单击、双击、拖动、滚动等事件)
  4. 键盘事件的监听及模拟(包括组合键的模拟)
  5. Keycode 键盘编码(统一 Windows、OSX、浏览器端键盘按键的编码值)

事件分发机制

在 OSX 系统中鼠标和键盘的活动事件都会产生底层的系统事件,首先传递到 IOKit 框架处理后存储到队列中,通知 Window Server 服务层处理。Window Server 存储到 FIFO 优先队列中,然后逐一转发到当前活动窗口或者能响应这个事件的应用程序去处理。

阅读全文 »

H264/SVC Temporal Scalability

发表于 2018-05-23 | 分类于 音视频/WebRTC | 阅读次数

在多人远程会议或直播系统中,参与的用户可能处于不同的网络环境(有线、Wifi、3G、4G)中,网络质量各不一致,为了所有用户可进行远程会议或者直播的观看,简单的做法就是降低发送端的视频码流,这样不管网络质量好坏,参与的用户都将观看低码率的视频流。这种方案缺点在于大部分网络较好的用户会被少数的网络较差的用户给拖累。这里介绍 H264 编码器中的 Temporal Scalability 机制来优化该方案。

Temporal Scalability 是 H264/SVC 编码器中的概念,意思为时间上可伸缩的,在实际编码中编码器进行了分层编码,可简单的理解为 编码器对同一组输入的数据进行编码,可以输出不同帧率的码流,例如当前编码器输入帧率为 30fps 的流,编码器可同时输出多个码流,例如同时输出 3 层码流,从而可以得到不同帧率的码流。

阅读全文 »

Apple 平台下的 VideoToolBox 框架

发表于 2018-03-24 | 分类于 音视频/WebRTC | 阅读次数

VideoToolBox 是一个低级的框架,可直接访问硬件的编解码器。它能够为视频提供压缩和解压缩的服务,同时也提供存储在 CoreVideo 像素缓冲区的图像进行格式的转换。该框架在 iOS(8.0)/macOS(10.8)/tvOS(10.2) 以后才被开放出来,在这之前都是不能使用的。

VideoToolBox 框架为我们提供的接口都是以 C 语言函数形式提供的,并且以会话 Session 方式来进行管理,这些接口分为以下几个类别:

  1. VTCompressionSession:提供数据压缩的会话
  2. VTDecompressionSession:提供数据解压缩的会话
  3. VTPixelTransferSession:提供数据格式转换的会话
  4. VTMultiPassStorage&VTFrameSilo:提供多通道压缩的会话
  5. VTSession&Utilities:针对会话的管理以及辅助的函数

这里主要针对 VTCompressionSession 以及 VTDecompressionSession 两个方面的介绍。由于 VideoToolBox 可进行多种格式的压缩以及解压缩,下文都是以 H264 编码格式进行介绍和举例。

阅读全文 »

C++ 实现的 Dispatch Queue

发表于 2018-03-10 | 分类于 开发笔记 | 阅读次数

iOS/Mac 平台下 apple 提供了非常好用的 dispatch_queue 能够很方便的进行线程的管理以及各个线程之间的切换(当然还有很多其他特性)。虽说 C++ 的标准库中提供了很多线程管理的方法,但相比于 dispatch_queue 还是弱爆了。由于项目中会经常用到,GitHub 上找了一些类似的实现都不太理想,于是自己实现了一版简单的主要支持一下特性:

  1. 支持并发调用,并支持并发的任务处理
  2. 支持任务的同步执行和异步执行
  3. 可创建指定数量的任务线程
  4. 执行同步任务时,在任务线程中可继续执行同步任务而不卡死
  5. 同一任务可重复执行
  6. 支持 lambda 表达式
  7. 支持任务线程的安全退出
阅读全文 »

Android 对 C++ Runtime 的支持

发表于 2017-12-20 | 分类于 开发笔记 | 阅读次数

近期将项目中的 webrtc 代码与官方最新的 m63 分支进行了同步,由于之前的代码比较老,这次升级后,webrtc 的代码结构相对来说有了很多的调整和变化,再加上对 webrtc 代码的修改和代码的添加,索性依照 m63 分支的 gn 脚本使用 cmake 重写了 webrtc 的编译脚本。在编译 android 平台时遇到一些 c++ 标准库中的函数无法进行链接的问题,于是了解了一下 android 对 c++ 标准库的支持。

Android 对 C++ 基础库的实现有多个版本,具体的版本可以在 NDK 目录下的 sources/cxx-stl 子目录中查看,我当前使用的版本是 android-ndk-r12b 子目录内容如下:

阅读全文 »

图像编码与 H264 基础知识

发表于 2017-11-26 | 分类于 音视频/WebRTC | 阅读次数

RGB 颜色模型

图像的采集可以通过摄像头或者截取屏幕来获取的图像数据。一幅图像可以看作为一个二维的矩阵,其中矩阵中的每一个点被称为像素。像素的颜色可以通过红、绿、蓝来表示,也就是常说的 3 基色。如下图所示:

Alt text

每个像素可以用不同的数据位数来表示,常用的量化位数有 16 位、24 位、32 位等,24 位最好理解,就是 RGB 的各个分量各占 8 位,取值范围为 0 ~ 255;32 位则是 24 位的基础上增加了透明度的量化位数,也是 8 位,用来表示当前像素的透明度,根据透明的位置可以分为 RGBA 和 ARGB;16 位可以分为 565 和 555 两种模式,565 则表示绿色分量占 6 位,红色和蓝色各占 5 位,555 模式则丢弃一位不用,RGB 各个分量占 5 位。量化位数越多,所能表示颜色的层次也越多,颜色则越丰富。

阅读全文 »
123
Enki

Enki

说过很多潇洒的话,做过很多打脸的事

28 日志
5 分类
35 标签
RSS
GitHub
© 2019 Enki
由 Hexo 强力驱动
主题 - NexT.Mist
本站总访问量 次 本站访客数 人次