本程序使用回调函数作为输入,通过自定义的回调函数,可以发送本地的文件或者内存中的数据。
本程序的函数调用结构图如下所示。
InitSockets():初始化Socket
RTMP_Alloc():为结构体“RTMP”分配内存。
RTMP_Init():初始化结构体“RTMP”中的成员变量。
RTMP_SetupURL():设置输入的RTMP连接的URL。
RTMP_EnableWrite():发布流的时候必须要使用。如果不使用则代表接收流。
RTMP_Connect():建立RTMP连接,创建一个RTMP协议规范中的NetConnection。
RTMP_ConnectStream():创建一个RTMP协议规范中的NetStream。
ReadFirstNaluFromBuf():从内存中读取出第一个NAL单元。
ReadOneNaluFromBuf():从内存中读取出一个NAL单元。
h264_decode_sps():解码SPS,获取视频的宽,高,帧率信息。
SendH264Packet():发送一个NAL单元。
SendVideoSpsPps():如果是关键帧,则在发送该帧之前先发送SPS和PPS。
SendPacket():组装一个RTMPPacket,调用RTMP_SendPacket()发送出去。
RTMP_SendPacket():发送一个RTMP数据RTMPPacket。
RTMP_Close():关闭RTMP连接。
RTMP_Free():释放结构体“RTMP”。
CleanupSockets():关闭Socket。
程序提供的3个接口函数的使用方法如下。可以看出接口比较简单。
/** * Simplest Librtmp Send 264 * * 雷霄骅,张晖 * leixiaohua1020@126.com * zhanghuicuc@gmail.com * 中国传媒大学/数字电视技术 * Communication University of China / Digital TV Technology * http://blog.csdn.net/leixiaohua1020 * * 本程序用于将内存中的H.264数据推送至RTMP流媒体服务器。 * This program can send local h264 stream to net server as rtmp live stream. */ #include <stdio.h> #include "librtmp_send264.h" FILE *fp_send1; //读文件的回调函数 //we use this callback function to read data from buffer int read_buffer1(unsigned char *buf, int buf_size ){ if(!feof(fp_send1)){ int true_size=fread(buf,1,buf_size,fp_send1); return true_size; }else{ return -1; } } int main(int argc, char* argv[]) { fp_send1 = fopen("cuc_ieschool.h264", "rb"); //初始化并连接到服务器 RTMP264_Connect("rtmp://localhost/publishlive/livestream"); //发送 RTMP264_Send(read_buffer1); //断开连接并释放相关资源 RTMP264_Close(); return 0; }
最简单的基于librtmp的示例:发布H.264(H.264通过RTMP发布)
原文地址:http://blog.csdn.net/leixiaohua1020/article/details/42105049