自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 live555 源码分析:MediaSever

位于 live555 项目 mediaServer 目录下的是 “LIVE555 Media Server”,它是一个完整的 RTSP 服务器应用程序。它可以把多种媒体文件转为流,提供给请求者。这里来看一下 “LIVE555 Media Server” 的实现。抛开其中向终端输出应用程序信息的代码, “LIVE555 Media Server” 主程序的代码像下面这样:#include <Basic

2017-08-31 18:01:37 1117

原创 live555 源码分析:基础设施

live555 由多个模块组成,其中 UsageEnvironment 、 BasicUsageEnvironment 和 groupsock 分别提供了事件循环,输入输出,基本的数据结构,以及网络 IO 等功能,它们可以看作 live555 的基础设施。对于 live555 的源码分析,就从这些基础设施,基本的数据结构开始。HashTable首先来看 HashTable,这是 live555 定义

2017-08-30 16:52:42 775

原创 live555 源码分析:简介

live555 是一个 C++ 开发的流媒体项目,它主要由几个用于多媒体流的库组成,其官方网站地址为 http://www.live555.com/。live555 使用开放的标准协议 (RTP/RTCP,RTSP,SIP),方便与其它标准的流媒体组件互操作。这些库可以为 Unix-like(包括 Linux 和 Mac OS X),Windows,和 QNX (及其它 POSIX 兼容系统)等系统

2017-08-28 19:30:31 1788

原创 使用 ortp 发送原始 H.264 码流

oRTP 是一个 RTP (Real-time Transport Protocol (RFC 3550)) 协议的库实现,它完全以 C 语言来实现,因此方便应用于各种不同的平台。本文分享用 oRTP 发送,以 Android 的 MediaCodec 编码出来的原始 H.264 码流,又称裸流的方法。H.264 码流MediaCode 以 H.264 编码格式编码之后的视频,是由一个一个的NALU

2017-08-24 11:48:02 3669 1

原创 原始 H.264 码流播放

我们平时遇到的视频文件各式各样,五花八门。通常它们会根据格式的不同,而有着不同的扩展名,比如 avi,rmvb,mkv,mp4 等等等。这些格式代表的都是 封装格式。这些文件通常产生的过程是这样的: 1. 通过录制工具录制一帧一帧的图像,可能是 Camera,屏幕截取工具等。 2. 将录制的图像送给编码器进行编码,得到原始的视频码流,也称为裸流。比如视频中常用的 H.264 格式的编码。 3.

2017-08-23 20:55:40 8653

原创 H.264 视频的 RTP 载荷格式

本文是 IETF 的规范 RFC 6184 的一部分的翻译,该规范 地址。翻译这份文档,主要是为了编写一段用 RTP 传输 H.264 流的代码。本想在网上找一些文章完成任务了事的,但由于个人之前音视频编解码相关的知识比较匮乏,网上找的文章大都没有办法把我的问题讲的很详细很明确,所以就找来了这份 IETF 的规范来学习。

2017-08-18 22:27:07 1075

原创 游戏循环

实现一个游戏的一种非常流行的方式看起来像这样:while (playing) { advance state by one frame render the new frame sleep until it’s time to do the next frame}这种方式有几个问题,最基本的是游戏可以定义什么是 “帧” 的想法。不同的显示器将以不同的频率刷新,且频率可

2017-08-17 10:39:51 373

原创 TextureView

TextureView 类是在 Android 4.0 中引入的,且是这里讨论的最复杂的 View 对象,它结合了 View 和 SurfaceTexture。用 GLES 渲染回忆一下,SurfaceTexture 是一个 "GL 消费者",消费图形数据缓冲区并使其可用作纹理。TextureView 封装了一个 SurfaceTexture,并接管了响应回调和获取新缓冲区的职责。新缓冲区的到

2017-08-17 10:39:48 1200

原创 SurfaceTexture

SurfaceTexture 类是在 Android 3.0 中引入的。就像 SurfaceView 是 Surface 和 View 的结合一样,SurfaceTexture 是 Surface 和 GLES texture 的粗糙结合(有几个警告)。当你创建了一个 SurfaceTexture,你就创建了你的应用作为消费者的 BufferQueue。当一个新的缓冲区由生产者入对时,你的应用将

2017-08-17 10:39:45 8504 3

原创 SurfaceView 和 GLSurfaceView

Android 应用框架 UI 是基于一个从 View 开始的对象层次体系的。所有的 UI 元素经历一个复杂的测量和布局过程来将它们适配入一个矩形区域,所有可见的 View 对象被渲染进一个 SurfaceFlinger 创建的 Surface,而后者由 WindowManager 在应用程序回到前台时建立。应用程序的 UI 线程执行布局并渲染进一个单独的缓冲区(无论 Layouts 和 View

2017-08-17 10:39:42 640

原创 Vulkan

Android 7.0 添加了对 Vulkan 的支持,一个高性能 3D 图形的低开销跨平台 API。像 OpenGL ES 一样,Vulkan 提供了在应用中创建高质量,实时图形的工具。Vulkan 的优势包括 CPU 开销降低及支持 SPIR-V Binary Intermediate 语言。片上系统生产商(SoCs)比如 GPU 独立硬件供应商(IHVs)可以为 Android 编写 Vu

2017-08-17 10:39:40 896

原创 EGLSurfaces 和 OpenGL ES

OpenGL ES 定义了一个渲染图形的 API。它没有定义窗口系统。为了使 GLES 可以工作于各种平台之上,它被设计为与知道如何通过操作系统创建和访问窗口的库相结合。Android 使用的库称为 EGL。如果你想绘制纹理多边形,你使用 GLES 调用;如果你想将渲染的东西放在屏幕上,则使用 EGL 调用。在你可以通过 GLES 做任何事情之前,你需要创建一个 GL 上下文。在 EGL 中,这

2017-08-17 10:39:37 1615

原创 Surface 和 SurfaceHolder

Surface 类自 1.0 版本开始就是公共 API 的一部分了。它的描述简单地说,“处理由屏幕合成器管理的原始缓冲区”。该陈述在最初编写时是准确的,但在现代系统上却与事实相去甚远。Surface 表示一个常常(但不总是!)由 SurfaceFlinger 消费的 buffer queue 的生产者端。当你渲染到 Surface 上时,结果最终将进入被传递给消费者的缓冲区中。Surface 不

2017-08-17 10:39:34 2274

原创 SurfaceFlinger 和 Hardware Composer

拥有图形数据缓冲区是很精彩的,但是当你在你的设备屏幕上看到它们时生活甚至更美好。那就是 SurfaceFlinger 和 Hardware Composer HAL 做的事情。SurfaceFlingerSurfaceFlinger 的角色是接收来自于多个源的数据缓冲区,组合它们,并将它们发送给显示设备。曾经一段时期这是通过软将数据块传送到硬件 framebuffer (比如 /dev/gra

2017-08-17 10:39:32 1895

原创 HiKey960 开发板 android 编译

我们可以用 Android Open Source Project (AOSP) 源码和相关的硬件特有二进制文件为 Google 的手机/平板,如 Nexus 系列,Pixel 系列等编译镜像,这有时为我们对 Android 系统的研究调试及开发提供了极大的便利。除此之外,为了 Android 系统能够得到更加广泛的应用,Google 官方还对两款参考开发板提供了支持,及 HiKey 和 HiKe

2017-08-17 10:39:29 2424 1

原创 QEMU 构建系统架构

这份文档旨在帮助开发者理解 QEMU 构建系统的架构。正如使用 GNU autotools 的项目一样,QEMU 构建系统有两个阶段,第一步开发者运行 configure 脚本确定本地构建环境特性,然后执行 make 构建整个项目。与 GNU autotools 的相似之处仅此而已,因此请忘掉你已知关于它们的东西。第一步:configureQEMU 配置脚本是直接用 shell 写的,且应该与

2017-08-17 10:39:26 894

原创 BufferQueue 和 gralloc

理解 Android 图形系统,我们从场景背后的 BufferQueue 和 gralloc HAL 开始。BufferQueue 类是 Android 中所有图形的核心。它的角色很简单:连接产生图形数据缓冲区的东西(生产者)和接受数据来显示或进一步处理的东西(消费者)。几乎所有在系统中移动图形数据缓冲区的东西都依赖于 BufferQueue。gralloc 内存分配器执行缓冲区分配,且通过一

2017-08-17 10:39:23 590

原创 Android 图形架构

每一个开发者都应该了解的关于 Surface,SurfaceHolder,EGLSurface,SurfaceView,GLSurfaceView,SurfaceTexture,TextureView,SurfaceFlinger,和 Vulkan 的东西。本页描述 Android 系统级图形架构的必要元素及应用框架和多媒体系统如何使用它们。重点是图形数据的缓冲区如何在系统中移动。如果你曾经想知

2017-08-17 10:39:20 317

原创 Android 图形系统

Android framework 为2D 和 3D 提供了各种各样的图形渲染 APIs 来与设备制造商的图形驱动实现交互,因此对于那些 API 在上层如何工作有一个好的理解非常重要。这一页介绍驱动基于其构建的图形硬件抽象层 (HAL)。应用程序开发者以两种方式将图像绘制到屏幕上:通过 Canvas 或 OpenGL。参考 系统级图形架构 来了解 Android 图形组件的详细描述。andro

2017-08-17 10:39:17 962

原创 Linux 权能综述

为了执行权限检查,传统的 UNIX 实现区分两种类型的进程:特权进程(其有效用户 ID 为0,称为超级用户或 root),和非特权用户(其有效 UID 非0)。特权进程绕过所有的内核权限检查,而非特权进程受基于进程的认证信息(通常是:有效 UID,有效 GID,和补充组列表)的完整权限检查的支配。自内核 2.2 版本开始,Linux 将传统上与超级用户关联的特权分为几个单元,称为 capabil

2017-08-17 10:39:14 2811

原创 TCP异常终止

TCP异常终止 Reset报文TCP 的异常终止是相对于正常释放 TCP 连接的过程而言的,我们都知道,TCP 连接的建立是通过三次握手完成的,而 TCP 正常释放连接是通过四次挥手来完成,但是有些情况下,TCP 在交互过程中会出现一些意想不到的情况,导致 TCP 无法按照正常的四次挥手来释放连接,如果此时不通过其他的方式来释放 TCP 连接的话,这个 TCP 连接将会一直存在,占用系统的部分资

2017-08-17 10:39:12 1788

原创 WiFi 热点共享设置

Windows 平台以管理员身份运行 cmd点击开始, 选择 附件,找到命令提示符,右键单击选择 以管理员身份运行。runcmd.png设置 WLAN 模式输入如下命令,并回车,将无线网卡设置为承载网络模式:netsh wlan set hostednetwork mode=allow ssid="HanpfeiAP" key=“1234567890”输出以下信息表示设置成功:

2017-08-17 10:39:09 630

原创 标准STUN判断NAT类型的过程及改进

这里基于stund的实现,来研究标准STUN协议,判断NatType的过程。stund用于判断NatType的接口的用法首先来看stund中用于判断NatType的接口的用法。这里主要来看stund中的STUN客户端client.cxx的实现。client.cxx是一个常规的C/C++ app,这个app的主要code如下:void usage() { cerr << "Usage:

2017-08-17 10:39:06 2024

原创 OkHttp实现分析之Websocket

HTML5 拥有许多引人注目的新特性,WebSocket就是其中之一。WebSocket一向有着 “Web 的 TCP ”之称。通常 WebSocket 都是用于Web的,用于构建实时的 Web 应用。它可以在浏览器和服务器之间提供一个基于 TCP 连接的双向通道。WebSocket 协议本质上是一个基于 TCP 的协议。为了建立一个 WebSocket 连接,客户端浏览器首先要向服务器发起一个

2017-08-17 10:39:03 5066 1

原创 读《Android 安全架构深究》

Android 安全架构深究安全是一个非常立体而丰富得概念。在不同的场景下,安全有着不同的含义。比如对于网络传输,安全指的是传输的数据不会被其他人看到、篡改、伪造及仿冒,传输的数据不会遭到破坏,数据从发送端发送出来到接收端接收到,可以保持完整准确。再比如在操作系统层面,可以从用户和进程两个角度来看安全。从用户的角度来看,即是非授权的用户,无法访问未被授权访问的数据。相信刚刚接触 Unix-

2017-08-17 10:39:00 533

原创 QUIC协议规范

title: QUIC协议规范date: 2017-01-13 18:35:49categories: 网络协议tags:网络协议QUIC翻译介绍QUIC (Quick UDP Internet Connection,快速UDP互联网连接) 是一个新的基于UDP的多路复用且安全的传输协议,它从头开始设计,且为 HTTP/2 语义做了优化。尽管以 HTTP/2 作为主要的应用协议而构

2017-08-17 10:38:57 6246

原创 QUIC加密协议

QUIC加密协议是QUIC的一部分,它为连接提供了传输安全性。QUIC加密协议是注定要消亡的。未来它将由TLS 1.3替代,但在TLS 1.3 最终启用之前QUIC需要一个加密协议。借助于当前的QUIC加密协议,当客户端已经缓存了关于服务器的信息时,它可以无需往返就建立一个加密的连接。TLS,相反地,至少需要两次往返(算上TCP的3次握手)。

2017-08-17 10:38:54 5118 4

原创 Traceroute

traceroute,现代 Linux 系统上的 tracepath,还有Windows 系统上的 tracert,均是用于同一目的的网络调试工具。它们用于显示数据包在IP网络中经过的路由器的IP地址。原理这些程序是利用IP数据包的存活时间(TTL)值来实现其功能的。当一台计算机发送IP数据包时,会为数据包设置存活时间(TTL)值。每当数据包经过一个路由器,其存活时间值就会减 1。当存活时间减

2017-08-17 10:38:48 1090

原创 初始DNS服务器地址是哪里来的?

DNS 是互联网中非常重要的一个系统。任何主机、设备,要想访问网络,几乎都需要先通过 DNS 服务器,查询主机的 IP 地址,然后才能与目标主机通信。通常情况下,我们都是无需为主机或设备设置 DNS 服务器地址的,那么那些 DNS 服务器地址究竟是哪里来的呢?难道是厂商事先在计算机里面埋的静态地址么?如果是这样的话,如果 DNS 服务器的 IP 地址改变了要如何处理呢?这里我们就通过 Wiresh

2017-08-17 10:38:45 4629

原创 网络优化实践探索文章

携程App的网络性能优化实践2016年携程App网络服务通道治理和性能优化实践蘑菇街App Chromium网络栈实践手机淘宝性能优化无线性能优化:域名收敛Facebook App对TLS的魔改造:实现0-RTT腾讯HTTPS性能优化实践Android微信智能心跳方案微信 MarsWebkit 远程调试协议初探基于TLS1.3的微信安全通信协议mmtls介绍微信Mars——移

2017-08-17 10:38:42 301

原创 Simpleperf介绍

什么是simpleperfSimpleperf是Android平台的一个本地层性能分析工具。它的命令行界面支持与linux-tools perf大致相同的选项,但是它还支持许多Android特有的改进。Simpleperf是Android开源项目(AOSP)的一部分。其源代码 位于。其最新的文档 位于。Bugs 和 功能需求可以提交到 githb上。Simpleperf是如何工作的现代的C

2017-08-17 10:38:39 8750

原创 Android app native代码性能分析

分析我们app中native层的C/C++代码性能,能够方便我们找出其中的性能瓶颈,并在稍后做有针对性的优化。下载android-ndk-profiler工欲善其事,必先利其器,我们先要有良好的工具来支持我们做性能分析的愿望。android-ndk-profiler就是目前我们可用的比较好的工具。原来这个项目是托管在google的代码托管服务器的,地址,但现在它已经被迁移到gihub。访问原来

2017-08-17 10:38:36 474

原创 Android平台Chromium net中的代理配置信息获取

在计算机网络中,代理服务器 扮演着发起请求的客户端与服务器之间的中间人的角色。客户端连接到代理服务器,请求一些服务,比如文件,网页,或其它可以从服务器获得的资源,代理服务器以简化和控制复杂度的形式获取请求的响应。代理被发明以为分布式系统添加结构和封装。在我们做移动端开发时,代理常常可以作为我们网络调试的利器。然而我们设置的代理究竟是如何对网络访问的整个过程产生影响的呢?本文将尝试回答这个问题。

2017-08-17 10:38:33 1381

原创 Android端打开HttpDns的正确姿势

什么是HttpDns?DNS服务用于在网络请求时,将域名转为IP地址。传统的基于UDP协议的公共DNS服务极易发生DNS劫持,从而造成安全问题。HttpDns服务则是基于HTTP协议自建DNS服务,或者选择更加可靠的DNS服务提供商来完成DNS服务,以降低发生安全问题的风险。HttpDns还可以为精准调度提供支持。因而在当前网络环境中得到了越来越多的应用。HttpDns的协议则因具体实现而异。

2017-08-17 10:38:30 2164

原创 虹桥火车站的卫生间

上次去上海,出站时上厕所,发现虹桥火车站的卫生间非常有意思。虹桥火车站候车大厅的卫生间设计的是宽敞、整洁、明亮,相信比众多在魔都打拼的年轻人租住的隔断间看上去要顺眼多了。而出站口的卫生间则显得拥挤狭小且脏乱不堪。其中逻辑,想来也并不难理解。铁路部门及车站希望乘车的人,不要将污秽之物带上火车再排出,火车上清理这些东西的成本,明显要比车站清理来得更高。而对于出站的人,车站则希望他们最好不要将那些东西留

2017-08-17 10:38:27 3352

原创 学习如同练功

学习如同练功。天赋、境界达不到一定水准时,强行学习某些内容,大概就会如某些武林人士强练某些武功,比如周芷若强练九阴真经那样,走火入魔。脑子里存有各种各样细碎杂乱,毫无章法的知识点,而无法真正形成连贯一致有条理的观点,以加深自己对现实时间的认知,并辅助遇到实际问题时的决策。设计模式相关的知识大概就像是太极拳一样的武功,见招拆招,无招胜有招。

2017-08-17 10:38:24 333

原创 做自己喜欢的事

做自己喜欢的事,似乎是一个伪命题。无论什么事,基本上都有有趣的部分,也有繁杂无趣的部分。装修自己理想的家,在最终装修完成之前,难免有一大堆细琐麻烦的事情要处理。即使是谈恋爱,两个人,两个家庭也难免有各种分歧冲突,磕磕碰碰。写代码,在成功解决复杂问题的时候,令人感到愉悦,而在面对各种无厘头的需求的时候,则令人抓狂。对于工作,做自己喜欢的事情,怕更多只是一厢情愿。只做自己喜欢的事,十有八九要虎头蛇尾,

2017-08-17 10:38:21 271

原创 QUIC/HTTP2相关资料整理

网络基础技术 The Transport Layer Security (TLS) Protocol Version 1.2 Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing TLS v1.3规范QUIC QUIC主页 QUIC概要设计文档 QUIC传输格式的详细设计文档 Google的QUIC协议:可以

2017-08-17 10:38:19 505

原创 在C代码调用C++代码

由于历史原因,以及不同开发人员的技术偏好,C语言和C++语言都有一些独有的非常有价值的项目,因而两种语言的互操作,充分利用前人造的轮子是一件非常有价值的事情。C++代码调用C代码很简单,只要分别在包含的C头文件的开头和结尾加上如下的两个块:#ifdef __cplusplusextern "C" {#endif和#ifdef __cplusplus}#endif即可。然而为了支

2017-08-17 10:38:16 435

原创 UDT协议实现分析——连接的建立

UDT Server在执行UDT::listen()之后,就可以接受其它节点的连接请求了。这里我们研究一下UDT连接建立的过程。连接的发起来看连接的发起方。如前面我们看到的那样,UDT Client创建一个Socket,可以将该Socket绑定到某个端口,也可以不绑定,然后就可以调用UDT::connect()将这个Socket连接到UDT Server了。来看UDT::connect()的定

2017-08-17 10:38:13 1909

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

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