首页 > 学院 > 开发设计 > 正文

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

2019-11-06 08:52:16
字体:
来源:转载
供稿:网友

与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;


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表