1. AMF

AMF(是Action Message Format 的缩写)是在flash和flex中与远程服务端交换数据的一种格式.它是二进制格式,Flash应用与服务端或数据库通过RPC交换数据时,通常都采用这种格式。AMF 1 诞生于Flash Player6,发展到现在已经变成了了AMF3


2. RTMP

RTMP是Real-Time Messaging Protocol(实时消息传送协议)的缩写,它是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的协议。这是一个标准的,未加密的实时消息传递协议,默认端口是1935,如 果未指定连接端口,那么flash客户端会尝试连接其他端口,其尝试连接顺序按照下列顺序依次连接:1935、443、80(RTMP), 80(RTMPT).RTMP协议是被Flash用于对象,视频,音频的传输.该协议建立在TCP协议或者轮询HTTP协议之上。  


3. RTMPT

RTMP的变种,此协建立在HTTP协议之上,是通过HTTP封装后的RTMP协议,默认端口80.


4. RTMPS

RTMP的另一个变种,此协议是通过SSL加密的RTMP协议,为数据通讯提供安全支持。SSL(Secure Sockets Layer 安全套接层)是为网络通信提供安全及数据完整性的一种安全协议。SSL在传输层对网络连接进行加密。默认端口443。


5. RTMPE

RTMP的变种,RTMPE是一个加密版本的RTMP,和RTMPS不同的是RTMPE不采用SSL加密,RTMPE加密快于SSL,并且不需要认证管理。如果没 有指定RTMPE端口,Flash播放器将像RTMP协议一样依次扫描下列端口:1935(RTMPE) 443(RTMPE) 80(RTMPE) 80(RTMPTE)


6. RTMPTE

RTMPTE 这个协议是一个通过加密通道连接的RTMPE,默认端口80.


7. RTMFP

RTMFP是Adobe公司开发的一套新的通信协议,该协议可以让使用Adobe Flash Player的 终端用户之间进行直接通信。此方案提升了目前Flash Player在网络交互方面的体验。RTMFP将减少直播、实时聊天方案的带宽消耗,例如音视频聊天和多人游戏。因为RTMFP的数据在终端用户之间流 动,而不是和服务器,所以此方案很适合于大范围的部署。RTMFP因为 采用了UDP也提升了传送的速度。UDP是Internet上一种更有效传送音频视频的方法,虽然会有一些丢包,错包。 RTMFP有两个特性可以帮助解决一些连接错误。   快速连接恢复 :连接在以外情况下将快速恢复。例如,一个无线连接掉线了,一旦重连,他将迅速拥有所有的传送能力。    IP动态化:一个活动的网络会话将以PEER来标识,即使他变了一个IP,也可以保持原来的会话。例如,一个笔记本在一个无线网络获得了一个新IP地址,他将立刻继续刚才的会话。   RTMP和RTMFP之间的不同,最根本的是他们在网络上采用的协议。RTMFP是基于UDP的,RTMP是基于TCP的。UDP在传送直播数据方面 比TCP还是有较多优势的,比如减少延时,对丢包的容忍,虽然在可靠性上有所损失。RTMFP支持Flash Player直接发送数据给另一个,而不经过Server,服务端连接将被用来初始化并交互一些客户端之间的信息,也可用来进行服务端调用或者作为进入其 他系统的网关。



#define RTMP_PROTOCOL(flavor)                    \

static const AVClass flavor##_class = {          \

    .class_name = #flavor,                       \

    .item_name  = av_default_item_name,          \

    .option     = rtmp_options,                  \

    .version    = LIBAVUTIL_VERSION_INT,         \

};                                               \

                                                 \

URLProtocol ff_##flavor##_protocol = {           \

    .name           = #flavor,                   \

    .url_open       = rtmp_open,                 \

    .url_read       = rtmp_read,                 \

    .url_read_seek  = rtmp_seek,                 \

    .url_write      = rtmp_write,                \

    .url_close      = rtmp_close,                \

    .priv_data_size = sizeof(RTMPContext),       \

    .flags          = URL_PROTOCOL_FLAG_NETWORK, \

    .priv_data_class= &flavor##_class,           \

};



RTMP_PROTOCOL(rtmp)

RTMP_PROTOCOL(rtmpe)

RTMP_PROTOCOL(rtmps)

RTMP_PROTOCOL(rtmpt)

RTMP_PROTOCOL(rtmpte)

RTMP_PROTOCOL(rtmpts)



一个奔跑的程序员