資源簡介
本工程包含了LibRTMP的使用示例,包含如下子工程:
simplest_librtmp_receive: 接收RTMP流媒體并在本地保存成FLV格式的文件。
simplest_librtmp_send_flv: 將FLV格式的視音頻文件使用RTMP推送至RTMP流媒體服務(wù)器。
simplest_librtmp_send264: 將內(nèi)存中的H.264數(shù)據(jù)推送至RTMP流媒體服務(wù)器。
代碼片段和文件信息
/**
?*?Simplest?Librtmp?Receive
?*
?*?雷霄驊,張暉
?*?leixiaohua1020@126.com
?*?zhanghuicuc@gmail.com
?*?中國傳媒大學(xué)/數(shù)字電視技術(shù)
?*?Communication?University?of?China?/?Digital?TV?Technology
?*?http://blog.csdn.net/leixiaohua1020
?*
?*?本程序用于接收RTMP流媒體并在本地保存成FLV格式的文件。
?*?This?program?can?receive?rtmp?live?stream?and?save?it?as?local?flv?file.
?*/
#include?
#include?“l(fā)ibrtmp/rtmp_sys.h“
#include?“l(fā)ibrtmp/log.h“
int?InitSockets()
{
WORD?version;
WSADATA?wsaData;
version?=?MAKEWORD(1?1);
return?(WSAStartup(version?&wsaData)?==?0);
}
void?CleanupSockets()
{
WSACleanup();
}
int?main(int?argc?char*?argv[])
{
InitSockets();
double?duration=-1;
int?nRead;
//is?live?stream??
bool?bLiveStream=true;
int?bufsize=1024*1024*10;
char?*buf=(char*)malloc(bufsize);
memset(buf0bufsize);
long?countbufsize=0;
FILE?*fp=fopen(“receive.flv““wb“);
if?(!fp){
RTMP_LogPrintf(“Open?File?Error.\n“);
CleanupSockets();
return?-1;
}
/*?set?log?level?*/
//RTMP_LogLevel?loglvl=RTMP_LOGDEBUG;
//RTMP_LogSetLevel(loglvl);
RTMP?*rtmp=RTMP_Alloc();
RTMP_Init(rtmp);
//set?connection?timeoutdefault?30s
rtmp->link.timeout=10;
//?HKS‘s?live?URL
if(!RTMP_SetupURL(rtmp“rtmp://live.hkstv.hk.lxdns.com/live/hks“))
{
RTMP_Log(RTMP_LOGERROR“SetupURL?Err\n“);
RTMP_Free(rtmp);
CleanupSockets();
return?-1;
}
if?(bLiveStream){
rtmp->link.lFlags|=RTMP_LF_LIVE;
}
//1hour
RTMP_SetBufferMS(rtmp?3600*1000);
if(!RTMP_Connect(rtmpNULL)){
RTMP_Log(RTMP_LOGERROR“Connect?Err\n“);
RTMP_Free(rtmp);
CleanupSockets();
return?-1;
}
if(!RTMP_ConnectStream(rtmp0)){
RTMP_Log(RTMP_LOGERROR“ConnectStream?Err\n“);
RTMP_Free(rtmp);
RTMP_Close(rtmp);
CleanupSockets();
return?-1;
}
while(nRead=RTMP_Read(rtmpbufbufsize)){
fwrite(buf1nReadfp);
countbufsize+=nRead;
RTMP_LogPrintf(“Receive:?%5dByte?Total:?%5.2fkB\n“nReadcountbufsize*1.0/1024);
}
if(fp)
fclose(fp);
if(buf){
free(buf);
}
if(rtmp){
RTMP_Close(rtmp);
RTMP_Free(rtmp);
CleanupSockets();
rtmp=NULL;
}
return?0;
}
評論
共有 條評論