本程序使用回调函数作为输入,通过自定义的回调函数,可以发送本地的文件或者内存中的数据。
本程序的函数调用结构图如下所示。
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