1. libRTMP的包结构
typedef struct RTMPPacket
{
uint8_t m_headerType;
uint8_t m_packetType;
uint8_t m_hasAbsTimestamp;
int m_nChannel;
uint32_t m_nTimeStamp;
int32_t m_nInfoField2;
uint32_t m_nBodySize;
uint32_t m_nBytesRead;
RTMPChunk *m_chunk;
char *m_body;
} RTMPPacket;
packet->m_headerType: 可以定义如下:
#define RTMP_PACKET_SIZE_LARGE 0
#define RTMP_PACKET_SIZE_MEDIUM 1
#define RTMP_PACKET_SIZE_SMALL 2
#define RTMP_PACKET_SIZE_MINIMUM 3
一般定位为 RTMP_PACKET_SIZE_MEDIUM
packet->m_packetType: 音频、视频包类型
#define RTMP_PACKET_TYPE_AUDIO 0x08
#define RTMP_PACKET_TYPE_VIDEO 0x09
#define RTMP_PACKET_TYPE_INFO 0x12
还有其他更多类型,但一般都是 音频或视频
packet->m_hasAbsTimestamp: 是否使用绝对时间戳,一般定义为0。
packet->m_nChannel:音视频通道号码,音视频不要写错,
#define STREAM_CHANNEL_METADATA 0x03
#define STREAM_CHANNEL_VIDEO 0x04
#define STREAM_CHANNEL_AUDIO 0x05
packet->m_nTimeStamp:时间戳
一般视频时间戳可以从0开始计算,每帧时间戳 + 1000/fps (25fps每帧递增25;30fps递增33)
音频时间戳也可以从0开始计算,48K采样每帧递增21;44.1K采样每帧递增23。
packet->m_nInfoField2 = rtmp->m_stream_id
packet->m_nBodySize:数据包长度 = NALU包长度 + 包头长度
packet->m_nBytesRead:不用管
packet->m_chunk: 不用管
pa