红联Linux门户
Linux帮助

linux下利用RTMP协议接收数据

发布时间:2017-02-16 15:05:13来源:linux网站作者:求是07
在windows下利用RTMP接收数据的代码有很多的例子可以参考,但是在Linux下利用rtmp协议接收数据,例子特别少。在无计可用的情况下,只能自己写代码了。
在写代码之前需要做一点事情,去rtmp官网上下载rtmpdump的代码包。
 
利用命令:
wget http://rtmpdump.mplayerhq.hu/download/rtmpdump-2.3.tgz  
 
效果图如下:
linux下利用RTMP协议接收数据
 
接下来解压包。
利用命令:
tar -xf rtmpdump-2.3.tgz  
cd rtmpdump-2.3  
make && make install  
 
这里会生成库文件:
librtmp.so  librtmp.so.0
 
接下来是使用的是以下代码实现接收rtmp的数据。
 
rmtp_client.c代码如下:
#include <stdio.h>  
#include <stdbool.h>  
#include "rtmp_sys.h"  
#include "log.h"  
int main(int argc, char* argv[])  
double duration=-1;  
int nRead;  
//is live stream   
bool bLiveStream=true;
int bufsize=1024*1024*10;  
char *buf=(char*)malloc(bufsize);  
memset(buf,0,bufsize);  
long countbufsize=0;
FILE *fp=fopen("receive.flv","wb");  
if (!fp){  
RTMP_LogPrintf("Open File Error.\n");  
// CleanupSockets();   
return -1;  
}
/* set log level */  
RTMP *rtmp=RTMP_Alloc();  
RTMP_Init(rtmp);
rtmp->Link.timeout=10;
if(!RTMP_SetupURL(rtmp,"rtmp://192.168.1.123/vod/stream"))  
{  
RTMP_Log(RTMP_LOGERROR,"SetupURL Err\n");  
RTMP_Free(rtmp);  
return -1;  
}  
if (bLiveStream){  
rtmp->Link.lFlags|=RTMP_LF_LIVE;  
}
//1hour   
RTMP_SetBufferMS(rtmp, 3600*1000);
if(!RTMP_Connect(rtmp,NULL)){  
RTMP_Log(RTMP_LOGERROR,"Connect Err\n");  
RTMP_Free(rtmp);  
return -1;  
}
if(!RTMP_ConnectStream(rtmp,0)){  
RTMP_Log(RTMP_LOGERROR,"ConnectStream Err\n");  
RTMP_Close(rtmp);  
RTMP_Free(rtmp);  
return -1;  
}
while(nRead=RTMP_Read(rtmp,buf,bufsize)){  
fwrite(buf,1,nRead,fp);  
countbufsize+=nRead;  
RTMP_LogPrintf("Receive: %5dByte, Total: %5.2fkB\n",nRead,countbufsize*1.0/1024);  
}
if(fp)  
fclose(fp);  
if(buf)  
{  
free(buf);  
}  
if(rtmp)  
{  
RTMP_Close(rtmp);  
RTMP_Free(rtmp);  
rtmp=NULL;  
}  
return 0;  
}
 
其中的头文件,都是在rtmpdump里面有的源码。
 
然后编译的时候是用:
gcc client_rtmp.c -o client_rtmp -lrtmp
然后生成了client_rtmp可执行文件。
 
可以接收的数据如下效果如下:
linux下利用RTMP协议接收数据
 
在linux中的rmtp的socket机制已经在库内部实现了,不需要再进行自己初始化和释放。
 
本文永久更新地址:http://www.linuxdiyf.com/linux/28464.html