From 4ad85c9aac0cb984c2e13c1602208ab052dc35b6 Mon Sep 17 00:00:00 2001 From: Thulinma Date: Sun, 7 Nov 2010 23:41:38 +0100 Subject: [PATCH] Nog een poging... --- Connector_RTMP/main.cpp | 107 +++++++++++++++++++++------------------- 1 file changed, 55 insertions(+), 52 deletions(-) diff --git a/Connector_RTMP/main.cpp b/Connector_RTMP/main.cpp index 0c83d9f5..1bc1f300 100644 --- a/Connector_RTMP/main.cpp +++ b/Connector_RTMP/main.cpp @@ -79,68 +79,71 @@ int main(){ - while (!ferror(CONN)){ + while (!ferror(CONN) && !feof(CONN)){ //only parse input if available or not yet init'ed //rightnow = getNowMS(); retval = epoll_wait(poller, events, 1, 1000); if (retval){ - fprintf(stderr, "Socket %i is now state %i, in is %i, out is %i\n", events[0].data.fd, events[0].events, EPOLLIN, EPOLLOUT); - parseChunk(); - fflush(CONN); - } - if (ready4data){ - if (!inited){ - //we are ready, connect the socket! - if (!ss.connect(streamname.c_str())){ - #ifdef DEBUG - fprintf(stderr, "Could not connect to server!\n"); - #endif - return 0; - } - FLV_Readheader(ss);//read the header, we don't want it - #ifdef DEBUG - fprintf(stderr, "Header read, starting to send video data...\n"); - #endif - inited = true; + if (events[0].events & EPOLLIN){ + parseChunk(); + fflush(CONN); } - //only send data if previous data has been ACK'ed... - if (snd_cnt - snd_window_at < snd_window_size){ - if (FLV_GetPacket(ss)){//able to read a full packet? - ts = FLVbuffer[7] * 256*256*256; - ts += FLVbuffer[4] * 256*256; - ts += FLVbuffer[5] * 256; - ts += FLVbuffer[6]; - if (ts != 0){ - if (fts == 0){fts = ts;ftst = getNowMS();} - ts -= fts; - FLVbuffer[7] = ts / (256*256*256); - FLVbuffer[4] = ts / (256*256); - FLVbuffer[5] = ts / 256; - FLVbuffer[6] = ts % 256; - ts += ftst; - }else{ - ftst = getNowMS(); - FLVbuffer[7] = ftst / (256*256*256); - FLVbuffer[4] = ftst / (256*256); - FLVbuffer[5] = ftst / 256; - FLVbuffer[6] = ftst % 256; + if (events[0].events & EPOLLOUT){ + if (ready4data){ + if (!inited){ + //we are ready, connect the socket! + if (!ss.connect(streamname.c_str())){ + #ifdef DEBUG + fprintf(stderr, "Could not connect to server!\n"); + #endif + return 0; + } + FLV_Readheader(ss);//read the header, we don't want it + #ifdef DEBUG + fprintf(stderr, "Header read, starting to send video data...\n"); + #endif + inited = true; + } + //only send data if previous data has been ACK'ed... + if (snd_cnt - snd_window_at < snd_window_size){ + if (FLV_GetPacket(ss)){//able to read a full packet? + ts = FLVbuffer[7] * 256*256*256; + ts += FLVbuffer[4] * 256*256; + ts += FLVbuffer[5] * 256; + ts += FLVbuffer[6]; + if (ts != 0){ + if (fts == 0){fts = ts;ftst = getNowMS();} + ts -= fts; + FLVbuffer[7] = ts / (256*256*256); + FLVbuffer[4] = ts / (256*256); + FLVbuffer[5] = ts / 256; + FLVbuffer[6] = ts % 256; + ts += ftst; + }else{ + ftst = getNowMS(); + FLVbuffer[7] = ftst / (256*256*256); + FLVbuffer[4] = ftst / (256*256); + FLVbuffer[5] = ftst / 256; + FLVbuffer[6] = ftst % 256; + } + SendMedia((unsigned char)FLVbuffer[0], (unsigned char *)FLVbuffer+11, FLV_len-15, ts); + FLV_Dump();//dump packet and get ready for next + } + if ((SWBerr != SWBaseSocket::ok) && (SWBerr != SWBaseSocket::notReady)){ + #ifdef DEBUG + fprintf(stderr, "No more data! :-( (%s)\n", SWBerr.get_error().c_str()); + #endif + return 0;//no more input possible! Fail immediately. + } } - SendMedia((unsigned char)FLVbuffer[0], (unsigned char *)FLVbuffer+11, FLV_len-15, ts); - FLV_Dump();//dump packet and get ready for next } - if ((SWBerr != SWBaseSocket::ok) && (SWBerr != SWBaseSocket::notReady)){ - #ifdef DEBUG - fprintf(stderr, "No more data! :-( (%s)\n", SWBerr.get_error().c_str()); - #endif - return 0;//no more input possible! Fail immediately. + //send ACK if we received a whole window + if (rec_cnt - rec_window_at > rec_window_size){ + rec_window_at = rec_cnt; + SendCTL(3, rec_cnt);//send ack (msg 3) } } } - //send ACK if we received a whole window - if (rec_cnt - rec_window_at > rec_window_size){ - rec_window_at = rec_cnt; - SendCTL(3, rec_cnt);//send ack (msg 3) - } } #ifdef DEBUG fprintf(stderr, "User disconnected.\n");