From 9fb606aa4f54244d465a6272324eb62598c39d2d Mon Sep 17 00:00:00 2001 From: Thulinma Date: Wed, 23 May 2012 12:50:56 +0200 Subject: [PATCH] This should fix all DTSC reading speed-related issues. --- src/buffer.cpp | 15 ++++++++++----- src/converters/dtsc2flv.cpp | 7 ++++--- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/buffer.cpp b/src/buffer.cpp index 9696a2ba..b179877e 100644 --- a/src/buffer.cpp +++ b/src/buffer.cpp @@ -117,9 +117,6 @@ namespace Buffer{ //slow down packet receiving to real-time now = getNowMS(); if ((now - lastPacketTime >= currPacketTime - prevPacketTime) || (currPacketTime <= prevPacketTime)){ - std::cin.read(charBuffer, 1024*10); - charCount = std::cin.gcount(); - inBuffer.append(charBuffer, charCount); thisStream->getWriteLock(); if (thisStream->getStream()->parsePacket(inBuffer)){ thisStream->getStream()->outPacket(0); @@ -129,6 +126,9 @@ namespace Buffer{ thisStream->dropWriteLock(true); }else{ thisStream->dropWriteLock(false); + std::cin.read(charBuffer, 1024*10); + charCount = std::cin.gcount(); + inBuffer.append(charBuffer, charCount); } }else{ if (((currPacketTime - prevPacketTime) - (now - lastPacketTime)) > 999){ @@ -149,17 +149,22 @@ namespace Buffer{ std::string inBuffer; while (buffer_running){ if (thisStream->getIPInput().connected()){ - if (thisStream->getIPInput().iread(inBuffer)){ + if (inBuffer.size() > 0){ thisStream->getWriteLock(); if (thisStream->getStream()->parsePacket(inBuffer)){ thisStream->getStream()->outPacket(0); thisStream->dropWriteLock(true); }else{ thisStream->dropWriteLock(false); + thisStream->getIPInput().iread(inBuffer); + usleep(1000);//1ms wait } + }else{ + thisStream->getIPInput().iread(inBuffer); + usleep(1000);//1ms wait } }else{ - usleep(1000000); + usleep(1000000);//1s wait } } SS.close(); diff --git a/src/converters/dtsc2flv.cpp b/src/converters/dtsc2flv.cpp index 8f0199f0..78306c6f 100644 --- a/src/converters/dtsc2flv.cpp +++ b/src/converters/dtsc2flv.cpp @@ -27,9 +27,6 @@ namespace Converters{ bool doneheader = false; while (std::cin.good()){ - std::cin.read(charBuffer, 1024*10); - charCount = std::cin.gcount(); - inBuffer.append(charBuffer, charCount); if (Strm.parsePacket(inBuffer)){ if (!doneheader){ doneheader = true; @@ -48,6 +45,10 @@ namespace Converters{ if (FLV_out.DTSCLoader(Strm)){ std::cout.write(FLV_out.data, FLV_out.len); } + }else{ + std::cin.read(charBuffer, 1024*10); + charCount = std::cin.gcount(); + inBuffer.append(charBuffer, charCount); } }