1. 背景知识
RTMP(Real Time Messaging Protocol)实时消息传送协议是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议。RTMP协议广泛用于直播、点播、聊天等应用,以及pc、移动、嵌入式等平台,是做流媒体开发经常会接触到的协议。想要了解RTMP,需要首先了解Flash流媒体系统。最简单的Flash流媒体系统由两部分组成:
客 户 端:Flash Player(一般只有这一种)![LibRTMP源代码分析1:概述 - nkwavelet - 小波的世界](http://img1.ph.126.net/Fjfp_eaabTHBWmb9_WQAyg==/3664522721896108900.jpg)
![LibRTMP源代码分析1:概述 - nkwavelet - 小波的世界](http://img1.ph.126.net/I_-yPuqW_FwDOEVH1gOzlA==/2080100077991870875.jpg)
2. libRTMP源代码分析
学习libRTMP源代码之前需要有一定的Socket编程的基础。首先需要学习《RTMP协议规范》,
中文版下载地址:http://download.csdn.net/detail/leixiaohua1020/6563059
英文版下载地址:http://www.adobe.com/cn/devnet/rtmp.html
2.1 RTMP流媒体播放过程
我们必须了解rtmp服务器和flash播放器客户端之间是怎样的一个交互流程。通过阅读RTMP协议就可以了解,这里把它归纳总结如下:
![LibRTMP源代码分析1:概述 - nkwavelet - 小波的世界](http://img0.ph.126.net/wGodFj3jK2hsCR9GWD4H4w==/1827617023882644153.jpg)
![LibRTMP源代码分析1:概述 - nkwavelet - 小波的世界](http://img0.ph.126.net/wz2tnEJSGLI-iJRl6nNGjw==/6597389724542451948.jpg)
2.2 RTMP协议简单分析
RTMP协议是一个互联网TCP/IP五层体系结构中应用层的协议。RTMP协议中基本的数据单元称为消息(Message)。当RTMP协议在互联网中传输数据的时候,消息会被拆分成更小的单元,称为消息块(Chunk)。
2.2.1 消息
消息是RTMP协议中基本的数据单元。不同种类的消息包含不同的Message Type ID,代表不同的功能。RTMP协议中一共规定了十多种消息类型,分别发挥着不同的作用。例如,Message Type ID在1-7的消息用于协议控制,这些消息一般是RTMP协议自身管理要使用的消息,用户一般情况下无需操作其中的数据。Message Type ID为8,9的消息分别用于传输音频和视频数据。Message Type ID为15-20的消息用于发送AMF编码的命令,负责用户与服务器之间的交互,比如播放,暂停等等。消息首部(Message Header)有四部分组成:标志消息类型的Message Type ID,标志消息长度的Payload Length,标识时间戳的Timestamp,标识消息所属媒体流的Stream ID。消息的报文结构如下图所示:![LibRTMP源代码分析1:概述 - nkwavelet - 小波的世界](http://img0.ph.126.net/LRXGJUjG22svJyygKojK4Q==/1156299204427613961.jpg)
![LibRTMP源代码分析1:概述 - nkwavelet - 小波的世界](http://img2.ph.126.net/xhF3VVpQ29QDEHv2Rucirw==/1340665314172939001.jpg)
2.2.3 消息分块
在消息被分割成几个消息块的过程中,消息负载部分(Message Body)被分割成大小固定的数据块(默认是128字节,最后一个数据块可以小于该固定长度),并在其首部加上消息块首部(Chunk Header),就组成了相应的消息块。消息分块过程如图5所示,一个大小为307字节的消息被分割成128字节的消息块(除了最后一个)。![LibRTMP源代码分析1:概述 - nkwavelet - 小波的世界](http://img1.ph.126.net/VniQNOL6Qvsl0QLPBBMLRw==/6599286382098289591.jpg)
2.2.4 消息格式简单图解
总结以上三个图,消息格式大致可以用以下图描述:
![LibRTMP源代码分析1:概述 - nkwavelet - 小波的世界](http://img0.ph.126.net/RexNPUWOAtSeOAMWzlIvsw==/3249910081201552431.jpg)