]> git.sesse.net Git - cubemap/blobdiff - README
Create $(libdir) on make install.
[cubemap] / README
diff --git a/README b/README
index 0712cbd50262ca958d2da3498ea03d97ce153a66..46a943aba596035d641743b2bb504dad5b98ce7e 100644 (file)
--- a/README
+++ b/README
@@ -1,5 +1,4 @@
-Cubemap is a high-performance, high-availability video reflector,
-specifically made for use with VLC.
+Cubemap is a high-performance, high-availability video reflector.
 
 A short list of features:
 
@@ -11,26 +10,41 @@ A short list of features:
    and sending a SIGHUP; all clients will continue as if nothing had happened
    (unless you delete the stream they are watching, of course).
    Cubemap also survives the encoder dying and reconnecting.
- - Support for setting max pacing rate through the fq packet scheduler
-   (depends on Linux 3.13 or newer).
+ - Support for setting max pacing rate through the fq packet scheduler.
  - Reflects anything VLC can reflect over HTTP, even the muxes VLC
-   has problems reflecting itself (in particular, FLV).
+   has problems reflecting itself (in particular, FLV). Can also
+   call out to external programs to receive or fetch streams in arbitrary
+   ways (e.g. through SRT), although of course they do not necessarily
+   have the same intrinsic high-availability reconfiguration support.
  - Multicast support, both for sending and receiving (supports only protocols
    that can go over UDP, e.g. MPEG-TS). Supports both ASM and SSM.
  - TLS output support, through the TLSe library (requires libtomcrypt)
-   and the Linux kernel's kTLS (Linux 4.13 or newer). There are a few
+   and the Linux kernel's kTLS (Linux 4.17 or newer). There are a few
    limitations; see below.
+ - fMP4 (HLS) output support, generating playlists on-the-fly. Note that this
+   requires some extra metadata currently only set by Nageru (not VLC).
  - IPv4 support. Yes, Cubemap even supports (some) legacy protocols.
 
 
 HOWTO:
 
-  sudo apt install libprotobuf-dev protobuf-compiler libsystemd-dev libtomcrypt-dev
+  sudo apt install libprotobuf-dev protobuf-compiler libsystemd-dev libtomcrypt-dev pkg-config autoconf
+  sudo apt install libavformat-dev libavutil-dev  # Optional
+  autoreconf -I .
   ./configure
   make -j4
 
-If you want to use HTTP input (you probably want to), you want VLC 2.2.0
-or newer. Then start the VLC encoder with the “metacube” flag to the http
+Cubemap does not in itself understand the format of video streams;
+it requires HTTP input that is already delineated into headers and blocks,
+so that it knows what parts of the stream to skip to clients that
+connect after the stream has been. (The exception is self-synchronizing
+streams with no headers, such as MPEG-TS. These can also be sent or
+received over UDP) The input format is specific to Cubemap and is called
+Metacube (technically, Metacube2, but Metacube1 is long gone and nothing
+uses it anymore). Currently, you have three options to create Metacube
+video streams: VLC, Nageru or FFmpeg with a hack.
+
+For VLC, start the VLC encoder with the “metacube” flag to the http
 access mux, like this:
 
   cvlc [...] --sout '#std{access=http{metacube,mime=video/x-flv},mux=flv,dst=:4013/test.flv}'
@@ -38,6 +52,19 @@ access mux, like this:
 Then look through cubemap.config.sample, copy it to cubemap.config,
 compile and start cubemap.
 
+Nageru, my free video mixer, can also produce Metacube streams natively,
+and so can its included transcoder/remuxer Kaeru. See the manual
+at https://nageru.sesse.net/doc/ for more information.
+
+If you feel very adventurous, you can use LD_PRELOAD to load
+ffmpeg_metacube_hack.so into an FFmpeg-using binary. (This is
+experimental; native Metacube support is vastly preferred.)
+For instance, here's one way you can use the ffmpeg(1) binary
+to serve your webcam to Cubemap:
+
+  LD_PRELOAD=ffmpeg_metacube_hack.so ffmpeg -i /dev/video0 -f mpegts -listen 1 'http://[::]:9095'
+
+
 To upgrade cubemap (after you've compiled a new binary), or to pick up new
 config:
 
@@ -54,13 +81,14 @@ Cubemap supports TLS on output, so that you can play video on TLS
 web sites without issues with mixed content. TLS on input streams is
 not (yet) supported.
 
-TLS requires kTLS, ie., Linux >= 4.13 with CONFIG_TLS enabled. Only cipher
-suites supported by kTLS is supposed, ie., AES-128-GCM (if no such cipher
-suite is available, the connection will be aborted). If the server is restarted
-before the key exchange for a connection is completed, that connection will
-not survive the restart, unlike all other connections. (This is a TLSe
-limitation.) You can have different certificates on different ports (and
-have separate ports for TLS and non-TLS), but SNI is not yet supported.
+TLS requires kTLS for both send and receive, ie., Linux >= 4.17 with CONFIG_TLS
+enabled. Only cipher suites supported by kTLS is supposed, ie., AES-128-GCM
+(if no such cipher suite is available, the connection will be aborted). If the
+server is restarted before the key exchange for a connection is completed,
+that connection will not survive the restart, unlike all other connections.
+(This is a TLSe limitation.) You can have different certificates on different
+ports (and have separate ports for TLS and non-TLS), but SNI is not yet
+supported.
 
 
 Munin plugins: