Patch to regulate network output
Marian Durkovic <[email protected]>
| Newsgroups | gmane.comp.video.videolan.vls.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi all, in order to solve the problem with large packet bursts I've modified the netoutput.cpp to ensure that appropriate gap is inserted after each packet sent to the network. The gap is calculated from the new config parameter MaxMbps assuming that 10 Mbps stream needs to send 1000 packets/s (gap = 1 milisecond). When this parameter is unset, no traffic averaging is performed. One issue related to this is that the standard nanosleep() on Linux typically sleeps for minimum 20 miliseconds (!) so in order to have this functionality, we need the high-resolution-timers compiled into the kernel - see http://sourceforge.net/projects/high-res-timers/ I'm including the patch below, probably some #ifdefs need to be added in order not to compile on standard kernels... With kind regards, M. -------------------------------------------------------------------------- ---- ---- ---- Marian Durkovic network manager ---- ---- ---- ---- Slovak Technical University Tel: +421 2 524 51 301 ---- ---- Computer Centre, Nam. Slobody 17 Fax: +421 2 524 94 351 ---- ---- 812 43 Bratislava, Slovak Republic E-mail: [email protected] ---- ---- ---- -------------------------------------------------------------------------- --- vls/src/modules/netchannel/netoutput.h.orig Fri Aug 9 15:42:32 2002 +++ vls/src/modules/netchannel/netoutput.h Mon Mar 3 17:12:22 2003 @@ -61,6 +61,7 @@ C_String m_strType; C_String m_strInterface; int m_iTTL; + int m_iMaxMbps; #ifdef BUGGY_VLC virtual int PrivateWriteTo(int iBuffLen) = 0; --- vls/src/modules/netchannel/netoutput.cpp.orig Fri Aug 9 15:42:32 2002 +++ vls/src/modules/netchannel/netoutput.cpp Mon Mar 3 17:53:36 2003 @@ -39,6 +39,7 @@ #include "../../server/output.h" #include "netoutput.h" +#include "posix_time.h" #ifdef HAVE_NET_IF_H #include <net/if.h> @@ -67,6 +68,8 @@ m_strInterface = pApp->GetSetting(strChannelName+".Interface", ""); C_String strTTL = pApp->GetSetting(strChannelName+".TTL", "0"); m_iTTL = strTTL.ToInt(); + C_String strMaxMbps = pApp->GetSetting(strChannelName+".MaxMbps", "0"); + m_iMaxMbps = strMaxMbps.ToInt(); // Init the buffer // The first slot is reserved for the Rtp Header @@ -301,6 +304,13 @@ ASSERT(pPacket); // And release it m_pTsProvider->ReleasePacket(pPacket); + } + + if (m_iMaxMbps) { + struct timespec ts; + ts.tv_sec=0; + ts.tv_nsec=10000000 / m_iMaxMbps; + clock_nanosleep(CLOCK_REALTIME_HR, NULL, &ts, NULL); } } } -- This is the vls-devel mailing-list, see http://www.videolan.org/streaming/ To unsubscribe, please read http://developers.videolan.org/lists.html If you are in trouble, please contact <[email protected]>