rtmpdump 捕获 rtmp视频数据 本地存储为 flv文件
2017-02-28 16:39
399 查看
1、rtmpdump相关参考
rtmpdump 实现 flv视频数据的rtmp推流功能http://blog.csdn.net/ternence_hsu/article/details/58594687
2、rtmpdump 捕获 rtmp视频数据 本地存储为 flv文件
Makefile#!/bin/sh INCLUDE = /ternence/test/rtmpdump/ LIB_DIR = /ternence/test/rtmpdump/librtmp/ LDFLAGS = -lrtmp SRC=rtmp_recv.c all:$(SRC) gcc -g -Wall $(SRC) -o target -I $(INCLUDE) -L $(LIB_DIR) $(LDFLAGS)
rtmp_recv.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "librtmp/rtmp_sys.h"
#include "librtmp/log.h"
#define SAVE_FILE_NAME "receive.flv"
#define RTMP_SERVER_URL "rtmp://172.16.1.65:1935/vod/mp4:sample.mp4"
int InitSockets()
{
/*
WORD version;
WSADATA wsaData;
version = MAKEWORD(1, 1);
return (WSAStartup(version, &wsaData) == 0);
*/
return 0;
}
void CleanupSockets()
{
//WSACleanup();
}
int main(int argc, char* argv[])
{
InitSockets();
//double duration=-1;
int nRead;
//is live stream ?
int bLiveStream=1;
int bufsize=1024*1024*10;
char *buf=(char*)malloc(bufsize);
memset(buf,0,bufsize);
long countbufsize=0;
FILE *fp=fopen(SAVE_FILE_NAME,"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 timeout,default 30s
rtmp->Link.timeout=10;
if(!RTMP_SetupURL(rtmp,RTMP_SERVER_URL))
{
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(rtmp,NULL)){
RTMP_Log(RTMP_LOGERROR,"Connect Err\n");
RTMP_Free(rtmp);
CleanupSockets();
return -1;
}
if(!RTMP_ConnectStream(rtmp,0)){
RTMP_Log(RTMP_LOGERROR,"ConnectStream Err\n");
RTMP_Close(rtmp);
RTMP_Free(rtmp);
CleanupSockets();
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);
CleanupSockets();
rtmp=NULL;
}
return 0;
}
下载:
http://download.csdn.net/detail/ternence_hsu/9766463
4000
相关文章推荐
- iOS应用程序安全(20)-本地数据存储及其安全性(NSUserDefaults, CoreData, Sqlite, Plist 文件)
- 用分布式缓存文件存储数据到本地 DistributedCache
- JavaScript-cookie是客户端本地,持久存储用户私密数据的文件
- Android本地数据的存储和读取(文件格式)
- rac ORA-001157 数据文件误创 本地盘 共享存储 ASM cannot identify/lock data file
- 2、安卓数据存储——本地文件
- 数据库读取和存储大型数据(图片、音视频文件)的函数封装
- rtmpdump 实现flv视频数据的rtmp推流功能
- javaCV开发详解之4:转流器实现(也可作为本地收流器、推流器,新增添加图片及文字水印,视频图像帧保存),实现rtsp/rtmp/本地文件转发到rtmp流媒体服务器(基于javaCV-FFMPEG)
- RAC环境下误操作将数据文件添加到本地存储
- UI本地存储数据结构文件
- rac环境将误建立在本地目录的数据文件转移到ASM存储中。
- Android存储数据到本地文件
- Android上常用的几种本地数据存储方式:2、文件存储数据
- 本地数据存储----文件操作
- iOS应用程序安全(20)-本地数据存储及其安全性(NSUserDefaults, CoreData, Sqlite, Plist 文件)
- iOS应用程序安全(20)-本地数据存储及其安全性(NSUserDefaults, Keychain,CoreData, Sqlite, Plist 文件)
- 在本地存储localStorage/sessionStorage中保存图片和文件(真的不适合保存文件图片大数据)
- 数据存储(3):将数据以txt文件存储在本地,多个apk都可进行读写
- javaCV开发详解之4:转流器实现(也可作为本地收流器、推流器,新增添加图片及文字水印,视频图像帧保存),实现rtsp/rtmp/本地文件转发到rtmp流媒体服务器(基于javaCV-FFMPEG)