--
You received this message because you are subscribed to the Google Groups "TURN Server (Open-Source project)" group.
To unsubscribe from this group and stop receiving emails from it, send an email to turn-server-project-rfc57...@googlegroups.com.
To post to this group, send email to turn-server-project...@googlegroups.com.
Visit this group at http://groups.google.com/group/turn-server-project-rfc5766-turn-server.
For more options, visit https://groups.google.com/d/optout.
I have seen people trying to use multiple TCP connections in parallel to avoid Head-of-Line blocking, but that's not part of TURN spec unfortunately.Perhaps some changes at TCP level to partially disable retransmissions could be also done (acknowledging even lost packets), but probably require low level stack modifications. What do you think?
On Sat, Mar 8, 2014 at 12:17 AM, Oleg Moskalenko <mom0...@gmail.com> wrote:
Bad connections must not be a problem when UDP is used. But when you are using TCP, then the temporary network outage will inevitably result into TCP connection breakage. I do not know whther anything can be done about that. I'll think about that. But it may be a difficult thing to workaround.
Oleg
On Saturday, March 8, 2014 12:04:39 AM UTC-8, Sprogrammer wrote:I have been testing with my team. they went to HOTEL and some PARKING space where you have HOTSPOT internet.> using webRTC they place the call> i see the call came in> Turn server tried something> instantly call is disconnectIt happen over and over. There internet is too slow and sometimes internet drops and comes backIn such situation i have seen Skype works, Google Hangout works. But WebRTC with Turnserver is not working reliably like Skype/Google Hangout.How can we it be resolved with Turn server? Any adviseThank you.Best regards/Sham
--
You received this message because you are subscribed to the Google Groups "TURN Server (Open-Source project)" group.
To unsubscribe from this group and stop receiving emails from it, send an email to turn-server-project-rfc5766-turn-server+unsubscribe@googlegroups.com.
To post to this group, send email to turn-server-project-rfc5766-turn-...@googlegroups.com.
Mar 10 12:43:11 sun-Alienware-X51-R2 turnserver: 94466: handle_udp_packet: New UDP endpoint: local addr 82.143.92.18:80, remote addr 82.143.92.22:62473
Mar 10 12:43:11 sun-Alienware-X51-R2 turnserver: 94466: session 003000000000000006: user <>: incoming packet BINDING processed, success
Mar 10 12:43:11 sun-Alienware-X51-R2 turnserver: 94466: IPv4. tcp or tls connected to: 82.143.92.22:61884
Mar 10 12:43:11 sun-Alienware-X51-R2 turnserver: 94466: session 004000000000000006: user <>: incoming packet message processed, error 401
Mar 10 12:43:11 sun-Alienware-X51-R2 turnserver: 94466: IPv4. Server relay addr: 82.143.92.18:80
Mar 10 12:43:11 sun-Alienware-X51-R2 turnserver: 94466: IPv4. Local relay addr: 82.143.92.18:57346
Mar 10 12:43:11 sun-Alienware-X51-R2 turnserver: 94466: session 004000000000000006: new, username=<root>, lifetime=600
Mar 10 12:43:11 sun-Alienware-X51-R2 turnserver: 94466: session 004000000000000006: user <root>: incoming packet ALLOCATE processed, success
Mar 10 12:43:12 sun-Alienware-X51-R2 turnserver: 94467: handle_udp_packet: New UDP endpoint: local addr 82.143.92.18:80, remote addr 82.143.92.17:52401
Mar 10 12:43:12 sun-Alienware-X51-R2 turnserver: 94467: session 004000000000000007: user <>: incoming packet BINDING processed, success
Mar 10 12:43:12 sun-Alienware-X51-R2 turnserver: 94467: IPv4. tcp or tls connected to: 82.143.92.17:34160
Mar 10 12:43:12 sun-Alienware-X51-R2 turnserver: 94467: session 007000000000000006: user <>: incoming packet message processed, error 401
Mar 10 12:43:12 sun-Alienware-X51-R2 turnserver: 94467: IPv4. Server relay addr: 82.143.92.18:80
Mar 10 12:43:12 sun-Alienware-X51-R2 turnserver: 94467: IPv4. Local relay addr: 82.143.92.18:55219
Mar 10 12:43:12 sun-Alienware-X51-R2 turnserver: 94467: session 007000000000000006: new, username=<root>, lifetime=600
Mar 10 12:43:12 sun-Alienware-X51-R2 turnserver: 94467: session 007000000000000006: user <root>: incoming packet ALLOCATE processed, success
Mar 10 12:43:12 sun-Alienware-X51-R2 turnserver: 94467: session 007000000000000006: user <root>: incoming packet CREATE_PERMISSION processed, success
Mar 10 12:43:12 sun-Alienware-X51-R2 turnserver: 94467: session 004000000000000006: user <root>: incoming packet CREATE_PERMISSION processed, success
Mar 10 12:43:12 sun-Alienware-X51-R2 turnserver: 94467: session 007000000000000006: user <root>: incoming packet CHANNEL_BIND processed, success
Mar 10 12:43:12 sun-Alienware-X51-R2 turnserver: 94467: session 004000000000000006: user <root>: incoming packet CHANNEL_BIND processed, success
Mar 10 12:43:21 sun-Alienware-X51-R2 turnserver: 94476: session 003000000000000006: user <>: incoming packet BINDING processed, success
Mar 10 12:43:22 sun-Alienware-X51-R2 turnserver: 94477: session 004000000000000007: user <>: incoming packet BINDING processed, success
Mar 10 12:43:24 sun-Alienware-X51-R2 turnserver: 94480: session 007000000000000006: usage: username=<root>, rp=641, rb=214663, sp=1407, sb=743564
Mar 10 12:43:24 sun-Alienware-X51-R2 turnserver: 94480: session 004000000000000006: usage: username=<root>, rp=1411, rb=743637, sp=637, sb=215096
Mar 10 12:43:31 sun-Alienware-X51-R2 turnserver: 94486: session 003000000000000006: user <>: incoming packet BINDING processed, success
Mar 10 12:43:32 sun-Alienware-X51-R2 turnserver: 94487: session 004000000000000007: user <>: incoming packet BINDING processed, success
Mar 10 12:43:34 sun-Alienware-X51-R2 turnserver: 94489: session 007000000000000006: usage: username=<root>, rp=599, rb=272691, sp=1449, sb=952596
Mar 10 12:43:34 sun-Alienware-X51-R2 turnserver: 94489: session 004000000000000006: usage: username=<root>, rp=1448, rb=950260, sp=600, sb=273596
Mar 10 12:43:41 sun-Alienware-X51-R2 turnserver: 94496: session 004000000000000006: usage: username=<root>, rp=1482, rb=1117684, sp=566, sb=315656
Mar 10 12:43:41 sun-Alienware-X51-R2 turnserver: 94496: session 007000000000000006: usage: username=<root>, rp=567, rb=314905, sp=1481, sb=1117688
Mar 10 12:43:48 sun-Alienware-X51-R2 turnserver: 94503: session 004000000000000006: socket closed remotely
Mar 10 12:43:48 sun-Alienware-X51-R2 turnserver: 94503: session 004000000000000006: closed (1st stage), user <root>, reason: TCP connection closed by peer (callback)
^^^^^^^^^^^^^^^^^^^^^^^ here the wireless connection dropped and clearly it shows
/<--- Here it was retrying that same session to re-establish the connection (but for some reason i could not make it complete yet)
/
|
Mar 10 12:44:11 sun-Alienware-X51-R2 turnserver: 94526: session 003000000000000006: closed (2nd stage), user <>, reason: allocation watchdog determined stale session state
Mar 10 12:44:11 sun-Alienware-X51-R2 turnserver: 94526: session 004000000000000006: closed (2nd stage), user <root>, reason: allocation watchdog determined stale session state
Mar 10 12:44:11 sun-Alienware-X51-R2 turnserver: 94526: session 004000000000000006: delete: username=<root>
Mar 10 12:44:12 sun-Alienware-X51-R2 turnserver: 94527: session 004000000000000007: closed (2nd stage), user <>, reason: allocation watchdog determined stale session state
Mar 10 12:44:26 sun-Alienware-X51-R2 turnserver: 94541: handle_udp_packet: New UDP endpoint: local addr 82.143.92.18:80, remote addr 82.143.92.22:63011
Mar 10 12:44:26 sun-Alienware-X51-R2 turnserver: 94541: session 006000000000000014: user <>: incoming packet BINDING processed, success
Mar 10 12:44:26 sun-Alienware-X51-R2 turnserver: 94541: IPv4. tcp or tls connected to: 82.143.92.22:62063
Mar 10 12:44:26 sun-Alienware-X51-R2 turnserver: 94541: session 003000000000000007: user <>: incoming packet message processed, error 401
Mar 10 12:44:26 sun-Alienware-X51-R2 turnserver: 94541: IPv4. Server relay addr: 82.143.92.18:80
Mar 10 12:44:26 sun-Alienware-X51-R2 turnserver: 94541: IPv4. Local relay addr: 82.143.92.18:59351
Mar 10 12:44:26 sun-Alienware-X51-R2 turnserver: 94541: session 003000000000000007: new, username=<root>, lifetime=600
Mar 10 12:44:26 sun-Alienware-X51-R2 turnserver: 94541: session 003000000000000007: user <root>: incoming packet ALLOCATE processed, success
Mar 10 12:44:36 sun-Alienware-X51-R2 turnserver: 94551: session 006000000000000014: user <>: incoming packet BINDING processed, success
Mar 10 12:44:46 sun-Alienware-X51-R2 turnserver: 94561: session 006000000000000014: user <>: incoming packet BINDING processed, success
Mar 10 12:44:56 sun-Alienware-X51-R2 turnserver: 94571: session 003000000000000007: socket closed remotely
Mar 10 12:44:56 sun-Alienware-X51-R2 turnserver: 94571: session 003000000000000007: closed (1st stage), user <root>, reason: TCP connection closed by peer (callback)
So did you did something in the apprtc code?
Best Regards,
Silvia.
--
To unsubscribe from this group and stop receiving emails from it, send an email to turn-server-project-rfc5766-turn-server+unsubscribe@googlegroups.com.
To post to this group, send email to turn-server-project-rfc5766-turn-...@googlegroups.com.
To unsubscribe from this group and stop receiving emails from it, send an email to turn-server-project-rfc57...@googlegroups.com.
To post to this group, send email to turn-server-project...@googlegroups.com.
To unsubscribe from this group and stop receiving emails from it, send an email to turn-server-project-rfc57...@googlegroups.com.
To post to this group, send email to turn-server-project...@googlegroups.com.
OlegDo you really can produce a crash ? If yes, then describe it exactly and file a bug.I am not sure that I understand what you are saying.As for unlimited packets, that's impossible - the format of TURN packets allows max 64K data packets. That's the protocol limitation. The larger packets will produce unintelligible connections and eventually a connection drop - but not a crash.
On Wed, Mar 12, 2014 at 1:04 AM, Sprogrammer <sha...@companysocia.com> wrote:
To me turn-server should do as below 2 thing with more priority to achieve quality of service out of it:1) unlimited packet* Peer 1 and Peer 2 - can send/receive any size of packet (1080p resolution + 60fps is a huge packets for real-time and zero-lipsync to have)i can generate with VLC and Gstreamer such amount of real-time packets and pass to turn-server, for making it to crash or do abnormal behaviour* my suggestion would be to have in Turn-server configuration option where we can say: packets for in and out = unlimited (no limit) and also making higher priority to receive and send the relay as fast as we can. By allowing more options like debug mode to lower, or tiny so that there is more processing reservation for turn-server for doing heavy relay traffics2) zero-latency packet exchange for relay:* If Turn-server receives relay packets like a brute-force it should not get slow. What i have seen is that the packets become slow motion like when you move your "hands" or "clap your hands" peer1 and peer2 gets those packets very slowly and later. (you get the impression that its not real-time because of the 3 way relay)3) session-initiation theory to be more reliable/fast/stablewhen socket closed by remote and reconnected by remote (should behave as new session)there are many scenario the whole session drops because of hardware/network/bandwidth related issueallowing brute force of connections (without treating it as attack from turn-server), to protect brute-force attackssomeone should use third-party filtering or event watcher..
reg/sham
--
You received this message because you are subscribed to the Google Groups "TURN Server (Open-Source project)" group.
To unsubscribe from this group and stop receiving emails from it, send an email to turn-server-project-rfc5766-turn-server+unsubscribe@googlegroups.com.
To post to this group, send email to turn-server-project-rfc5766-turn-...@googlegroups.com.
To unsubscribe from this group and stop receiving emails from it, send an email to turn-server-project-rfc57...@googlegroups.com.
To post to this group, send email to turn-server-project...@googlegroups.com.
--
//
// SLOW - Internet
//
var frustrating = false; // true = when internet arrives reconnect
// false = normal
var temp_timer;
var temp_counter = 0;
function temptimer() {
temp_timer = setTimeout(function() {
console.log("OK => internet is ON => Connecting... => " + mystatus + " => temptimer()temptimer()temptimer()temptimer()temptimer()temptimer()");
if (tump==='Connected') {
if (mystatus==='busy') {
return false;
}
}
window.location.reload();
clearTimeout(temp_timer);
}, 9000);
}
function internet() {
timer_internet = setTimeout(function() {
$.ajax({
type : "GET",//POST
dataType: 'json',
url : netlink,
data : "username=" + roomKey + "&password=1234&language=EN&call=yes&idle=",
async : true,
beforeSend: function() {},
complete: function() { },
success : function(msg) {
if(msg.result=='success') {
if (tump==='Connecting...') {
console.log("OK ==> internet is ON ==> Connecting... => " + mystatus + " ==> " + frustrating);
callplaced = false;
if (frustrating) {
frustrating = false;
console.log("OK => internet is ON => Connecting... => " + mystatus + " => Disconnect this call");
console.log("OK => internet is ON => Connecting... => " + mystatus + " => Request a new call");
window.location.reload();
}
if (mystatus ==='free') {
console.log("OK => internet is ON => Connecting... => " + mystatus + " => Reloaded the page once");
temp_counter++;
if (temp_counter>10) {
temp_counter =0 ;
mystatus='busy';
}
} else if (mystatus ==='busy') {
console.log("OK => internet is ON => Connecting... => " + mystatus + " => if taking too long reload the page");
temp_counter++;
if (temp_counter>120) {
console.log("OK => internet is ON => Connecting... => " + mystatus + " => counter 10 !!!!!!!!!!!!!!!!!!!!!!!!");
temp_counter =0 ;
temptimer();
}
mystatus='busy';
}
} else if(tump==='Waiting') {
console.log("OK ==> internet is ON ==> Waiting => " + mystatus + " Callplaced: " + callplaced + " Frustration: " + frustrating + ' Counter: ' + temp_counter);
if (mystatus==='free') {
// after call submit waiting and free should be considered as
// reload page again
if (callplaced) {
if (frustrating) {
frustrating = false;
console.log("OK => internet is ON => Waiting => " + mystatus + " => Disconnect this call");
console.log("OK => internet is ON => Waiting => " + mystatus + " => Request a new call");
window.location.reload();
}
temp_counter++;
if (temp_counter>40) {
temp_counter =0 ;
window.location.reload();
}
}
}
} else if(tump==='Connected') {
callplaced = false;
console.log("OK ==> internet is ON ==> Connected => " + mystatus + " ==> " + frustrating);
if (frustrating) {
frustrating = false;
console.log("OK => internet is ON => Connected => " + mystatus + " => Disconnect this call");
console.log("OK => internet is ON => Connected => " + mystatus + " => Request a new call");
window.location.reload();
}
if (mystatus ==='free') {
console.log("OK => internet is ON => Connected => " + mystatus + " => Reloaded the page once");
mystatus='busy';
}
} else {
callplaced = false;
console.log("OK ==> internet is ON ==> PPPPPEEPPP => " + mystatus);
}
internet();
}
},
error: function (xhr, ajaxOptions, thrownError) {
//console.log("FAIL ==> ERROR ==> " + xhr.status);
//console.log("FAIL ==> ERROR ==> " + thrownError);
if (tump==='Connecting...') {
callplaced = false;
console.log("FAIL ==> internet is OFF ==> Connecting... => " + mystatus + " ==> " + frustrating);
frustrating = true;
} else if(tump==='Waiting') {
console.log("FAIL ==> internet is OFF ==> Waiting => " + mystatus + " Callplaced: " + callplaced + " Frustration: " + frustrating);
if (mystatus==='free') {
// after call submit waiting and free should be considered as
// reload page again
if (callplaced) {
frustrating = true;
}
}
} else if(tump==='Connected') {
callplaced = false;
console.log("FAIL ==> internet is OFF ==> Connected => " + mystatus + " ==> " + frustrating);
frustrating = true;
} else {
callplaced = false;
console.log("FAIL ==> internet is OFF ==> ELSE-ELSE => " + mystatus);
}
internet();
}
});
} , 1000);
}
To unsubscribe from this group and stop receiving emails from it, send an email to turn-server-project-rfc5766-turn-server+unsubscribe@googlegroups.com.
To post to this group, send email to turn-server-project-rfc5766-turn-...@googlegroups.com.
--
To post to this group, send email to turn-server-project-rfc5766-turn-s...@googlegroups.com.
Visit this group at http://groups.google.com/group/turn-server-project-rfc5766-turn-server.
For more options, visit https://groups.google.com/d/optout.
To unsubscribe from this group and stop receiving emails from it, send an email to turn-server-project-rfc57...@googlegroups.com.
To post to this group, send email to turn-server-project...@googlegroups.com.
To unsubscribe from this group and stop receiving emails from it, send an email to turn-server-project-rfc57...@googlegroups.com.
To post to this group, send email to turn-server-project...@googlegroups.com.
$ gst-inspect-1.0 tcpserversink
Factory Details:
Rank none (0)
Long-name TCP server sink
Klass Sink/Network
Description Send data as a server over the network via TCP
Author Thomas Vander Stichele <thomas at apestaart dot org>
Plugin Details:
Name tcp
Description transfer data over the network via TCP
Filename /usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgsttcp.so
Version 1.2.0
License LGPL
Source module gst-plugins-base
Source release date 2013-09-24
Binary package GStreamer Base Plugins (Ubuntu)
Origin URL https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0
GObject
+----GInitiallyUnowned
+----GstObject
+----GstElement
+----GstBaseSink
+----GstMultiHandleSink
+----GstMultiSocketSink
+----GstTCPServerSink
Pad Templates:
SINK template: 'sink'
Availability: Always
Capabilities:
ANY
Element Flags:
no flags set
Element Implementation:
Has change_state() function: gst_multi_handle_sink_change_state
Element has no clocking capabilities.
Element has no indexing capabilities.
Element has no URI handling capabilities.
Pads:
SINK: 'sink'
Implementation:
Has chainfunc(): gst_base_sink_chain
Has custom eventfunc(): gst_base_sink_event
Has custom queryfunc(): gst_base_sink_sink_query
Has custom iterintlinkfunc(): gst_pad_iterate_internal_links_default
Pad Template: 'sink'
Element Properties:
name : The name of the object
flags: readable, writable
String. Default: "tcpserversink0"
parent : The parent of the object
flags: readable, writable
Object of type "GstObject"
sync : Sync on the clock
flags: readable, writable
Boolean. Default: true
max-lateness : Maximum number of nanoseconds that a buffer can be late before it is dropped (-1 unlimited)
flags: readable, writable
Integer64. Range: -1 - 9223372036854775807 Default: -1
qos : Generate Quality-of-Service events upstream
flags: readable, writable
Boolean. Default: false
async : Go asynchronously to PAUSED
flags: readable, writable
Boolean. Default: true
ts-offset : Timestamp offset in nanoseconds
flags: readable, writable
Integer64. Range: -9223372036854775808 - 9223372036854775807 Default: 0
enable-last-sample : Enable the last-sample property
flags: readable, writable
Boolean. Default: true
last-sample : The last sample received in the sink
flags: readable
Boxed pointer of type "GstSample"
blocksize : Size in bytes to pull per buffer (0 = default)
flags: readable, writable
Unsigned Integer. Range: 0 - 4294967295 Default: 4096
render-delay : Additional render delay of the sink in nanoseconds
flags: readable, writable
Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0
throttle-time : The time to keep between rendered buffers (0 = disabled)
flags: readable, writable
Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0
max-bitrate : The maximum bits per second to render (0 = disabled)
flags: readable, writable
Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0
buffers-queued : Number of buffers currently queued
flags: readable
Unsigned Integer. Range: 0 - 4294967295 Default: 0
unit-format : The unit to measure the max/soft-max/queued properties
flags: readable, writable
Enum "GstFormat" Default: 4, "buffers"
(0): undefined - GST_FORMAT_UNDEFINED
(1): default - GST_FORMAT_DEFAULT
(2): bytes - GST_FORMAT_BYTES
(3): time - GST_FORMAT_TIME
(4): buffers - GST_FORMAT_BUFFERS
(5): percent - GST_FORMAT_PERCENT
units-max : max number of units to queue (-1 = no limit)
flags: readable, writable
Integer64. Range: -1 - 9223372036854775807 Default: -1
units-soft-max : Recover client when going over this limit (-1 = no limit)
flags: readable, writable
Integer64. Range: -1 - 9223372036854775807 Default: -1
buffers-max : max number of buffers to queue for a client (-1 = no limit)
flags: readable, writable
Integer. Range: -1 - 2147483647 Default: -1
buffers-soft-max : Recover client when going over this limit (-1 = no limit)
flags: readable, writable
Integer. Range: -1 - 2147483647 Default: -1
time-min : min number of time to queue (-1 = as little as possible)
flags: readable, writable
Integer64. Range: -1 - 9223372036854775807 Default: -1
bytes-min : min number of bytes to queue (-1 = as little as possible)
flags: readable, writable
Integer. Range: -1 - 2147483647 Default: -1
buffers-min : min number of buffers to queue (-1 = as few as possible)
flags: readable, writable
Integer. Range: -1 - 2147483647 Default: -1
recover-policy : How to recover when client reaches the soft max
flags: readable, writable
Enum "GstMultiHandleSinkRecoverPolicy" Default: 0, "none"
(0): none - Do not try to recover
(1): latest - Resync client to latest buffer
(2): soft-limit - Resync client to soft limit
(3): keyframe - Resync client to most recent keyframe
timeout : Maximum inactivity timeout in nanoseconds for a client (0 = no limit)
flags: readable, writable
Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0
sync-method : How to sync new clients to the stream
flags: readable, writable
Enum "GstMultiHandleSinkSyncMethod" Default: 0, "latest"
(0): latest - Serve starting from the latest buffer
(1): next-keyframe - Serve starting from the next keyframe
(2): latest-keyframe - Serve everything since the latest keyframe (burst)
(3): burst - Serve burst-value data to client
(4): burst-keyframe - Serve burst-value data starting on a keyframe
(5): burst-with-keyframe - Serve burst-value data preferably starting on a keyframe
bytes-to-serve : Number of bytes received to serve to clients
flags: readable
Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0
bytes-served : Total number of bytes send to all clients
flags: readable
Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0
burst-format : The format of the burst units (when sync-method is burst[[-with]-keyframe])
flags: readable, writable
Enum "GstFormat" Default: 0, "undefined"
(0): undefined - GST_FORMAT_UNDEFINED
(1): default - GST_FORMAT_DEFAULT
(2): bytes - GST_FORMAT_BYTES
(3): time - GST_FORMAT_TIME
(4): buffers - GST_FORMAT_BUFFERS
(5): percent - GST_FORMAT_PERCENT
burst-value : The amount of burst expressed in burst-format
flags: readable, writable
Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0
qos-dscp : Quality of Service, differentiated services code point (-1 default)
flags: readable, writable
Integer. Range: -1 - 63 Default: -1
resend-streamheader : Resend the streamheader if it changes in the caps
flags: readable, writable
Boolean. Default: true
num-handles : The current number of client handles
flags: readable
Unsigned Integer. Range: 0 - 4294967295 Default: 0
host : The host/IP to listen on
flags: readable, writable
String. Default: "localhost"
port : The port to listen to (0=random available port)
flags: readable, writable
Integer. Range: 0 - 65535 Default: 4953
current-port : The port number the socket is currently bound to
flags: readable
Integer. Range: 0 - 65535 Default: 0
Element Signals:
"client-added" : void user_function (GstElement* object,
GObject arg0,
gpointer user_data);
"client-removed" : void user_function (GstElement* object,
gint arg0,
GstMultiHandleSinkClientStatus arg1,
gpointer user_data);
"client-socket-removed" : void user_function (GstElement* object,
GSocket* arg0,
gpointer user_data);
Element Actions:
"add" : void user_function (GstElement* object,
GSocket* arg0);
"add-full" : void user_function (GstElement* object,
GSocket* arg0,
GstMultiHandleSinkSyncMethod arg1,
GstFormat arg2,
guint64 arg3,
GstFormat arg4,
guint64 arg5);
"remove" : void user_function (GstElement* object,
GSocket* arg0);
"remove-flush" : void user_function (GstElement* object,
GSocket* arg0);
"get-stats" : GstStructure * user_function (GstElement* object,
GSocket* arg0);
"clear" : void user_function (GstElement* object);
$ gst-inspect-1.0 udpsink
Factory Details:
Rank none (0)
Long-name UDP packet sender
Klass Sink/Network
Description Send data over the network via UDP
Author Wim Taymans <wim@fluendo.com>
Plugin Details:
Name udp
Description transfer data via UDP
Filename /usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstudp.so
Version 1.2.0
License LGPL
Source module gst-plugins-good
Source release date 2013-09-24
Binary package GStreamer Good Plugins (Ubuntu)
Origin URL https://launchpad.net/distros/ubuntu/+source/gst-plugins-good1.0
GObject
+----GInitiallyUnowned
+----GstObject
+----GstElement
+----GstBaseSink
+----GstMultiUDPSink
+----GstUDPSink
Implemented Interfaces:
GstURIHandler
Pad Templates:
SINK template: 'sink'
Availability: Always
Capabilities:
ANY
Element Flags:
no flags set
Element Implementation:
Has change_state() function: gst_base_sink_change_state
Element has no clocking capabilities.
Element has no indexing capabilities.
URI handling capabilities:
Element can act as sink.
Supported URI protocols:
udp
Pads:
SINK: 'sink'
Implementation:
Has chainfunc(): gst_base_sink_chain
Has custom eventfunc(): gst_base_sink_event
Has custom queryfunc(): gst_base_sink_sink_query
Has custom iterintlinkfunc(): gst_pad_iterate_internal_links_default
Pad Template: 'sink'
Element Properties:
name : The name of the object
flags: readable, writable
String. Default: "udpsink0"
parent : The parent of the object
flags: readable, writable
Object of type "GstObject"
sync : Sync on the clock
flags: readable, writable
Boolean. Default: true
max-lateness : Maximum number of nanoseconds that a buffer can be late before it is dropped (-1 unlimited)
flags: readable, writable
Integer64. Range: -1 - 9223372036854775807 Default: -1
qos : Generate Quality-of-Service events upstream
flags: readable, writable
Boolean. Default: false
async : Go asynchronously to PAUSED
flags: readable, writable
Boolean. Default: true
ts-offset : Timestamp offset in nanoseconds
flags: readable, writable
Integer64. Range: -9223372036854775808 - 9223372036854775807 Default: 0
enable-last-sample : Enable the last-sample property
flags: readable, writable
Boolean. Default: true
last-sample : The last sample received in the sink
flags: readable
Boxed pointer of type "GstSample"
blocksize : Size in bytes to pull per buffer (0 = default)
flags: readable, writable
Unsigned Integer. Range: 0 - 4294967295 Default: 4096
render-delay : Additional render delay of the sink in nanoseconds
flags: readable, writable
Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0
throttle-time : The time to keep between rendered buffers (0 = disabled)
flags: readable, writable
Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0
max-bitrate : The maximum bits per second to render (0 = disabled)
flags: readable, writable
Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0
bytes-to-serve : Number of bytes received to serve to clients
flags: readable
Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0
bytes-served : Total number of bytes sent to all clients
flags: readable
Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0
socket : Socket to use for UDP sending. (NULL == allocate)
flags: readable, writable
Object of type "GSocket"
socket-v6 : Socket to use for UDPv6 sending. (NULL == allocate)
flags: readable, writable
Object of type "GSocket"
close-socket : Close socket if passed as property on state change
flags: readable, writable
Boolean. Default: true
used-socket : Socket currently in use for UDP sending. (NULL == no socket)
flags: readable
Object of type "GSocket"
used-socket-v6 : Socket currently in use for UDPv6 sending. (NULL == no socket)
flags: readable
Object of type "GSocket"
clients : A comma separated list of host:port pairs with destinations
flags: readable, writable
String. Default: "localhost:5004"
auto-multicast : Automatically join/leave the multicast groups, FALSE means user has to do it himself
flags: readable, writable
Boolean. Default: true
multicast-iface : The network interface on which to join the multicast group
flags: readable, writable
String. Default: null
ttl : Used for setting the unicast TTL parameter
flags: readable, writable
Integer. Range: 0 - 255 Default: 64
ttl-mc : Used for setting the multicast TTL parameter
flags: readable, writable
Integer. Range: 0 - 255 Default: 1
loop : Used for setting the multicast loop parameter. TRUE = enable, FALSE = disable
flags: readable, writable
Boolean. Default: true
force-ipv4 : Forcing the use of an IPv4 socket (DEPRECATED, has no effect anymore)
flags: readable, writable
Boolean. Default: false
qos-dscp : Quality of Service, differentiated services code point (-1 default)
flags: readable, writable
Integer. Range: -1 - 63 Default: -1
send-duplicates : When a distination/port pair is added multiple times, send packets multiple times as well
flags: readable, writable
Boolean. Default: true
buffer-size : Size of the kernel send buffer in bytes, 0=default
flags: readable, writable
Integer. Range: 0 - 2147483647 Default: 0
bind-address : Address to bind the socket to
flags: readable, writable
String. Default: null
bind-port : Port to bind the socket to
flags: readable, writable
Integer. Range: 0 - 65535 Default: 0
host : The host/IP/Multicast group to send the packets to
flags: readable, writable
String. Default: "localhost"
port : The port to send the packets to
flags: readable, writable
Integer. Range: 0 - 65535 Default: 5004
Element Signals:
"client-added" : void user_function (GstElement* object,
gchararray arg0,
gint arg1,
gpointer user_data);
"client-removed" : void user_function (GstElement* object,
gchararray arg0,
gint arg1,
gpointer user_data);
Element Actions:
"add" : void user_function (GstElement* object,
gchararray arg0,
gint arg1);
"remove" : void user_function (GstElement* object,
gchararray arg0,
gint arg1);
"clear" : void user_function (GstElement* object);
"get-stats" : GstStructure * user_function (GstElement* object,
gchararray arg0,
gint arg1);
...
GST_FORMAT_BUFFERS
(5):<span style="color: #000;"
# socat TCP-LISTEN:80,reuseaddr,fork,su=nobody TCP:www.dmz.mydomain.org:80
- Consider this where you make Turn client connected on port 80
-- send 5 frames to 80
--- in the middle of 4 frame close the turn client
---- socat will also close that TCP session
----- but socat will delivery those received frames to www.dmz.mydomain.org:80
------ now turn client you can reconnect with socat and send the frame number 5
------- socat will send it to the destination
This flow of packets exchange, explains what Oleg was trying to say that TCP has to be disconnected but with UDP its opposite and more friendly
When relaying UDP over TCP, then if the UDP is arriving faster than the TCP connection can send data the incoming UDP packets can easily be dropped (for example when the TCP socket is not writable, drop any new UDP packets).
When relaying TCP, I would suggest not reading incoming TCP data when the outbound TCP socket is not writable, That way the originator of the TCP data will, eventually, notice the congestion.