自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

翻译 PyCairo简介

这里是 PyCairo 教程。这份教程将以 Python 语言,教你 Cairo 2D 库的基本的和一些高级的主题。在大多数例子中,我们将会使用 Python GTK 后端来产生我们的输出。本教程中所用到的那些图片可以在 此处 下载。计算机图形学有两种不同的计算机图形学。向量图形学和光栅图形学。光栅图形学以一个像素的集合来表示图片。向量图形学使用几何元素,比如点,直线,曲线或者多边形来表示...

2018-02-08 09:23:54 930

原创 Android low memory killer 机制

Android中,进程的生命周期都是由系统控制的。即使用户在界面上关掉一个应用,切换到了别的应用,那个应用的进程依然是存在于内存之中的。这样设计的目的是为了下次启动应用能更加快速。当然,随着系统运行时间的增长,内存中的进程可能会越来越多,而可用的内存则将会越来越少。Android Kernel会定时执行一次检查,杀死一些进程,释放掉内存。那么,如何来判断,哪些进程是需要杀死的呢?答案就是:lo

2018-02-04 13:01:20 2856

原创 OpenCV4Android JavaCameraView实现

OpenCV4Android中,主要用 org.opencv.android.JavaCameraView(后面用JavaCameraView 指代)、org.opencv.android.NativeCameraView(后面用NativeCameraView 指代)及 org.opencv.android.CameraBridgeViewBase(后面用CameraBridgeViewBase

2018-02-04 12:42:26 4030

原创 个人项目推广

一时兴起,搞了自己的开源项目或者是个人博客出来,虽然出发点常常并不是要利用这些得到多大的好处,而仅仅是出于一种保存曾经战斗过的地方的习惯,或者随手总结记录,以弥补随着年龄的增长而变得越来越差的记忆的不足,但如果自己搞得这些东西能被更多的人看到,能够帮助许许多多有需要的同学,并和全世界各地的广大开发者一起交流,那么对于写代码、写文档时孤寂的心倒也不失为一种很好的慰藉。将个人项目推广一下,为更多人所用

2018-02-02 19:07:39 717

原创 OSI 网络协议模型为什么是 7 层?

OSI 网络协议模型为什么是 7 层呢?相信不少朋友心中都有这样的疑问。Douglas E. Comer 先生的个人主页上的一篇文章 How the 7-layer reference model was invented 讲述了 OSI 7 层网络协议参考模型的由来。(Douglas E. Comer 先生在网络界的盛名不需多说,相信很多朋友都读过他的非常棒的讲述网络协议的三卷本著作《用 T

2018-01-31 18:38:21 948

翻译 关于 ADB 实现的说明

I.总体概述Android 调试桥(ADB)用于:跟踪所有连接的或运行于给定开发者主机上的 Android 设备和模拟器实例。为客户端(命令行用户,或像 DDMS 这样的辅助程序)实现各种控制命令(比如,”adb shell”,”adb pull”,等等)。这些命令在 ADB 中称为 ‘service’。总的来说,一切工作通过以下组件完成:ADB server这是一个

2018-01-31 12:20:53 460

原创 Anbox 和 LXC 代码规模

兵法云,知己知彼,百战不殆。对于使用开源项目的开发者而言,在掌握这些开源项目之前,它们就是作战的敌人。对于一个开源项目,可以从多个角度来认识它,如开源项目的整体设计框架,开源项目实现所基于的基本原理,开源项目所使用的编程语言及编程语言的版本,开源项目所使用的重要的它库及库的用法等。但关于开源项目最最基本的一项信息即是它的代码规模,代码规模常常与它的复杂度紧密相关。了解了一个开源项目的规模,常常

2018-01-31 12:18:40 1502

原创 使用 GDB 调试 Android 应用

GNU 工程调试器(GDB)是一个常用的 Unix 调试器。本文详述使用 gdb 调试 Android 应用和进程的方法。调试运行中的应用或进程gdbclient 是源码库中的一个 shell 脚本调试工具,它位于 android-7.1.1_r22/development/scripts/gdbclient。该脚本将根据 Android 源码库的根目录,设置端口转发,在设备上启动适当

2018-01-31 09:49:15 1449 1

原创 Ubuntu 16.04 安装 ROS

Robot Operating System (ROS) 是一个得到广泛应用机器人系统的软件框架,它包含了一系列的软件库和工具用于构建机器人应用。从驱动到最先进的算法,以及强大的开发者工具,ROS 包含了开发一个机器人项目所需要的所有东西。且它们都是开源的。ROS 虽然名为机器人操作系统,但它与我们一般概念中的操作系统,如 Windows,Linux,iOS 和 Android 这些。Wind

2018-01-30 18:42:58 40431 4

原创 Anbox 实现分析 3:会话管理器与容器管理器的通信

Anbox 通过一个可执行文件,实现多个不同的应该用逻辑。在启动 Anbox 可执行文件时,通过为它提供不同的命令行参数来确定具体执行哪个命令。Anbox 中这些不同的命令实例之间,整体的通信架构如下图这样:这些不同的命令实例之间通信的过程大体如下:容器管理器实例首先运行起来,监听在特定位置的 Unix 域 Socket 上;随后会话管理器启动,监听在另外的一些 Unix 域 Socket 上;

2018-01-16 18:24:20 1488

原创 Anbox 实现分析之 I/O 模型

Anbox 运行时主要由两个分开的实例构成,即容器管理器 ContainerManager 和会话管理器 SessionManager,但无论是 ContainerManager 还是 SessionManager,所做的最重要的事情就是处理网络 I/O 事件了。I/O 模型指一个应用处理 I/O 事件的整体框架设计,对于 Anbox 而言主要是处理各种网络 I/O 事务的整体框架设计。Contai

2018-01-11 19:37:18 2488

原创 Anbox 实现分析之程序入口

Anbox 的总体架构如 运行 Anbox 一文的相关内容所述,其运行时主要由两个分开的实例构成,容器管理器和会话管理器。anbox 用同一个可执行文件,在启动时通过不同的参数实现运行时执行两块完全不同的逻辑,完成容器管理和会话管理的任务。在命令行中,为 anbox 可执行文件提供不同的 command 参数来确定具体执行什么样的实例。Anbox 通过同一个可执行文件,将多个功能完全不同的逻辑粘合起

2018-01-09 17:29:27 2548

翻译 Android Studio 构建

获得源码分支当前我们具有如下老版本 Android Studio 的分支: dev branch release branch IntelliJ Notes studio-1.0-dev studio-1.0-release idea13-dev 这是 1.0 的分支,已经关闭 studio-1.1-dev studio-1.1-release idea13

2017-12-27 09:48:38 398

翻译 如何预编译 Android 模拟器专用内核

I. 辅助脚本我们现在提供了一个辅助脚本来重新构建内核,其位于 $AOSP/prebuilts/qemu-kernel/build-kernel.sh。请确保使用了 aosp/master 的 checkout,而不是 aosp/studio-XXX 中的一个,后者不包含重新构建内核所需的预编译目标工具链二进制文件。你需要位于 android.googlesource.com/kernel/gold

2017-12-27 09:47:07 1283 1

翻译 QEMU 中音频模拟如何工作

事情有点棘手,但这里有一个粗略的描述:QEMUSoundCard:建模一个给定的模拟的声卡 SWVoiceOut:建模一个来自 QEMUSoundCard 的音频输出 SWVoiceIn:建模一个来自 QEMUSoundCard 的音频输入HWVoiceOut:建模一个主机端的音频输出(后端) HWVoiceIn:建模一个主机端的音频输入(后端)每个声音在采样大小,字节序,速率等方

2017-12-27 09:45:43 1773 1

原创 QEMU 网络虚拟化

对于模拟器而言,让模拟器中的客户 Android 系统内的进程连接外部网络,与通过 adb forward 的方式,让外部网络的程序,连接模拟器的客户 Android 系统内的服务相比,网络拓扑结构有着非常大的不同。这种拓扑结构的差异,对模拟器内的客户 Android 系统中的进程与外部应用进程之间的网络连接的许多方面都有着非常大的影响,如连接的稳定性,性能等等。模拟器连接外部网络时的情况首先来看模

2017-12-27 09:44:08 615

翻译 Android QEMU 高速管道

介绍Android 模拟器实现了一个特殊的虚拟设备,用于提供客户 Android 系统和模拟器本身 非常 快速的通信通道。在客户 Android 系统端,用法非常简单,如下:1/ 打开 /dev/qemu_pipe 设备文件来读和写 注意:自 Linux 3.10 开始,设备被重命名为了 /dev/goldfish_pipe,但行为完全一样。2/ 写入描述你想要连接的服务,且以 0 结束

2017-12-27 09:42:38 2544

原创 Anbox LXC

Anbox LXC 编译安装在命令行中,通过 anbox 命令直接启动 Anbox 的容器管理器时,它将动态链接系统中安装的 liblxc。由 Anbox 项目的 snapcraft.yaml 文件,可以看到在创建 Anbox 的 snap 时,LXC 编译相关的选项: lxc: source: https://github.com/lxc/lxc source-type: git

2017-12-07 14:30:45 907

原创 LXC C API 使用

LXC 提供了稳定的 C API 以及大量不同语言的绑定。LXC 版本中的 liblxc1 API 的接口可能会增加,但不会在不调用 liblxc2 的情况下删除或更改现有符号。与稳定的 API 一起发布的第一个 LXC 版本是 1.0.0。只有 lxccontainer.h 头文件中列出的符号是 API 的一部分,所有其它的都是 LXC 的内部符号,且可能在任何时间点改变。API 用法最好的示例是

2017-12-07 14:29:02 1482

翻译 Ubuntu LXC

容器是轻量级的虚拟化技术。它们更像增强的 chroot,而不是完整的虚拟化,比如 Qemu 或 VMware,因为它们不仿真硬件,且由于容器与主机共享相同的操作系统。容器与 Solaris zones 或 BSD jails 类似。Linux-vserver 和 OpenVZ 是两种已经存在的,为 Linux 独立开发的类容器功能实现。事实上,容器是由 vserver 和 OpenVZ 功能升级的

2017-12-07 14:27:31 3024

原创 Anbox 容器管理服务

Anbox 安装过程分析Anbox 是在像 Ubuntu 这样的普通 GNU/Linux 系统上,基于容器启动完整 Android 系统的方案。当前安装过程由多个步骤组成,这些步骤将向主机系统中添加额外的组件,这些组件包括:由于没有发行版内核同时启用 binder 和 ashmem,因此需要它们的源码树之外的内核模块为 /dev/binder 和 /dev/ashmem 设置正确权限的 udev

2017-12-01 11:38:44 5282 1

翻译 将应用打包为 Snaps

在 Linux 上分发应用不总是那么简单。你有不同的打包格式,基础系统,可用的库,和发行版本节奏,它们都让人头疼。但是现在我们有了更简单的东西:Snaps。Snaps 是开发者打包他们的应用的一种新的方式,相对于更多传统的打包格式,比如 .deb,.rpm 和其它的那些,它具有许多优势。Snaps 是安全的,相互隔离的,主机系统使用 AppArmor 这样的技术,它们是跨平台的,且它们是自包含的,这

2017-11-30 17:11:27 392

翻译 运行 Anbox

概述Anbox 运行时主要由两个分开的实例构成:容器管理器会话管理器容器管理器的工作是管理容器的建立,并在它的生命周期内维护它。它的职责是启动我们用以运行 Android 系统的 LXC 环境。会话管理器运行于登录到 Linux 系统的用户的会话内。它将通过一些 sockets 与运行在容器内的 Android 实例通信,并提供与 Linux 系统的集成。它还扮演多路复用器的角色,将 Andr

2017-11-30 17:09:22 2822 6

翻译 Anbox

Anbox 是在像 Ubuntu 这样的普通 GNU/Linux 系统上,一个基于容器的启动完整 Android 系统的方法。换句话说:Android 将使你在你的 Linux 系统上运行 Android,而无需虚拟化的开销。概述Anbox 使用 Linux 命名空间机制(user,pid,uts,net,mount,ipc)在容器中运行完整的 Android 系统,并在任何基于 GNU/Linux

2017-11-30 17:08:11 1823 2

原创 Gerrit代码审核服务器搭建全过程

1、建立专有帐户$ sudo useradd gerrit$ sudo passwd gerrit$ su gerrit2、配置 Java 环境3、从官网下载gerrithttps://www.gerritcodereview.com/当前最新版本为 2.14。4、安装gerrit关于数据库的配置:*** SQL Database*** Database server type

2017-11-24 19:29:59 41938 8

转载 [转]I,P,B帧和PTS,DTS的关系

基本概念I frame :帧内编码帧 又称intra picture,I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图象。I帧可以看成是一个图像经过压缩后的产物。P frame: 前向预测编码帧 又称predictive-frame,通过充分将低于图像序列中前面已编码帧的时间冗余信息来压缩传输数据量的编码图像,也叫预测帧;B

2017-09-28 17:00:28 253

原创 Android 图形系统之gralloc

Gralloc1::Loader 与 gralloc 模块加载Gralloc1::Loader 用于加载 HAL gralloc 模块。其类定义(位于 frameworks/native/include/ui/Gralloc1.h)如下:class Loader{public: Loader(); ~Loader(); std::unique_ptr<Device> get

2017-09-21 16:06:49 3208

原创 Android 图形系统之图形缓冲区分配

BufferQueue 是 Android 中所有图形处理操作的核心。它的作用很简单:将生成图形数据缓冲区的一方(生产者)连接到接受数据以显示或进一步处理的一方(消费者)。几乎所有在系统中移动图形数据缓冲区的内容都依赖于 BufferQueue。Android 定义了一个类 BufferQueue,用于创建 BufferQueue、生产者和消费者。该类定义(位于frameworks/native/i

2017-09-21 16:06:03 1946

翻译 Android 硬件 OpenGL ES 模拟设计概述

简介Android 平台的 OpenGL ES 模拟由多个组件实现,它们是:一些宿主机的 “翻译器” 库。它们实现了由 Khronos 定义的 EGL,GLES 1.1 和 GLES 2.0 ABIs,并把对应的函数调用翻译为适当的桌面 API,比如:实现 EGL 接口的是 GLX (Linux),AGL (OS X) 或 WGL (Windows)实现 GLES 1.1 和 GLES 2.0

2017-09-16 15:43:01 1983

原创 EGL Context 创建

继续 EGL context 创建的分析。eglInitialize()来看 EGL10.eglInitialize() 的实现。com.google.android.gles_jni.EGLImpl 中,这个方法的实现如下: public native boolean eglInitialize(EGLDisplay display, int[] major_minor);它是一个本

2017-09-15 14:11:02 1754

原创 Android 图形驱动初始化

从应用程序的角度看 OpenGL 图形系统的接口,主要包括两大部分,一部分是 EGL,它为 OpenGL 渲染准备环境;另一部分是 OpenGL,它执行图形渲染。通过这些接口构造渲染环境,并执行渲染的过程,可以参考 在 Android 中使用 OpenGL。对于 Android OpenGL 图形系统的实现的分析,从 EGL context 的创建开始。先来看一下获取 Display 的过程。首先来

2017-09-15 14:09:46 1314 2

原创 在 Android 中使用 OpenGL

Android 通过 OpenGL 包含了对高性能 2D 和 3D 图形的支持,特别是 OpenGL ES API。OpenGL 是一个跨平台的图形 API,它为 3D 图形处理硬件规定了一个标准的软件接口。OpenGL ES 是一种用于嵌入式设备的 OpenGL 规范。Android 支持多种版本的 OpenGL ES API:OpenGL ES 1.0 和 1.1 - Android 1.0

2017-09-15 14:09:04 1305

原创 Android 模拟器下载、编译及调试

Android 模拟器源码下载Android 模拟器源码的下载与 Android AOSP 源码库的下载过程类似,可以参考 Google 官方提供的 Android 源码下载文档 来了解这个过程。 不同的地方在于,下载 Android 源码,在初始化 repo 客户端,初始化对某个分支的下载时,通过如下的命令指定该 Android 分支:$ repo init -u https://andro

2017-09-11 13:33:23 2557 3

原创 live555 源码分析:播放启动

本文分析 live555 中,流媒体播放启动,数据开始通过 RTP/RTCP 传输的过程。如我们在 live555 源码分析:子会话 SETUP 中看到的,一个流媒体子会话的播放启动,由 StreamState::startPlaying 完成:void OnDemandServerMediaSubsession::startStream(unsigned clientSessionId,

2017-09-08 19:42:10 1578

原创 live555 源码分析:子会话 SDP 行生成

如我们在前文 live555 源码分析:ServerMediaSession 中看到的,H264VideoFileServerMediaSubsession 的继承层次体系如下图:在这个继承层次体系中,ServerMediaSubsession 定义了可以对流媒体的单个子会话执行的操作,它有着如下这样的生命周期:对于这些操作的实现则是由 OnDemandServerMediaSubsession 完

2017-09-07 21:04:19 887

原创 live555 源码分析:ServerMediaSession

在 live555 中,用一个 ServerMediaSession 表示流媒体会话,它连接了 RTSPServer 和下层流媒体传输逻辑。ServerMediaSession 和 ServerMediaSubsession 共同用于执行底层流媒体传输和状态维护。而 ServerMediaSession 则是在 GenericMediaServer 中,通过 HashTable 来维护的。在分析 l

2017-09-07 13:47:40 2159

原创 live555 源码分析:RTSPServer 组件结构

前面几篇文章分析了 live555 中 RTSP 的处理逻辑,RTSP 处理有关组件的处理逻辑有点复杂,本文就再来梳理一下它们之间的关系。live555 中 RTSP 处理有关组件关系如下图:事件和执行流程的源头在 TaskScheduler。GenericMediaServer 对象在创建的时候,会向 TaskScheduler 注册一个 server socket 及处理该 socket 上的事

2017-09-06 15:50:50 477

原创 live555 源码分析: PLAY 的处理

在 SETUP 请求之后,客户端会发起 PLAY 请求,以请求服务器开始传输音视频数据。在 PLAY 请求执行时,一定是已经执行过 SETUP 请求,建立好了客户端会话,因而会与其它要求客户端会话已经建立的请求一起,通过 clientSession->handleCmd_withinSession() 执行: } else if (strcmp(cmdName, "TEARDOWN") =

2017-09-05 17:13:38 550

原创 live555 源码分析: SETUP 的处理

SETUP 请求在 RTSP 的整个工作流程中,用于建立流媒体会话。本文分析 live555 对 SETUP 请求的处理。在 RTSPServer::RTSPClientConnection::handleRequestBytes(int newBytesRead) 中,通过 RTSPServer::RTSPClientSession 的 handleCmd_SETUP() 函数处理 SETUP 请

2017-09-05 11:16:37 444

原创 live555 源码分析: DESCRIBE 的处理

前面在 live555 源码分析:RTSPServer 中分析了 live555 中处理 RTSP 请求的大体流程,并分析了处理起来没有那么复杂的一些方法,如 OPTIONS,GET_PARAMETER,SET_PARAMETER 等。篇幅所限,没有分析最为重要的 DESCRIBE,SETUP 和 PLAY 这些方法的处理。本文继续分析 live555 对 RTSP 请求,分析 DESCRIBE,S

2017-09-04 15:42:10 664 1

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

OpenGL ES 2 for Android

OpenGL ES应用开发实践指南 的英文原版

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关注的人

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