与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协议
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连接
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消息块
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;
// 原始的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;
/*
** 远程调用方法
*/
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;
/* 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;
// 套接字缓冲区
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;