librtmp linux下 编译,Linux下librtmp使用及编程实战(示例代码)

/** RTMPPushFlv.cpp

*

* Created on: Jan 11, 2017

* Author: tla001*/#include"RTMPPushFlv.h"#include"sockInit.h"RTMPPushFlv::RTMPPushFlv(const stringurl) {//TODO Auto-generated constructor stub

rtmpUrl=url;

fp=NULL;

start_time= 0;

now_time= 0;

pre_frame_time= 0;

lasttime= 0;

b_next_is_key= 1;

pre_tag_size= 0;

type= 0;

datalength= 0;

timestamp= 0;

rtmp=RTMP_Alloc();

}

RTMPPushFlv::~RTMPPushFlv() {//TODO Auto-generated destructor stub

if (fp !=NULL) {

fclose(fp);

fp=NULL;

}

CleanupSockets();if (rtmp !=NULL) {

RTMP_Close(rtmp);

RTMP_Free(rtmp);

rtmp=NULL;

}if (p_file_buf !=NULL) {free(p_file_buf);

p_file_buf=NULL;

}

}int RTMPPushFlv::init(const stringfilename){

inFile=filename;

fp= fopen(inFile.c_str(), "rb");if (NULL ==fp) {

log_err("Open File Error");return -1;

}

InitSockets();

RTMP_Init(rtmp);//set connection timeout,default 30s

rtmp->Link.timeout = 5;if (!RTMP_SetupURL(rtmp, const_cast(rtmpUrl.c_str()))) {

RTMP_Log(RTMP_LOGERROR,"SetupURL Err\\n");//RTMP_Free(rtmp);

return -1;

}

RTMP_EnableWrite(rtmp);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;

}//jump over FLV Header

fseek(fp, 9, SEEK_SET);//jump over previousTagSizen

fseek(fp, 4, SEEK_CUR);return 0;

}voidRTMPPushFlv::run(){

worker();

}voidRTMPPushFlv::worker(){

log_info("Start to send data ...");

start_time=RTMP_GetTime();while (1) {if ((((now_time = RTMP_GetTime()) -start_time)< (pre_frame_time)) &&b_next_is_key) {//wait for 1 sec if the send process is too fast//this mechanism is not very good,need some improvement

if (pre_frame_time >lasttime) {

RTMP_LogPrintf("TimeStamp:%8lu ms\\n", pre_frame_time);

lasttime=pre_frame_time;

}

sleep(1);continue;

}//jump over type

fseek(fp, 1, SEEK_CUR);if (!ReadU24(&datalength, fp)) {break;

}if (!ReadTime(&timestamp, fp)) {break;

}//jump back

fseek(fp, -8, SEEK_CUR);

p_file_buf= (char *) malloc(11 + datalength + 4);

memset(p_file_buf,0, 11 + datalength + 4);if (fread(p_file_buf, 1, 11 + datalength + 4, fp) != (11 + datalength + 4)) {break;

}

pre_frame_time=timestamp;if (!RTMP_IsConnected(rtmp)) {

RTMP_Log(RTMP_LOGERROR,"rtmp is not connect\\n");break;

}if (!RTMP_Write(rtmp, p_file_buf, 11 + datalength + 4)) {

RTMP_Log(RTMP_LOGERROR,"Rtmp Write Error\\n");break;

}free(p_file_buf);

p_file_buf=NULL;if (!PeekU8(&type, fp)) {break;

}if (0x09 ==type) {if (fseek(fp, 11, SEEK_CUR) != 0) {break;

}if (!PeekU8(&type, fp)) {break;

}if (type == 0x17) {

b_next_is_key= 1;

}else{

b_next_is_key= 0;

}

fseek(fp,-11, SEEK_CUR);

}

}

log_info("Send Data Over");

}voidRTMPPushFlv::doPush(){this->start();

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值