标签归档:flash

RTMP协议握手详解

RTMP协议介绍

Real Time Messaging Protocol(实时消息传送协议协议)是Adobe Systems公司为Flash Player和服务器之间音频,视频和数据传输开发的私有协议,adobe目前提供了一个并不完整的rtmp specification给大众使用,所以在使用rtmp协议时需要按flash player返回的包进行解析.
目前rtmp有以下几个变种:

  • rtmp是工作在TCP之上的明文协议,默认使用1935端口
  • rtmps是rtmp使用TLS/SSL连接
  • rtmpe是adobe使用自己的加密机制对rtmp进行加密的,虽然加密机制是使用了行业标准,并且内部实现也是专有的,但rtmpe设计基本上错误的,它本身也不提供任何的安全性.
  • rtmpt是对rtmp协议提供了一个http的封装,主要是为了防止防火墙对其进行拦截.

包结构

  • rtmp消息包使用的是二进制数据流,它们使用AMF0/AMF3进行编码.与其它协议一样,rtmp消息也是也包括消息头与消息体,而消息头又可以分为basic header,chunk header,timestamp.
  • basic header是此包的唯一不变的部分,并且由一个独立的byte构成,这其中包括了2个作重要的标志位,chunk type以及stream id.chunk type决定了消息头的编码格式,该字段的长度完全依赖于stream id,stream id是一个可变长的字段.
  • message header该字段包含了将要发送的消息的信息(或者是一部分,一个消息拆成多个chunk的情况下是一部分)该字段的长度由chunk basic header中的trunk type决定.
  • timestamp扩展时间戳就比较好理解的,就是当chunk message header的时间戳大于等于0xffffff的时候chunk message header后面的四个字节就代表扩展时间.

阅读全文…

Red5基础概念

最近产品提了一个在线音视频直播的需求,技术这边主要是java开发,这让我想起了3年前使用的一款red5的开源流媒体服务器,下面会对开发中使用内容进行说明.

red5介绍

Red5是使用java写的开源的Flash流媒体服务器,它支持以下内容:

  1. 将视频/音频文件转化为播放流(支持FLV和MP3)
  2. 录制客户端播放流(仅支持 FLV)
  3. 共享对象
  4. 现场直播流发布
  5. 远程调用(AMF)

阅读全文…