# RTMPPusher **Repository Path**: deepvision2021/rtmppusher ## Basic Information - **Project Name**: RTMPPusher - **Description**: 使用librtmp 推流 - **Primary Language**: C++ - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-07-07 - **Last Updated**: 2021-08-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RTMPPusher #### 介绍 使用librtmp 推流,其中有一种接口为零拷贝方式,没有使用openssl库,在编译的时候除了librtmp不用加其他库 #### 软件架构 client---->server windows和linux兼容 #### 安装教程 1. windows下包含头文件可以直接使用develop目录下的动态库 2. 自己编译 3. linux 等待编译 #### 使用接口两种方式 无论使用哪种方式,都要调用 InitParam 接口 url : rtmp://ip/live/1001 w : 图像宽度 h : 图像高度 fps : 帧率 have_audio: 是否有音频 aac 44100 双声道 int InitParam( const char * url, int w, int h, int fps, int have_audio); **1. 使用原始数据流** data 为h264或者aac数据指针,len为数据长度,ts为时间戳 int SendPacketVideoFrameRaw(uint8_t * data, int len, uint32_t ts); int SendPakcetAudioFrameRaw(uint8_t * data, int len, uint32_t ts); **2. 使用编码入内存方式** 仔细看TQPacket 数据结构 typedef struct TQPacket { int size = 0; uint8_t *data = NULL; //缓存地址,开辟空间 uint8_t *avhead = NULL; //音频或是视频的头部 //音视频数据放到这里, **_使用编码软件编码到该地址_** //这样数据可以零拷贝发送 uint8_t *avdata = NULL; //真实的音视频数据 int KeyFrame = 0; PACKET_TYPE av = PACKET_V; //0 音频 1 视频 TQPacket() {} ~TQPacket() { if (data != NULL) delete[]data; } }TQPacket; //接口 int SendPacketVideoFrame(TQPacket *pkt, uint32_t ts); int SendPacketAudioFrame(TQPacket *pkt, uint32_t ts);