`webmetro` is a simple relay server for broadcasting a WebM stream from one uploader to many downloaders, via HTTP.
The initialization segment is remembered, so that viewers can join mid-stream.
Cluster timestamps are rewritten to be monotonic, so multiple (compatibly-encoded) webm files can be chained together without clients needing to reconnect.
* Currently the server only recognizes a single stream, at `/live`.
* The server tries to start a viewer at a cluster containing a keyframe; it is not yet smart enough to ensure that the keyframe belongs to the *video* stream.
* The server doesn't parse any metadata, such as tags; the Info segment is stripped out, everything else is blindly passed along.
* The server drops any source that it feels uses too much buffer space. This is not yet configurable, though sane files probably won't hit the limit. (Essentially, clusters & the initialization segment can't individually be more than 2M)
To get around the current lack of native HTTPS support, you can have nginx terminate the SSL connection; likewise you can have nginx handle access control.
The proxy block will need to include at least the following:
```nginx
location /webmetro/ {
# needed to stream PUT request bodies properly
proxy_http_version 1.1;
proxy_request_buffering off;
client_max_body_size 0;
# alternatively you may wish to bar PUT requests so only local clients can transmit
# proxy_method GET;
# proxy to a relay server that's only listening on localhost
proxy_pass http://localhost:8080/;
}
```
This is also useful to simply have the same public port shared by webmetro and a nicely-formatted viewer page.
* the [Icecast](http://www.icecast.org/) streaming server likewise relays media streams over HTTP, and supports additional non-WebM formats such as Ogg. It does not support clients connecting to a stream before the source, however.
## License
`webmetro` is licensed under the MIT license; see the LICENSE file.