macOS 系统下自带了 Apache 和 PHP 环境,如果有需要的话,以下命令来控制服务器的启动、重启与停止:
|
|
macOS 系统下自带了 Apache 和 PHP 环境,如果有需要的话,以下命令来控制服务器的启动、重启与停止:
|
|
如果有安装 brew 则跳过该步骤,执行如下命令进行安装:
|
|
执行 brew list
查看是否安装了 bash-completion
如果没有则执行以下命令进行安装:
|
|
方差是在概率论和统计学中衡量随机变量或一组数据时离散程度的度量。概率论中方差用来度量随机变量和其数学期望(即均值)之间的偏离程度。统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数
。方差可以用来描述变量的波动程度。
方差在统计学和概率分布中各有不同的定义,并有不同的公式。在统计学中,方差用来计算每一个变量(观察值)与总体均数之间的差异。为避免出现离均差总和为零,离均差平方和受样本含量的影响,统计学采用平均离均差平方和来描述变量的变异程度。总体方差计算公式:
之前在 WebRTC iOS&OSX 库的编译 介绍了如何下载和编译 WebRTC 的源码,但是很多时候可能只需要查看最新 WebRTC 的源码,并不需要下载庞大的第三方库以及编译依赖。
WebRTC 的仓库是使用 Git 来管理的,地址为 https://chromium.googlesource.com/external/webrtc/ 所以我们只需要 clone 到本地就好了(前提得备好梯子),如下命令:
最近完成了 Mac OSX 平台下的远程控制功能,期间找了不少资料,这里做个总结,主要涉及到一下知识点:
在 OSX 系统中鼠标和键盘的活动事件都会产生底层的系统事件,首先传递到 IOKit 框架处理后存储到队列中,通知 Window Server 服务层处理。Window Server 存储到 FIFO 优先队列中,然后逐一转发到当前活动窗口或者能响应这个事件的应用程序去处理。
在多人远程会议或直播系统中,参与的用户可能处于不同的网络环境(有线、Wifi、3G、4G)中,网络质量各不一致,为了所有用户可进行远程会议或者直播的观看,简单的做法就是降低发送端的视频码流,这样不管网络质量好坏,参与的用户都将观看低码率的视频流。这种方案缺点在于大部分网络较好的用户会被少数的网络较差的用户给拖累。这里介绍 H264 编码器中的 Temporal Scalability
机制来优化该方案。
Temporal Scalability
是 H264/SVC 编码器中的概念,意思为时间上可伸缩的,在实际编码中编码器进行了分层编码,可简单的理解为 编码器对同一组输入的数据进行编码,可以输出不同帧率的码流,例如当前编码器输入帧率为 30fps 的流,编码器可同时输出多个码流,例如同时输出 3 层码流,从而可以得到不同帧率的码流。
VideoToolBox
是一个低级的框架,可直接访问硬件的编解码器。它能够为视频提供压缩和解压缩的服务,同时也提供存储在 CoreVideo
像素缓冲区的图像进行格式的转换。该框架在 iOS(8.0)/macOS(10.8)/tvOS(10.2)
以后才被开放出来,在这之前都是不能使用的。
VideoToolBox
框架为我们提供的接口都是以 C 语言函数形式提供的,并且以会话 Session
方式来进行管理,这些接口分为以下几个类别:
这里主要针对 VTCompressionSession 以及 VTDecompressionSession 两个方面的介绍。由于 VideoToolBox
可进行多种格式的压缩以及解压缩,下文都是以 H264 编码格式进行介绍和举例。
iOS/Mac 平台下 apple 提供了非常好用的 dispatch_queue
能够很方便的进行线程的管理以及各个线程之间的切换(当然还有很多其他特性)。虽说 C++ 的标准库中提供了很多线程管理的方法,但相比于 dispatch_queue
还是弱爆了。由于项目中会经常用到,GitHub
上找了一些类似的实现都不太理想,于是自己实现了一版简单的主要支持一下特性:
近期将项目中的 webrtc 代码与官方最新的 m63 分支进行了同步,由于之前的代码比较老,这次升级后,webrtc 的代码结构相对来说有了很多的调整和变化,再加上对 webrtc 代码的修改和代码的添加,索性依照 m63 分支的 gn 脚本使用 cmake 重写了 webrtc 的编译脚本。在编译 android 平台时遇到一些 c++ 标准库中的函数无法进行链接的问题,于是了解了一下 android 对 c++ 标准库的支持。
Android 对 C++ 基础库的实现有多个版本,具体的版本可以在 NDK 目录下的 sources/cxx-stl
子目录中查看,我当前使用的版本是 android-ndk-r12b
子目录内容如下:
图像的采集可以通过摄像头或者截取屏幕来获取的图像数据。一幅图像可以看作为一个二维的矩阵,其中矩阵中的每一个点被称为像素。像素的颜色可以通过红、绿、蓝来表示,也就是常说的 3 基色。如下图所示:
每个像素可以用不同的数据位数来表示,常用的量化位数有 16 位、24 位、32 位等,24 位最好理解,就是 RGB 的各个分量各占 8 位,取值范围为 0 ~ 255;32 位则是 24 位的基础上增加了透明度的量化位数,也是 8 位,用来表示当前像素的透明度,根据透明的位置可以分为 RGBA 和 ARGB;16 位可以分为 565 和 555 两种模式,565 则表示绿色分量占 6 位,红色和蓝色各占 5 位,555 模式则丢弃一位不用,RGB 各个分量占 5 位。量化位数越多,所能表示颜色的层次也越多,颜色则越丰富。