自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 LibRTMP源代码分析3

AMF协议是Action Message Format协议的简称,AMF协议是Adobe公司的协议,主要用于数据交互和远程过程调用,在功能上与WebService相当,但AMF与WebService中的xml不同在于AMF是二进制数据,而xml是文本数据,AMF的传输效率比xml高。AMF使用http方式传输,目前主要用于ActionScript中,实现Flex与Service之间的通信。AMF目

2015-09-21 18:07:27 464

原创 LibRTMP源代码分析10:处理消息

函数RTMP_ClientPacket()是libRTMP中最重要的核心函数之一,主要完成各种消息的处理。/** * @brief 根据接收到的消息类型的不同,作出不同的处理。 *  消息类型有协议控制消息、Flv数据、Flex消息等。 *  协议控制消息的定义可参考官方协议:RTMP消息格式(第5章) * * @return 如果含有多媒体(音

2015-09-21 15:33:42 612

原创 LibRTMP源代码分析9:接收消息

在这里在研究接收消息(Message)的源代码,接收消息最典型的应用就是接收视音频数据了,因为视频和音频分别都属于RTMP协议规范中的一种消息。在这里主要分析接收视音频数据。LibRTMP中完成视音频数据的接收的函数是:RTMP_Read()。// Flv文件头static const char flvHeader[] = { 'F', 'L', 'V', 0x01,   0x00

2015-09-21 15:28:32 584

原创 LibRTMP源代码分析8:发送消息

在详细分析函数RTMP_SendPacket()之前,让我们来看看RTMPPacket结构体的定义:typedef struct RTMPPacket{        uint8_t   m_headerType;// ChunkMsgHeader类型(4种)        uint8_t   m_packetType;// Message type ID(1-

2015-09-21 15:25:37 537

原创 LibRTMP源代码分析6

前面介绍了建立网络连接(NetConnection)和建立网络流(NetStream),这些命令数据是怎么发送出去的呢?在底层是怎么实现的呢?接下来就要详细分析各种消息的发送过程。 首先大致列举一下消息命令:发送connect命令          : SendConnectPacket()发送createStream命令  : RTMP_SendCreateStream(

2015-09-21 15:22:20 939

原创 LibRTMP源代码分析6:建立网络流

建立了RTMP网络连接之后,客户端发送createStream 命令到服务器端为消息连接创建一个逻辑通道。 NetStream 定义了这个传输逻辑通道,通过这个通道,音频流、视频流以及数据消息流可以通过连接客户端和服务端的 NetConnection 传输。NetConnection是默认的通信通道,流ID为 0。RTMP_SendCreateStream( )函数用来发送create

2015-09-21 15:06:41 601

原创 LibRTMP源代码分析5:建立网络连接

服务器和客户端之间只能建立一个网络连接,但是基于该连接可以创建很多网络流。他们的关系如图所示: 网络连接的基本步骤在第一篇文章中有所介绍,此处不再重复。源代码中的 RTMP_Connect(...) 用于建立RTMP网络连接。/** * @brief 建立RTMP中的网络连接(NetConnection). *  a) 创建并

2015-09-21 14:15:32 1068

原创 LibRTMP源代码分析2

获取RTMP流媒体数据很重要的前提是RTMP的URL的解析,首先回顾一下RTMP的URL的格式:         url = “rtmp://pub1.guoshi.com:1935/pushstation/ 291?wsSecret=2b8 &wsTime=5302         协议名 :RTMP_PROTOCOL_RTMP = 0;         主机名 :"pu

2015-09-21 13:17:02 546

原创 LibRTMP源代码分析4

在RTMP客户端和服务器端网络层连接成功之后,第一件事情就是RTMP的握手。至于为什么要握手,协议本身没有太多的描述,我理解的握手目的:握手的主要目的就是让客户端和服务器端互相打个招呼,其主要内容应该包括看看两者是否同时理解RTMP协议本身(至少理解握手啊,呵呵)以及对RTMP协议版本的互认;至于是否理解RTMP协议本身的解决方案就是制造一些RTMP特有的数据和要求在客户端和服务器端来回折腾几次,

2015-09-21 13:14:33 419

原创 LibRTMP源代码分析1

1. 背景知识   RTMP(Real Time Messaging Protocol)实时消息传送协议是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议。RTMP协议广泛用于直播、点播、聊天等应用,以及pc、移动、嵌入式等平台,是做流媒体开发经常会接触到的协议。想要了解RTMP,需要首先了解Flash流媒体系统。最简单的Flash流媒体系

2015-09-21 11:47:29 717

原创 android端读取本地图片出现OutOfMemoryException

前些日子一直为图片内存溢出问题困扰着,查了N多资料,将google彻底翻遍了都没找到解决方案,就当我几乎绝望的时候意外发现了一位网友的一个工具类,抱着最后一丝希望将代码co过来试了一把,结果令我喜出望外。嘿,解决了!暂不说多么欢喜了,听我慢慢道来这其中的前因后果吧!   需求:下载时候将图片一并down下来,在空间里显示并支持离线观看   第一个版本代码:    /

2015-09-17 07:48:01 418

转载 android抓包工具fiddler使用介绍 抓取 手机APP 中资源。

正题:这里介绍 抓包的关键,Fiddler  ,Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯。    我们就是用这款软件抓取 ,我们手机app 访问的 资源路径 的。    下面 我们拿实例 来演示下,怎么用fiddler 抓取数据。(以某拍为例吧)。     环境: win7 和 G620S-UL00(华

2015-09-11 17:03:34 1414

转载 ThreadLocal的工作原理

Android的消息机制主要是指Handler的运行机制,Handler的运行需要底层的MessageQueue和Looper的支撑。MessageQueue的中文翻译是消息队列,顾名思义它的内部存储了一组消息,其以队列的形式对外提供插入和删除的工作,虽然叫做消息队列,但是它的内部存储结构并不是真正的队列,而是采用单链表的数据结构来存储消息列表。Looper的中文翻译为循环,在这里可以理解为消息循

2015-09-11 13:58:34 477

转载 日期滚动栏的实现

在淘宝电影上面有这样一个功能,日期可以滑动,并且选中的是在正中间,效果如下: 看完了,那么问题来了。这个功能怎么实现呢?我们先来分析一下: 把功能拆分一下来看,如果不能滚动,是不是很好实现?其实就是一个 tab 栏,我在前面的 blog 中Android 快速实现 ViewPager 滑动页卡切换(可用作整个 app上导航) 中就实现了此功能,然后在此功能的基础上加上滚动功

2015-09-10 16:30:03 948

转载 Android中的dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()

Android中触摸事件传递过程中最重要的是dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()方法。这个是困扰初学者的问题之一,我开始也是。这里记录一下dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()的处理过程,以供记忆。    dispat

2015-09-07 17:59:53 525

原创 onMeasure流程,MeasureSpec详解

在自定义view的时候,其实很简单,只需要知道3步骤:1.测量——onMeasure():决定View的大小2.布局——onLayout():决定View在ViewGroup中的位置3.绘制——onDraw():如何绘制这个View。而第3步的onDraw系统已经封装的很好了,基本不用我们来操心,只需要专注到 1,2两个步骤就中好了。而这篇文

2015-09-06 17:17:20 649

转载 Java类的多态机制

Java中将一个方法调用同一个方法主体关联起来被称作绑定。绑定分为前期绑定和后期绑定。前期绑定是在编译器决定的,而后期绑定是在程序运行时决定的。Java中除了static方法和final方法(private方法也是final方法,只不过是隐式的为final)之外,其他所有的方法都是后期绑定。Java类的多态指的是当将子类向上转型为父类型并调用父类型中相应的方法时,多态机制会根据动态绑定自动判断出调

2015-09-04 17:45:37 391

转载 深入理解Java中的HashMap的实现原理

HashMap继承自抽象类AbstractMap,抽象类AbstractMap实现了Map接口。关系图如下所示:Java中的Map接口允许我们将一个对象作为key,也就是可以用一个对象作为key去查找另一个对象。在我们探讨HashMap的实现原理之前,我们先自己实现了一个SimpleMap类,该类继承自AbstractMap类。具体实现如下:

2015-09-04 16:49:58 455

空空如也

空空如也

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

TA关注的人

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