gstreamer/gst/tcp
Andoni Morales Alastruey 8c13488022 multifdsink: disconnect inactive clients in the select loop too
Clients are usually disconnected in the streaming thread if their inactivity
is bigger than the timeout. If no new buffers are to be rendered in the sink,
these clients will never be disconnected and for that reason it should be
handled in the select() loop too.
2011-03-10 15:10:51 +01:00
..
.gitignore
gstmultifdsink.c multifdsink: disconnect inactive clients in the select loop too 2011-03-10 15:10:51 +01:00
gstmultifdsink.h multifdsink: add first and last buffer's timestamp to the stats 2010-12-29 12:55:24 +01:00
gsttcp-marshal.list
gsttcp.c tcp: Remove dead assignment 2010-12-02 19:04:29 +01:00
gsttcp.h
gsttcpclientsink.c gst_element_class_set_details => gst_element_class_set_details_simple 2010-03-16 17:41:50 +01:00
gsttcpclientsink.h
gsttcpclientsrc.c gst_element_class_set_details => gst_element_class_set_details_simple 2010-03-16 17:41:50 +01:00
gsttcpclientsrc.h
gsttcpplugin.c
gsttcpplugin.h
gsttcpserversink.c tcp: use socklen_t where appropriate rather than specific type 2011-01-31 19:21:32 +01:00
gsttcpserversink.h
gsttcpserversrc.c gst_element_class_set_details => gst_element_class_set_details_simple 2010-03-16 17:41:50 +01:00
gsttcpserversrc.h
Makefile.am build: Makefile.am fixes 2010-03-19 01:00:36 +00:00
README
tcp.vcproj

This part of the documentation is for the new tcp elements:
- tcpclientsrc
- tcpclientsink
- tcpserversrc
- tcpserversink
                                                                                
TESTS
-----
Use these tests to test functionality of the various tcp plugins

* server: nc -l -p 3000
  client: nc localhost 3000
  everything you type in the server is shown on the client
  everything you type in the client is shown on the server

* server: nc -l -p 3000
  client: gst-launch tcpclientsrc protocol=none port=3000 ! fdsink fd=2
  everything you type in the server is shown on the client

* server: nc -l -p 3000
  client: gst-launch fdsrc fd=1 ! tcpclientsink protocol=none port=3000
  everything you type in the client is shown on the server

* server: gst-launch tcpserversrc protocol=none port=3000 ! fdsink fd=2
  client: gst-launch fdsrc fd=1 ! tcpclientsink protocol=none port=3000

* server: gst-launch fdsrc fd=1 ! tcpserversink protocol=none port=3000
  client: gst-launch tcpclientsrc protocol=none port=3000 ! fdsink fd=2
  -> Received first buffer without caps set

TODO
----
- implement DNS resolution

multifdsink
-----------
- operation:
  - client fd gets added when "add" signal gets emitted on multifdsink
  - signal handler creates a GstTCPClient structure, adds it to ->clients,
    and adds the fd to ->fd_hash, then emits client-added
  - client 

  - when a buffer comes in:
    - the _render vmethod puts the buffer on the global queue
    - and increases bytes_to_serve
    - (currently it sets streamheaders, but since this is treated globally
       this is wrong - clients can be at different positions in the stream)

  - when a client issues a write (ie requests data):
    - when using GDP, if no caps sent yet, send caps first, then set caps_sent
    - if streamheader buffers, and we haven't sent yet to this client,
      send current streamheader buffers, then set streamheader_sent
    - send out buffers