使用librtmp接收直播流和点播流并保存

来自rtmpdump.c
rtmpdump 可使用命令
直播流
rtmpdump.exe -o savename.flv -r rtmp://127.0.0.1/live/testlive -v
点播流
rtmpdump.exe -o savename.flv -r rtmp://127.0.0.1/vod/test.flv 

直播需要加-v参数

下面是从中提取的代码,进行直播或点播流的录制

服务器使用FMS测试通过
crtmpserver需注意超时设置

#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <stdio.h>
#include <signal.h>	
#include <stdint.h>
#include "librtmp/rtmp_sys.h"
#include "librtmp/log.h"
#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"librtmp.lib")
int InitSockets()
{
	WORD version;
	WSADATA wsaData;
	version = MAKEWORD(1, 1);
	return (WSAStartup(version, &wsaData) == 0);
}

void CleanupSockets()
{
	WSACleanup();
}

int main()
{
	InitSockets();
 	RTMP rtmp={0};
 	RTMP_Init(&rtmp);
	rtmp.Link.timeout=25;//超时设置
	//由于crtmpserver是每个一段时间(默认8s)发送数据包,需大于发送间隔才行
	bool bLiveStream=true;//是否直播
	if (bLiveStream)
	{
		RTMP_SetupURL(&rtmp,"rtmp://127.0.0.1:1935/live/testlive");
		//设置直播标志
		rtmp.Link.lFlags|=RTMP_LF_LIVE;
	}else
	{
		RTMP_SetupURL(&rtmp,"rtmp://127.0.0.1:1935/vod/test.flv");
	}
	RTMP_SetBufferMS(&rtmp, 3600*1000);//1hour
	if(!RTMP_Connect(&rtmp,NULL))
	{
		printf("Connect Server Err\n");
		WSACleanup();
		return -1;
	}
	if(!RTMP_ConnectStream(&rtmp,0))
	{
		printf("Connect stream Err\n");
		RTMP_Close(&rtmp);
		WSACleanup();
		return -1;
	}
	int buffsize=1024*1024*10;
	char*buff=(char*)malloc(buffsize);
	double duration=-1;
	int nRead;
	FILE*fp=fopen("aaa.flv","wb");
	long 	countbuffsize=0;
	//它直接输出的就是FLV文件,包括FLV头,可对流按照flv格式解析就可提前音频,视频数据
	while(nRead=RTMP_Read(&rtmp,buff,buffsize))
	{
		fwrite(buff,1,nRead,fp);
		if (!bLiveStream&&duration<0)
		{
			 duration = RTMP_GetDuration(&rtmp);
			 printf("duration:%f\n",duration);
		}
		countbuffsize+=nRead;
		printf("\rdownland...:%0.2fkB",countbuffsize*1.0/1024);
	}
	fclose(fp);
	free(buff);
	buff=NULL;
	RTMP_Close(&rtmp);
	WSACleanup();
	return 0;
}


代码下载:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值