Hi Ross,

Yes as you said , there is a firewall and nat between client and server. thats why I have to use TCP.

I will increase send buffer size also and thinking to change sendTCP function to not fail even sendbuffer is full.


On 23.01.2020 16:29, Ross Finlayson wrote:

On Jan 23, 2020, at 1:32 AM, Cihan Kömeçoğlu <ci...@thundernsi.com> wrote:

Hi Ross,

Thanks for help and I solved the problem. The reason of problem is that 
RTPINTERFACE_BLOCKING_WRITE_TIMEOUT_MS value is not high enough and it causes 
failure send function in sendDataOverTCP.  Probably the root reason is poor 
network quality.
Sigh…  By your own admission, your front-end stream’s output rate is exceeding 
the capacity of your network.  Then WHY, OH WHY are you trying to stream 
RTP-over-TCP on your front-end connection??

Once again:
If a RTP-over-TCP connection is so slow that it is eventually filling up the 
sender OS’s buffer, then that means that it’s exceeding the capacity of the TCP 
connection (which is based in part on the packet loss rate of the connection 
between the server and client; it can be *much* less than the nominal speed of 
your server’s network interface).  In this case it’s more efficient to stream 
over UDP instead.  Either way, you’ll get data loss, but the overall data loss 
rate will be less than it will be over the TCP connection.  Over TCP, the data 
loss will be clumped together (at the time(s) when the sender OS’s buffer keeps 
filling up), and the overall end-to-end latency (between sender and client) 
will be higher.

Also, if you get to a situation where your OS’s output buffer is filling up, 
the LIVE555 code is forced to start using blocking I/O for many of its network 
packet writes.  This will cause the server to stall everything else that it 
might be doing.  In your case, you are experiencing stalls of up to ***500 
ms***, which is crazy.

As I have explained many times, one should stream over TCP *only if* you have a 
firewall - between the server and client - that blocks UDP packets. You should 
never stream over TCP just because you want to avoid data loss.  If your stream’s 
data rate exceeds the capacity of the network connection (server->client), then 
you *will* lose data, no matter how you choose to stream it.  But it’s much better 
to stream over UDP.  However, if you really want to avoid all data loss, then you 
should be copying your data using something like HTTP, rather than streaming it.


Ross Finlayson
Live Networks, Inc.
http://www.live555.com/


_______________________________________________
live-devel mailing list
live-devel@lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel
_______________________________________________
live-devel mailing list
live-devel@lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel

Reply via email to