自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(236)
  • 资源 (11)
  • 收藏
  • 关注

原创 Ubuntu 16.04 安装 Gazebo

Gazebo 是一款 3D 动态模拟器,能够准确有效地模拟复杂室内和室外环境中的机器人群体。虽然类似于游戏引擎,Gazebo 提供了更高保真度的物理模拟、一套传感器以及用户和程序接口。Gazebo 的典型用途包括:测试机器人算法,设计机器人,使用真实场景执行回归测试Gazebo 的一些主要功能包括:多个物理引擎,丰富的机器人模型和环境库,各种各样的传感器,方便的编程和图形界面Gazebo 的安装方法如下。在 Gazebo 的 下载页面 下载 Gazebo 的 .deb 包。

2021-08-31 08:57:06 1594

原创 一种 Android 用户事件的自适应分发方法

Android 设备的远程操作控制中,用户可以在控制端看到远程 Android 设备的屏幕,并通过在控制端执行操作,控制远端 Android 上应用程序及系统的行为。控制端可以是任意的系统及平台,如 Windows,Android 等。控制端捕获用户操作的事件,将事件传输到远端的 Android 系统中,控制远端的 Android 系统。控制端和远程 Android 设备之间的通信中,用户事件通过事件的类型和点击/触摸事件的归一化屏幕坐标描述。在控制端支持多点触控的情况下,用户事件可能同时产生于两个不同

2021-08-31 07:44:38 126

原创 ELF 文件格式

<elf.h> 头文件定义了 ELF 可执行二进制文件的格式。这些文件包括普通的可执行文件,即可以直接执行的应用程序文件;可重定位目标文件,即 *.o 文件;核心转储 core 文件;和共享目标文件,即共享库 *.so 文件。使用 ELF 文件格式的可执行文件的组成是这样的:一个 ELF 文件头,后面是一个程序头表,或者是一个节(即 section,后文也用节指代 section,用段指代 segment)头表,或两者都有。ELF 文件头总是位于文件中偏移量为 0 的位置。程序头表和节头表在文

2021-08-21 08:40:49 1387

原创 Android OpenSL ES 对象结构

OpenSL ES 是 Khronos Group 为嵌入式系统开发的调优的免版权费、跨平台、硬件加速的音频 API 规范。Android 提供了这一 API 规范的 Android 专有实现,并允许应用程序通过 NDK 调用这些 API。Android 应用可以借助这一 API,使用 C 或 C++ 实现高性能、低延迟的音频。OpenSL ES™ 标准与 Android Java 框架中的 MediaPlayer 和 MediaRecorderAPI 提供类似的音频

2020-11-10 23:09:34 480

原创 WebRTC Audio Encoder/Decoder Factory 的实现

Audio encoder factory 用于创建完成各种 audio codec 编码的 encoder 对象,audio decoder factory 则用于创建完成各种 audio codec 解码的 decoder 对象。WebRTC 的 Audio Encoder Factory 接口的定义(位于 webrtc/src/api/audio_codecs/audio_encoder_factory.h)如下:namespace webrtc {// A factory that crea

2020-08-31 20:22:39 1077

原创 WebRTC 的 log 系统实现分析

WebRTC 有多套 log 输出系统,一套位于 webrtc/src/base 下,包括 webrtc/src/base/logging.h 和 webrtc/src/base/logging.cc 等文件,主要的 class 位于 namespace logging 中。另一套位于 webrtc/src/rtc_base 下,包括 webrtc/src/rtc_base/logging.h 和 webrtc/src/rtc_base/logging.cc 等文件,主要的 class 位于 namespa

2020-08-29 20:59:20 2262 1

原创 WebRTC Linux ADM 实现中的符号延迟加载机制

ADM(AudioDeviceModule)在 WebRTC 中主要用于音频数据的录制采集和音频数据的播放,这里是 WebRTC 的实时音视频系统与系统的音频硬件衔接的地方。WebRTC 为 Linux 平台实现了 ALSA 和 Pulse 等类型的 ADM AudioDeviceLinuxALSA 和 AudioDeviceLinuxPulse,它们分别基于 Linux 系统提供的库 libasound 和 libpulse 实现。WebRTC 为做到 Linux ADM 实现的高度灵活性,实现了一套符

2020-08-17 20:22:01 457 3

原创 RTC 技术知识体系

RTC(Real-time Communications),直译或者广义指实时通信,狭义一般称为实时音视频,在这次全球大爆发的新冠肺炎疫情中,作为视频会议、视频通话、远程办公、远程医疗和互动直播等应用的底层技术,为全社会的尽力运转提供了巨大的支持。实时音视频本身并不是最近才出现的新技术,很早以前的网络教科书就已经在介绍 RTP 和 RTCP 了,如道格拉斯·科默 (Douglas E.Comer...

2020-03-22 19:09:33 3019

原创 C++ lambda 捕获模式与右值引用

lambda 表达式和右值引用是 C++11 的两个非常有用的特性。lambda 表达式实际上会由编译器创建一个 std::function 对象,以值的方式捕获的变量则会由编译器复制一份,在 std::function 对象中创建一个对应的类型相同的 const 成员变量,如下面的这段代码:int main() { std::string str = "test"; printf("...

2020-03-22 10:24:05 1793

原创 WebRTC 的音频处理流水线

基于 RTC 场景下要解决的声音的问题,WebRTC 有一个大体如下图所示的音频处理流水线:WebRTC 的音频处理流水线,不是一次性建立起来的,而是分阶段分步骤建立的。整体而言,可以认为这个流水线分两个阶段建立,或者可以认为这个流水线分为两部分:一部分可称为静态流水线,另一部分可称为动态流水线,或者也可以称为前端和后端。静态流水线,在某个时间点建立一次,随后在整个 WebRTC 通信过程中基...

2019-12-24 16:09:48 2625 7

原创 WebRTC 中的基本音频处理操作

在 RTC,即实时音视频通信中,要解决的音频相关的问题,主要包括如下这些:音频数据的采集及播放。音频数据的处理。主要是对采集录制的音频数据的处理,即所谓的 3A 处理,AEC (Acoustic Echo Cancellation) 回声消除,ANS (Automatic Noise Suppression) 降噪,和 AGC (Automatic Gain Control) 自动增益控制。...

2019-12-13 13:56:26 4624 1

原创 Googletest 实现简要分析

借助于 Googletest 测试框架,我们只需编写测试用例代码,并定义简单的 main() 函数,编译之后并运行即可以把我们的测试用例跑起来。(更详细的内容可参考 Googletest 入门)。但 main() 函数调用 RUN_ALL_TESTS() 时,是如何找到并运行我们编写的测试用例代码的呢?本文尝试找寻 Googletest 框架背后隐藏的这些秘密。(代码分析基于 git@github...

2019-08-23 20:29:54 957

原创 WebRTC Audio 接收和发送的关键过程

本文基于 WebRTC 中的示例应用 peerconnection_client 分析 WebRTC Audio 接收和发送的关键过程。首先是发送的过程,然后是接收的过程。创建 webrtc::AudioState应用程序择机初始化 PeerConnectionFactory:#0 Init () at webrtc/src/pc/channel_manager.cc:121#1 In...

2019-07-21 12:36:09 5080

原创 Linux 下的 AddressSanitizer

AddressSanitizer 是一个性能非常好的 C/C++ 内存错误探测工具。它由编译器的插桩模块(目前,LLVM 通过)和替换了 malloc 函数的运行时库组成。这个工具可以探测如下这些类型的错误:对堆,栈和全局内存的访问越界(堆缓冲区溢出,栈缓冲区溢出,和全局缓冲区溢出)UAP(Use-after-free,悬挂指针的解引用,或者说野指针)Use-after-return(无效...

2019-05-19 21:08:29 5538 4

原创 QUIC 之类的可靠传输协议

互联网是一个分组(或者称为数据包)交换网络,其中传输的数据的基本单位是数据包。互联网中时时刻刻在发生的是距离有限的两个路由节点之间通过物理链路的数据包交换。那互联网中远距离复杂环境下的数据传输究竟如何完成的呢?它们正是借助于多次路由节点间直接的这种数据交换完成的。直觉上就让人觉得这种数据传输不是那么的可靠,不像电话网络连接那样。实际上互联网的数据传输确实不是百分之百的可靠,互联网上传输的数据天然地...

2019-03-28 11:29:04 1131

翻译 QUIC 之路

QUIC (Quick UDP Internet Connections,快速 UDP 网络连接) 是一个新的默认加密的互联网传输协议,它提供了大量改进用于加速 HTTP 流量并使它更安全,以实现最终在 Web 上替换 TCP 和 TLS 的目标。这篇博文中我们将概述 QUIC 的一些关键特性,及它们如何使 Web 受益,以及在支持这个基础的新协议上的一些挑战。事实上有两个协议,它们共享相同的...

2019-03-25 16:20:38 992

翻译 EV3 直接命令 - 第 5 课 从 EV3 的传感器读取数据

读取传感器的类型和模式我们从 EV3 设备的一些自反映开始并询问它:端口 16 上连接了什么类型的设备?端口 16 上的传感器的模式?请给你的 EV3 发送如下的直接命令:---------------------------------------- \ len \ cnt \ty\ hd \op\cd\la\no\ty\mo\ ...

2018-12-04 17:39:47 3646

翻译 EV3 直接命令 - 第 4 课 用两个驱动轮精确地移动小车

简介上一课,我们编写了 TwoWheelVehicle 类,一个 EV3 的子类。它的方法是 move 和 stop,但它不仅仅是围绕操作 opOutput_Speed,opOutput_Start 和 opOutput_Stop 的薄薄的封装。本节课的最后,类 TwoWheelVehicle 将具有实质的内容。如大多数软件那样,它一步步增长,本节课不会是最后一次,我们将继续使用这个类。上一课...

2018-12-04 17:39:08 3842

翻译 EV3 直接命令 - 第 3 课 遥控车辆

移动电机是 EV3 的核心。机器人需要移动的能力,因此你需要知道它是如何完成的。请参阅文档 EV3 Firmware Developer Kit 中的第 4.9 部分,以获得与电机相关的操作的第一印象。几乎所有这些操作命令都以相同的两个参数开头:LAYER:如果组合多个 EV3 brick 作为单个机器,则声明其中一个是主机,最多 3 个额外 brick 作为从机。然后将操作发送给主机,主机...

2018-11-06 20:57:24 5727

翻译 EV3 直接命令 - 第 2 课 让你的 EV3 做点什么

介绍上一课我们编写了类 EV3,它可以用于与 LEGO EV3 设备通信。我们通过什么也不做的 opNop 操作测试它。这一课是关于带有参数的真实指令的。这将使你的 EV3 设备成为你程序的活动部分。目前,我们不从我们的 EV3 接收数据。这个主题需要等稍后的一些课程。我们选取了如下这些种类的操作:设置 EV3 的名称播放声音和音调控制它的LED显示图像定时器启动程序模拟按钮动作...

2018-11-05 20:25:49 3805 1

翻译 EV3 直接命令 - 第一课 无为的艺术

LEGO 的 EV3 是一个极好的游戏工具。它的标准编程方式是 LEGO 的图形化编程工具。你可以编写程序,把它们传到你的 EV3 brick 上,然后启动它们。但还有另外一种与你的 EV3 交互的方式。把它看作一个服务器并给它发送命令,命令将以数据和/或行为来应答。在这种情形下,你的程序所运行的机器是客户端。这打开了迷人的新视角。如果程序运行在你的智能手机上,你将获得很好的交互性和便利性。如果你...

2018-11-05 20:24:36 3116

原创 LEGO EV3 中执行 VSCode Python 代码过程分析

镜像为 ev3dev。通过 SSH 连接 LEGO EV3 设备,默认密码为 maker:$ ssh robot@ev3dev.localPassword: Linux ev3dev 4.14.61-ev3dev-2.2.2-ev3 #1 PREEMPT Mon Aug 6 14:22:31 CDT 2018 armv5tejl _____ _ __...

2018-11-02 18:42:53 2633

翻译 LEGO EV3 通信开发者套件

1 MINDSTORMS EV3 可编程 brick 的硬件规格LEGO MINDSTORMS EV3 可编程 brick 是新 LEGO MINDSTORMS 平台内的中央处理单元。可编程 brick 由各种先进的电子设备组成,以实现其广泛的功能。下面的列表是 EV3 可编程 brick 硬件规格总结。硬件规格主处理器32-bit ARM9 processor, Te...

2018-11-02 18:41:35 4328

翻译 搭建 LEGO EV3 的 PyCharm Python 开发环境

本文档展示了如何建立一个使用 PyCharm IDE 为 ev3dev 开发 Python 程序的良好的工作环境。在这份文档中,我们假设你已经刷写了一张 SD 卡,用它启动设备,并且已经 在设备上配置了网络。这些步骤在 入门指南 中说明。登录 ev3dev在这份文档中,我们需要能够在 EV3 上运行终端命令。要完成这一设置,请移步我们的 &nbsp;SSH 教程。配置代码同步注意:本教程...

2018-11-02 18:39:55 6369

翻译 [译]BitTorrent协议规范

BitTorrent 是一个用于文件分发的协议。它通过 URL 来标识内容,其设计使其可以与 Web 无缝集成。BitTorrent 相对于一般 HTTP 的优势在于,当相同文件的多个下载并行进行时,下载者之间还可以互传数据,这就使得文件源在仅增加少量负载的情况下支持数量众多的下载成为可能。BitTorrent 文件分发由这些实体组成一个普通的 Web 服务器一个静态的 ‘meta...

2018-07-20 16:01:52 1216

原创 mupdf-android-viewer 设计与实现浅析

目前在 Android 应用开发中,可用的 PDF 文档展示的开源项目好几个,最为方便的是 AndroidPdfViewer,它基于 PdfiumAndroid 开发而来,而后者则是由 AOSP 中的 pdfium 封转而来。另外一个 PDF 文档显示的开源项目 mupdf 也非常强大。本文简单分析 MuPDF 库的 Android 封装。MuPDF 是一个用于查看和改变 PDF,XPS 和 ...

2018-06-27 14:11:00 4614

原创 为 Android 编译 MuPDF 查看器

先决条件你需要一个 工作的 Android 开发环境,它由 Android SDK 和 Android NDK 组成。建立这一环境最简单的方式就是使用 Android Studio 下载并安装 SDK 和 NDK。确保 Android/Sdk/tools 和 Android/Sdk/ndk-bundle 目录在你的 PATH 上。你也需要 Oracle 的 Java JDK(OpenJDK...

2018-06-08 14:05:11 1240 1

原创 深度思考

如果说深度思考决定人生和事业的话,那什么才是深度思考的体现呢?我想深度思考的体现最主要在三个方面:深度。对于自己所处的技术领域,有着非常深入的了解。对于 Android 开发而言,除了参照网上的教程,能够了解各种 API 和第三方库的功能,并把它们用起来,发挥好它们的作用之外,同时还需要对 API 和库的如下方面有一定的了解: 设计目标及设计时的应用场景设计思想实现的整体架构及方法局...

2018-06-02 08:34:39 1404

原创 Jenkins 在 Tomcat 中的部署及代码静态检查工具集成

Jenkins 的简单部署在安装了 Jenkins 运行所需的依赖(主要是 JDK)之后,可以通过如下步骤简单快速地部署 Jenkins:下载 Jenkins.打开终端并切换至下载目录。运行命令 java -jar jenkins.war --httpPort=8080。 --httpPort 参数用于指定 Jenkins 服务运行的端口。这条命令将运行 Jenkins 服务。打...

2018-04-08 11:27:45 1122

原创 GitLab 自动触发 Jenkins 构建

GitLab 是当前应用非常广泛的 Git Hosting 工具,Jenkins 是非常牛逼的持续集成工具。尽管 GitLab 有内建的 GitLab CI,但它远没有 Jenkins 那么强大好用。Jenkins 和 GitLab 在两者的结合上,都提供了非常方便的工具。在我们向 GitLab push 代码,或执行其它一些操作时,GitLab 可以将这些时间通知给 Jenkins,trigg...

2018-03-27 20:06:42 15006 2

原创 Android 根证书管理与证书验证

PKI 体系依赖证书执行极为关键的身份验证,以此确认服务端的可信任性。证书验证在 SSL/TLS 握手过程中完成,验证过程通常包含三个步骤:验证证书的合法性:这一步主要是验证证书是由合法有效的 CA 签发的。在客户端预先保存一个可靠的 CA 的根证书库,比如 FiexFox、Chrome、Android、Microsoft 等都有维护自己的根证书库,并据此验证服务端证书链的合法性。PKI 体...

2018-03-22 16:30:20 11436 2

翻译 PyCairo 教程

这里是 PyCairo 教程。在这份教程中,我们将基于 Python 和 Cairo 库学习 2D 图形编程。目录简介后端基本绘图形状和填充渐变裁剪和屏蔽透明度变换文本图片根窗口PyCairoPyCairo 是一个用来与 Cairo 库一起工作的 Python 模块。它是到 Cairo C 库的 Python 绑定的集合。除了一些需要以更加 Pyth...

2018-02-27 09:41:24 3046

翻译 根窗口

PyCairo 教程的这个部分,我们将与根窗口打交道。根窗口就是桌面窗口,通常也是我们放置图标的地方。控制根窗口是可能的。从程序员的角度来看,它仅仅是一种特殊的窗口。透明窗口我们的第一个例子将创建一个透明窗口。我们将看到窗口对象下面是什么东西。#!/usr/bin/python'''ZetCode PyCairo tutorialThis code example s...

2018-02-26 17:47:25 575

翻译 PyCairo 中的图片

PyCairo 教程的这个部分,我们将讨论图片。我们将演示如何在 GTK 窗口中显示一幅 PNG 或JPEG 图片。我们也将在图片上绘制一些文字。显示一幅 PNG 图片在第一个例子中,我们将显示一幅 PNG 图片。#!/usr/bin/python'''ZetCode PyCairo tutorialThis program shows how to drawan im...

2018-02-26 16:44:50 498

翻译 PyCairo 中的文本

PyCairo 教程的这个部分,我们将与文本打交道。灵魂伴侣在第一个例子中,我们将在窗口中显示一些歌词。 def on_draw(self, wid, cr): cr.set_source_rgb(0.1, 0.1, 0.1) cr.select_font_face("Purisa", cairo.FONT_SLANT_NORMAL, ...

2018-02-26 16:13:20 532

翻译 PyCairo 中的变换

在 PyCairo 图形学编程教程的这个部分,我们将讨论变换。一个 仿射变换 由 0 个或多个线性变换(旋转,放缩或切变)和平移(移位)组成。多个线性变换可以结合为以单个矩阵表示。 旋转 是将一个刚体围绕一个固定点移动的变换。放缩 是放大或缩小对象的变换。放缩系数在所有方向上都是相同的。平移 是在特定的方向上,将每个点都移动固定距离的变换。切变 是将物体垂直于给定轴移动,同时保持轴的一侧的值比...

2018-02-26 11:16:35 319

翻译 PyCairo 中的透明度

在 PyCairo 教程的这个部分,我们将讨论透明度。我们将提供一些基本的定义和三个有趣的透明度的例子。透明度是指透过一种材料能够看到的品质。理解透明度最简单的方法是想象一块玻璃或水。技术上来说,光线可以穿过玻璃,因而我们可以看到玻璃后面的物体。在计算机图形学中,我们可以用 alpha 合成 实现透明度效果。Alpha 合成是一个将一幅图片和背景结合起来创建部分透明的外观的过程。合成过程使...

2018-02-24 18:34:11 305

翻译 PyCairo 中的剪裁和屏蔽

在 PyCairo 教程的这个部分,我们将讨论剪裁和屏蔽操作。剪裁裁剪 是将绘制限定在某一区域内。这样做有一些效率的因素,或者为了创建有趣的效果。PyCairo 有一个 clip() 方法用于设置裁剪区域。#!/usr/bin/python'''ZetCode PyCairo tutorialThis program shows how to performclip...

2018-02-24 16:29:15 343

原创 Brotli压缩算法的Android封装

https://github.com/NEYouFan/brotli-android

2018-02-23 07:24:32 1418

翻译 PyCairo渐变

PyCairo 教程的这个部分,我们将讨论渐变。我们将提到线性的和径向的渐变。在计算机图形学中,渐变是从浅色到深色或从一种颜色到另一种颜色的平滑混合。在 2D 绘图程序和绘画程序中,渐变被用于创建五彩缤纷的背景和特殊的效果,也用于模拟灯光和阴影。(answers.com)线性渐变线性渐变是颜色或色调沿着线的混合。在 PyCairo 中,它们由一个 cairo.LinearGradien...

2018-02-09 19:09:39 553

QUIC 加密协议规范中文版

QUIC 是一种新型的高效的安全的网络协议。这份文档是 QUIC 的加密协议的规范中文版翻译。

2018-07-23

HPACK 协议规范中文版

HTTP/2 协议的一些关键特性包括:二进制分帧,连接复用,首部压缩等。首部压缩是 HTTP/2 用于减少多请求执行时数据传输量的方法。这份文档是 HTTP/2 首部压缩部分,即 HPACK 的协议规范。

2018-07-23

HTTP/2规范中文版

这份文档是 HTTP/2 协议 RFC 规范的中文版翻译,协议规范完整定义了 HTTP/2 协议的行为和特性。

2018-07-23

Real-Time Streaming Protocol Version 2.0

Real-Time Streaming Protocol Version 2.0 协议规范

2017-08-19

RTP Payload Format for H.264 Video

RTP 传输 H.264 视频的 IETF 规范。

2017-08-19

Advance Bash Scripting Guide

Advance Bash Scripting Guide

2007-11-04

Programming Perl

Programming PerlProgramming PerlProgramming Perl

2007-11-04

GNU Linux Tools Summary

GNU Linux Tools GNU Linux Tools SummarySummaryGNU Linux Tools Summary

2007-11-04

BSD Hacks

BSD HacksBSD HacksBSD Hacks

2007-11-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除