Introducing the GStreamer Streaming Server Library, or GSS for short.
This post was originally intended to be a release announcement, but I started to wander off to work on other projects before the release was 100% complete. So perhaps this is a pre-announcement. Or it’s merely an informational piece with the bonus that the source code repository is in a pretty stable and bug-free state at the moment. I tagged it with “gss-0.5.0″.
What it is
GSS is a standalone HTTP server implemented as a library. Its special focus is to serve live video streams to thousands of clients, mainly for use inside an HTML5 video tag. It’s based on GStreamer, libsoup, and json-glib, and uses Bootstrap and BrowserID in the user interface.
GSS comes with a streaming server application that is essentially a small wrapper around the library. This application is referred to as the Entropy Wave Streaming Server (ew-stream-server); the code that is now GSS was originally split out of this application. The app can be found in the tools/ directory in the source tree.
- Streaming formats: WebM, Ogg, MPEG-TS. (FLV support is waiting for a flvparse element in GStreamer.)
- Streams in different formats/sizes/bitrates are bundled into a single “program”.
- Streaming to Flash via HTTP.
- Authentication using BrowserID.
- Automatic conversion from properly formed MPEG-TS to HTTP Live Streaming.
- Automatic conversion to RTP/RTSP (Experiemental, works for Ogg/Theora/Vorbis only.)
- Stream upload via HTTP PUT (3 different varieties), Icecast, raw TCP socket.
- Stream pull from another HTTP streaming server.
- Content protection via automatic one-time URLs.
- (Experimental) Video-on-Demand stream types.
- Per-stream, per-program, and server metrics.
- HTTP configuration interface and REST API is used to control the server, allowing standalone operation and easy integration with other web servers.
What’s not there?
- Other types of authentication, LDAP or other authorization.
- RTMP support. (Maybe some day, but there are several good open-source Flash servers out there already.)
- Support for upload using HTTP PUT with no 100-Continue header. Several HTTP libraries do this.
- Decent VOD support, with rate-controlled streaming, burst start, and seeking.