RTMP学习(七)rtmpdump源码阅读(2)与rtmp有关的结构体

与rtmp有关的结构体



rtmp句柄


    它表示了rtmp协议

  // rtmp表示了rtmp协议
  typedef struct RTMP
  {
    int m_inChunkSize;
    int m_outChunkSize;
    int m_nBWCheckCounter;
    int m_nBytesIn;
    int m_nBytesInSent;
    int m_nBufferMS;
    int m_stream_id;		/* returned in _result from createStream */
    int m_mediaChannel;
    uint32_t m_mediaStamp;
    uint32_t m_pauseStamp;
    int m_pausing;
    int m_nServerBW;
    int m_nClientBW;
    uint8_t m_nClientBW2;
    uint8_t m_bPlaying;
    uint8_t m_bSendEncoding;
    uint8_t m_bSendCounter;

    int m_numInvokes;
    int m_numCalls;
    RTMP_METHOD *m_methodCalls;	/* remote method calls queue */ // 远程调用队列

    RTMPPacket *m_vecChannelsIn[RTMP_CHANNELS];
    RTMPPacket *m_vecChannelsOut[RTMP_CHANNELS];
    int m_channelTimestamp[RTMP_CHANNELS];	/* abs timestamp of last packet */

    double m_fAudioCodecs;	/* audioCodecs for the connect packet */
    double m_fVideoCodecs;	/* videoCodecs for the connect packet */
    double m_fEncoding;		/* AMF0 or AMF3 */

    double m_fDuration;		/* duration of stream in seconds */

    int m_msgCounter;		/* RTMPT stuff */
    int m_polling;
    int m_resplen;
    int m_unackd;
    AVal m_clientID; // 用户id

    RTMP_READ m_read; // rtmp的读状态
    RTMPPacket m_write; // 用于写的packet
    RTMPSockBuf m_sb; // 套接字缓存区
    RTMP_LNK Link; // 表示一个rtmp的连接
  } RTMP;



rtmp链接


    它表示了一个rtmp的链接


  // 表示一个rtmp连接
  typedef struct RTMP_LNK
  {
    AVal hostname;
    AVal sockshost;

    AVal playpath0;	/* parsed from URL */
    AVal playpath;	/* passed in explicitly */
    AVal tcUrl;
    AVal swfUrl;
    AVal swfHash;
    AVal pageUrl;
    AVal app;
    AVal auth;
    AVal flashVer;
    AVal subscribepath;
    AVal usherToken;
    AVal WeebToken;
    AVal token;
    AMFObject extras;
    int edepth;

    int seekTime;
    int stopTime;

#define RTMP_LF_AUTH	0x0001	/* using auth param */
#define RTMP_LF_LIVE	0x0002	/* stream is live */
#define RTMP_LF_SWFV	0x0004	/* do SWF verification */
#define RTMP_LF_PLST	0x0008	/* send playlist before play */
#define RTMP_LF_BUFX	0x0010	/* toggle stream on BufferEmpty msg */
#define RTMP_LF_FTCU	0x0020	/* free tcUrl on close */
    int lFlags;

    int swfAge;
    int swfSize;

    int protocol;
    int ConnectPacket;
    int CombineConnectPacket;
    int timeout;		/* connection timeout in seconds */
    AVal Extras;
    AVal HandshakeResponse;

    unsigned short socksport;
    unsigned short port;

#ifdef CRYPTO
#define RTMP_SWF_HASHLEN	32
    void *dh;			/* for encryption */
    void *rc4keyIn;
    void *rc4keyOut;

    uint32_t SWFSize;
    uint8_t SWFHash[RTMP_SWF_HASHLEN];
    char SWFVerificationResponse[RTMP_SWF_HASHLEN+10];
#endif
  } RTMP_LNK;



rtmp消息块


    在libRtmp中,数据收发的单位是消息块(message chunk),而不是消息(message)。

    其中每个字段的值,可以对照http://blog.csdn.net/nb_vol_1/article/details/58603868进行学习!

	// rtmp消息块
	typedef struct RTMPPacket
	{
		// chunk basic header(大部分情况是一个字节)
		uint8_t m_headerType;

		// Message type ID(1-7协议控制;8,9音视频;10以后为AMF编码消息)
		uint8_t m_packetType;

		// 是否含有Extend timeStamp字段
		uint8_t m_hasAbsTimestamp;	/* timestamp absolute or relative? */

		// channel 即 stream id字段
		int m_nChannel;

		// 时间戳
		uint32_t m_nTimeStamp;	/* timestamp */

		// message stream id
		int32_t m_nInfoField2;	/* last 4 bytes in a long header */

		// chunk体的长度
		uint32_t m_nBodySize;
		uint32_t m_nBytesRead;
		RTMPChunk *m_chunk; // 原始rtmp消息块
		char *m_body;
	} RTMPPacket;





原始的rtmp消息块

    原始的rtmp消息块表示其中的数据都是没有经过解析的,是原始的字节流

  // 原始的rtmp消息块
  typedef struct RTMPChunk
  {
    int c_headerSize; // 头部的长度
    int c_chunkSize; // chunk的大小
    char *c_chunk; // 数据
    char c_header[RTMP_MAX_HEADER_SIZE]; // chunk头部
  } RTMPChunk;


远程调用方法


  /*
  ** 远程调用方法
  */
  typedef struct RTMP_METHOD
  {
    AVal name;
    int num;
  } RTMP_METHOD;


读函数包装器


/* state for read() wrapper */
  // read函数的包装器,包括状态等等
  typedef struct RTMP_READ
  {
    char *buf;
    char *bufpos;
    unsigned int buflen;
    uint32_t timestamp;
    uint8_t dataType;
    uint8_t flags;
#define RTMP_READ_HEADER	0x01
#define RTMP_READ_RESUME	0x02
#define RTMP_READ_NO_IGNORE	0x04
#define RTMP_READ_GOTKF		0x08
#define RTMP_READ_GOTFLVK	0x10
#define RTMP_READ_SEEKING	0x20
    int8_t status;
#define RTMP_READ_COMPLETE	-3
#define RTMP_READ_ERROR	-2
#define RTMP_READ_EOF	-1
#define RTMP_READ_IGNORE	0

    /* if bResume == TRUE */
    uint8_t initialFrameType;
    uint32_t nResumeTS;
    char *metaHeader;
    char *initialFrame;
    uint32_t nMetaHeaderSize;
    uint32_t nInitialFrameSize;
    uint32_t nIgnoredFrameCounter;
    uint32_t nIgnoredFlvFrameCounter;
  } RTMP_READ;


套接字缓冲区


  // 套接字缓冲区
  typedef struct RTMPSockBuf
  {
    int sb_socket;
    int sb_size;		/* number of unprocessed bytes in buffer */
    char *sb_start;		/* pointer into sb_pBuffer of next byte to process */
    char sb_buf[RTMP_BUFFER_CACHE_SIZE];	/* data read from socket */
    int sb_timedout;
    void *sb_ssl;
  } RTMPSockBuf;


字符串


/*
** AVal表示一个字符串
*/
  typedef struct AVal
  {
    char *av_val;
    int av_len;
  } AVal;






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值