与rtmp相关的结构体


与rtmp有关的结构体



rtmp句柄


    它表示了rtmp协议

  1. // rtmp表示了rtmp协议  
  2. typedef struct RTMP  
  3. {  
  4.   int m_inChunkSize;  
  5.   int m_outChunkSize;  
  6.   int m_nBWCheckCounter;  
  7.   int m_nBytesIn;  
  8.   int m_nBytesInSent;  
  9.   int m_nBufferMS;  
  10.   int m_stream_id;      /* returned in _result from createStream */  
  11.   int m_mediaChannel;  
  12.   uint32_t m_mediaStamp;  
  13.   uint32_t m_pauseStamp;  
  14.   int m_pausing;  
  15.   int m_nServerBW;  
  16.   int m_nClientBW;  
  17.   uint8_t m_nClientBW2;  
  18.   uint8_t m_bPlaying;  
  19.   uint8_t m_bSendEncoding;  
  20.   uint8_t m_bSendCounter;  
  21.   
  22.   int m_numInvokes;  
  23.   int m_numCalls;  
  24.   RTMP_METHOD *m_methodCalls;   /* remote method calls queue */ // 远程调用队列  
  25.   
  26.   RTMPPacket *m_vecChannelsIn[RTMP_CHANNELS];  
  27.   RTMPPacket *m_vecChannelsOut[RTMP_CHANNELS];  
  28.   int m_channelTimestamp[RTMP_CHANNELS];    /* abs timestamp of last packet */  
  29.   
  30.   double m_fAudioCodecs;    /* audioCodecs for the connect packet */  
  31.   double m_fVideoCodecs;    /* videoCodecs for the connect packet */  
  32.   double m_fEncoding;       /* AMF0 or AMF3 */  
  33.   
  34.   double m_fDuration;       /* duration of stream in seconds */  
  35.   
  36.   int m_msgCounter;     /* RTMPT stuff */  
  37.   int m_polling;  
  38.   int m_resplen;  
  39.   int m_unackd;  
  40.   AVal m_clientID; // 用户id  
  41.   
  42.   RTMP_READ m_read; // rtmp的读状态  
  43.   RTMPPacket m_write; // 用于写的packet  
  44.   RTMPSockBuf m_sb; // 套接字缓存区  
  45.   RTMP_LNK Link; // 表示一个rtmp的连接  
  46. } 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的链接


  1.   // 表示一个rtmp连接  
  2.   typedef struct RTMP_LNK  
  3.   {  
  4.     AVal hostname;  
  5.     AVal sockshost;  
  6.   
  7.     AVal playpath0; /* parsed from URL */  
  8.     AVal playpath;  /* passed in explicitly */  
  9.     AVal tcUrl;  
  10.     AVal swfUrl;  
  11.     AVal swfHash;  
  12.     AVal pageUrl;  
  13.     AVal app;  
  14.     AVal auth;  
  15.     AVal flashVer;  
  16.     AVal subscribepath;  
  17.     AVal usherToken;  
  18.     AVal WeebToken;  
  19.     AVal token;  
  20.     AMFObject extras;  
  21.     int edepth;  
  22.   
  23.     int seekTime;  
  24.     int stopTime;  
  25.   
  26. #define RTMP_LF_AUTH    0x0001  /* using auth param */  
  27. #define RTMP_LF_LIVE    0x0002  /* stream is live */  
  28. #define RTMP_LF_SWFV    0x0004  /* do SWF verification */  
  29. #define RTMP_LF_PLST    0x0008  /* send playlist before play */  
  30. #define RTMP_LF_BUFX    0x0010  /* toggle stream on BufferEmpty msg */  
  31. #define RTMP_LF_FTCU    0x0020  /* free tcUrl on close */  
  32.     int lFlags;  
  33.   
  34.     int swfAge;  
  35.     int swfSize;  
  36.   
  37.     int protocol;  
  38.     int ConnectPacket;  
  39.     int CombineConnectPacket;  
  40.     int timeout;        /* connection timeout in seconds */  
  41.     AVal Extras;  
  42.     AVal HandshakeResponse;  
  43.   
  44.     unsigned short socksport;  
  45.     unsigned short port;  
  46.   
  47. #ifdef CRYPTO  
  48. #define RTMP_SWF_HASHLEN    32  
  49.     void *dh;           /* for encryption */  
  50.     void *rc4keyIn;  
  51.     void *rc4keyOut;  
  52.   
  53.     uint32_t SWFSize;  
  54.     uint8_t SWFHash[RTMP_SWF_HASHLEN];  
  55.     char SWFVerificationResponse[RTMP_SWF_HASHLEN+10];  
  56. #endif  
  57.   } RTMP_LNK;  

  // 表示一个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进行学习!

  1. // rtmp消息块  
  2. typedef struct RTMPPacket  
  3. {  
  4.     // chunk basic header(大部分情况是一个字节)  
  5.     uint8_t m_headerType;  
  6.   
  7.     // Message type ID(1-7协议控制;8,9音视频;10以后为AMF编码消息)  
  8.     uint8_t m_packetType;  
  9.   
  10.     // 是否含有Extend timeStamp字段  
  11.     uint8_t m_hasAbsTimestamp;  /* timestamp absolute or relative? */  
  12.   
  13.     // channel 即 stream id字段  
  14.     int m_nChannel;  
  15.   
  16.     // 时间戳  
  17.     uint32_t m_nTimeStamp;  /* timestamp */  
  18.   
  19.     // message stream id  
  20.     int32_t m_nInfoField2;  /* last 4 bytes in a long header */  
  21.   
  22.     // chunk体的长度  
  23.     uint32_t m_nBodySize;  
  24.     uint32_t m_nBytesRead;  
  25.     RTMPChunk *m_chunk; // 原始rtmp消息块  
  26.     char *m_body;  
  27. } RTMPPacket;  

	// 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消息块表示其中的数据都是没有经过解析的,是原始的字节流

  1. // 原始的rtmp消息块  
  2. typedef struct RTMPChunk  
  3. {  
  4.   int c_headerSize; // 头部的长度  
  5.   int c_chunkSize; // chunk的大小  
  6.   char *c_chunk; // 数据  
  7.   char c_header[RTMP_MAX_HEADER_SIZE]; // chunk头部  
  8. } RTMPChunk;  

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


远程调用方法


  1. /* 
  2. ** 远程调用方法 
  3. */  
  4. typedef struct RTMP_METHOD  
  5. {  
  6.   AVal name;  
  7.   int num;  
  8. } RTMP_METHOD;  

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


读函数包装器


  1. /* state for read() wrapper */  
  2.   // read函数的包装器,包括状态等等  
  3.   typedef struct RTMP_READ  
  4.   {  
  5.     char *buf;  
  6.     char *bufpos;  
  7.     unsigned int buflen;  
  8.     uint32_t timestamp;  
  9.     uint8_t dataType;  
  10.     uint8_t flags;  
  11. #define RTMP_READ_HEADER    0x01  
  12. #define RTMP_READ_RESUME    0x02  
  13. #define RTMP_READ_NO_IGNORE 0x04  
  14. #define RTMP_READ_GOTKF     0x08  
  15. #define RTMP_READ_GOTFLVK   0x10  
  16. #define RTMP_READ_SEEKING   0x20  
  17.     int8_t status;  
  18. #define RTMP_READ_COMPLETE  -3  
  19. #define RTMP_READ_ERROR -2  
  20. #define RTMP_READ_EOF   -1  
  21. #define RTMP_READ_IGNORE    0  
  22.   
  23.     /* if bResume == TRUE */  
  24.     uint8_t initialFrameType;  
  25.     uint32_t nResumeTS;  
  26.     char *metaHeader;  
  27.     char *initialFrame;  
  28.     uint32_t nMetaHeaderSize;  
  29.     uint32_t nInitialFrameSize;  
  30.     uint32_t nIgnoredFrameCounter;  
  31.     uint32_t nIgnoredFlvFrameCounter;  
  32.   } RTMP_READ;  

/* 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;


套接字缓冲区


  1. // 套接字缓冲区  
  2. typedef struct RTMPSockBuf  
  3. {  
  4.   int sb_socket;  
  5.   int sb_size;      /* number of unprocessed bytes in buffer */  
  6.   char *sb_start;       /* pointer into sb_pBuffer of next byte to process */  
  7.   char sb_buf[RTMP_BUFFER_CACHE_SIZE];  /* data read from socket */  
  8.   int sb_timedout;  
  9.   void *sb_ssl;  
  10. } RTMPSockBuf;  

  // 套接字缓冲区
  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;


字符串


  1. /* 
  2. ** AVal表示一个字符串 
  3. */  
  4.   typedef struct AVal  
  5.   {  
  6.     char *av_val;  
  7.     int av_len;  
  8.   } AVal;  

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值