GStreamer: Research into encoding and muxing -------------------------------------------- Use Cases --------- This is a list of various use-cases where encoding/muxing is being used. * Transcoding The goal is to convert with as minimal loss of quality any input file for a target use. A specific variant of this is transmuxing (see below). Example applications: Arista, Transmageddon * Rendering timelines The incoming streams are a collection of various segments that need to be rendered. Those segments can vary in nature (i.e. the video width/height can change). This requires the use of identiy with the single-segment property activated to transform the incoming collection of segments to a single continuous segment. Example applications: PiTiVi, Jokosher * Encoding of live sources The major risk to take into account is the encoder not encoding the incoming stream fast enough. This is outside of the scope of encodebin, and should be solved by using queues between the sources and encodebin, as well as implementing QoS in encoders and sources (the encoders emitting QoS events, and the upstream elements adapting themselves accordingly). Example applications: camerabin, cheese * Screencasting applications This is similar to encoding of live sources. The difference being that due to the nature of the source (size and amount/frequency of updates) one might want to do the encoding in two parts: * The actual live capture is encoded with a 'almost-lossless' codec (such as huffyuv) * Once the capture is done, the file created in the first step is then rendered to the desired target format. Fixing sources to only emit region-updates and having encoders capable of encoding those streams would fix the need for the first step but is outside of the scope of encodebin. Example applications: Istanbul, gnome-shell, recordmydesktop * Live transcoding This is the case of an incoming live stream which will be broadcasted/transmitted live. One issue to take into account is to reduce the encoding latency to a minimum. This should mostly be done by picking low-latency encoders. Example applications: Rygel, Coherence * Transmuxing Given a certain file, the aim is to remux the contents WITHOUT decoding into either a different container format or the same container format. Remuxing into the same container format is useful when the file was not created properly (for example, the index is missing). Whenever available, parsers should be applied on the encoded streams to validate and/or fix the streams before muxing them. Metadata from the original file must be kept in the newly created file. Example applications: Arista, Transmaggedon * Loss-less cutting Given a certain file, the aim is to extract a certain part of the file without going through the process of decoding and re-encoding that file. This is similar to the transmuxing use-case. Example applications: PiTiVi, Transmageddon, Arista, ... * Multi-pass encoding Some encoders allow doing a multi-pass encoding. The initial pass(es) are only used to collect encoding estimates and are not actually muxed and outputted. The final pass uses previously collected information, and the output is then muxed and outputted. * Archiving and intermediary format The requirement is to have lossless * CD ripping Example applications: Sound-juicer * DVD ripping Example application: Thoggen