自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 [转]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 3209

原创 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 1986

原创 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 1306

原创 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 1579

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

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

2017-09-07 21:04:19 888

原创 live555 源码分析:ServerMediaSession

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

2017-09-07 13:47:40 2160

原创 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 445

原创 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

原创 live555 源码分析:RTSPServer

live555 使用 RTSP/RTP/RTCP 协议来实现流媒体的传输,其中使用 RTSP 来建立流媒体会话,并对流媒体会话进行控制。在 live555 中,通过类 RTSPServerSupportingHTTPStreaming::RTSPClientConnectionSupportingHTTPStreaming 来处理 RTSP 请求。客户端发送过来的请求在其父类 GenericMedi

2017-09-02 15:54:38 868

原创 Wireshark 抓包分析 RTSP/RTP/RTCP 基本工作过程

整体而言,RTSP 通常工作于可靠的传输协议 TCP 之上,就像 HTTP 那样,用于发起/结束流媒体传输,交换流媒体元信息。RTP 通常工作于 UDP 之上,用于传输实际的流媒体数据,其中的载荷格式因具体流媒体类型的不同而不同,通常有专门的 RFC 规范对其进行定义,如 H.264 编码格式视频数据的载荷格式在 RFC 6184, RTP Payload Format for H.264 Vi

2017-09-01 14:53:04 18630 8

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

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