初始化rtmp
//分配空间
RTMP *rtmp = RTMP_Alloc();
//初始化
RTMP_Init(rtmp);
//设置推流URL
RTMP_SetupURL(rtmp, url);
//设置可写状态
RTMP_EnableWrite(rtmp);
//链接服务器
RTMP_Connect(rtmp, NULL);
//链接流
RTMP_ConnectStream(rtmp, 0);
//循环推流(AAC、H264) //开始推流
while(1){
int result = RTMP_SendPacket(rtmp, packet, 1);
RTMPPacket_Free(packet);
free(packet);
packet = NULL;
}
//关闭链接
RTMP_Close(rtmp);
//释放资源
RTMP_Free(rtmp);
rtmp=NULL;
H264包封装。在发送每一帧关键帧之前得先发送SPS、PPS帧信息,发送的每一帧(I、P、SPS、PPS)数据得添加头部信息。
2.1 SPS PPS数据
void RtmpPush::pushSPSPPS(char *sps, int spsLen, char *pps, int ppsLen) {
if (!this->queue) return;
int bodySize = spsLen + ppsLen + 16;
RTMPPacket *rtmpPacket = static_cast(malloc(sizeof(RTMPPacket)));
RTMPPacket_Alloc(rtmpPacket, bodySize);
RTMPPacket_Reset(rtmpPacket);
char *body = rtmpPacket->m_body;
int i = 0;
//frame type(4bit)和CodecId(4bit)合成一个字节(byte)
//frame type 关键帧1 非关键帧2
//CodecId 7表示avc
body[i++] = 0x17;
//fixed 4byte
body[i++] = 0x00;
body[i+