diff mbox

[FFmpeg-devel,4/4] ffserver: Add basic documentation

Message ID 20180417015233.31983-5-klaxa1337@googlemail.com
State New
Headers show

Commit Message

Stephan Holljes April 17, 2018, 1:52 a.m. UTC
 Documentation.txt | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 64 insertions(+)
 create mode 100644 Documentation.txt
diff mbox


diff --git a/Documentation.txt b/Documentation.txt
new file mode 100644
index 0000000..0f7485c
--- /dev/null
+++ b/Documentation.txt
@@ -0,0 +1,64 @@ 
+In its current for this is a HTTP live-streaming server. A media file can be
+streamed to a number of clients with the correct media file being muxed on-
+the-fly for each client starting at the current position in the stream.
+The stream received by the clients is simply a HTTP response to an HTTP
+The current implementation has three different types of work that is done in
+different threads. These types are: reading a stream, accepting HTTP
+connections and writing media data to clients.
+The design tries to follow a Publisher-Subscriber-Pattern. The PublisherContext
+struct contains buffers of read media data and the list of clients. Clients
+themselves contain a buffer of media data that still has to be sent to them.
+The reading thread takes care of segmenting the stream into independent chunks
+of data and pushing it to the PublisherContext, which publishes the new Segment
+to connected clients. This publishing only adds this Segment to the client's
+The writing thread does the actual writing of data over the network. It checks
+each client's state and if there is data available that can be written to that
+client it is sent.
+The accept thread accepts new clients over HTTP and if not all client slots are
+in use, writes the stream-header and adds the client to the PublisherContext.
+A Segment is only stored in memory once and is refcounted. Buffers in the
+PublisherContext and clients contain pointers to Segments.
+Buffers are implemented using AVFifoBuffer.
+Client states are protected by pthread-mutex-locks, making it possible to run
+multiple write threads.
+Currently streams can be supplied as a stream through stdin or any ffmpeg-
+compatible URI, e.g. files or network locations. Examples:
+cat somefile.mkv | ./ffserver
+./ffserver somefile.mkv
+./ffserver http://somehost/somefile.mkv
+This will start reading the file and open port 8080 for HTTP client connections.
+The stream is read in real time from whatever resource it is retrieved.
+Currently a maximum of 16 clients is implemented.
+The server responds to any GET request with the mediastream. Any other request
+is answered with a HTTP 400 error.
+If the maximum number of clients is reached the server responds with a 503 HTTP
+error if a new client wants to connect.
+Once the stream ends the server will write all the remaining data to all
+connected clients before closing the connections and exiting.