OggOpusImplementation: Difference between revisions
Martin.leese (talk | contribs) m (→FFmpeg: Zapped redundant new lines) |
(Ogg Opus draft is now RFC 7845) |
||
(10 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
== Implementation Status == | == Implementation Status == | ||
Implementation status of | Implementation status of [https://tools.ietf.org/html/rfc7845 RFC 7845]. This Internet Standards Track document describes encapsulation of Opus audio in the Ogg container to make <tt>.opus</tt> files and streams. | ||
What follows is a brief summary of major implementations of the | What follows is a brief summary of major implementations of the RFC, and their status. | ||
This is intended to help understand the status of each portion of the | This is intended to help understand the status of each portion of the RFC, per [https://tools.ietf.org/html/rfc6982 RFC 6982]. | ||
=== opus-tools === | === opus-tools === | ||
The initial development implementation of this | The initial development implementation of this RFC was in the opusenc, opusdec, and opusinfo command-line utilities, part of the opus-tools package and repository. | ||
While still 'development' status (pre-1.0) these utilities are in active public use, and have shipped with Linux distributions as well as homebrew and MacPorts for OS X. | While still 'development' status (pre-1.0) these utilities are in active public use, and have shipped with Linux distributions as well as homebrew and MacPorts for OS X. | ||
Together they implement basic read, write and playback support of Ogg Opus files including metadata, multichannel, start and end trimming, the gain field, live streams, and chained files, but currently do not support seeking. | Together they implement basic read, write and playback support of Ogg Opus files including metadata, multichannel, start and end trimming, the gain field, live streams, and chained files, but currently do not support seeking. | ||
Line 19: | Line 19: | ||
=== opusfile === | === opusfile === | ||
The opusfile library is a separate implementation of this | The opusfile library is a separate implementation of this RFC as a helper library for demuxing and decoding. | ||
Like opus-tools, it supports metadata, multichannel, start and end trimming, the gain field, live streams, and chained files. | Like opus-tools, it supports metadata, multichannel, start and end trimming, the gain field, live streams, and chained files. | ||
Its primary focus is efficient seeking, including over HTTP(S) and in chained streams. | Its primary focus is efficient seeking, including over HTTP(S) and in chained streams. | ||
Line 32: | Line 32: | ||
=== Firefox === | === Firefox === | ||
The Firefox web browser is a widely deployed implementation of this | The Firefox web browser is a widely deployed implementation of this RFC. | ||
Basic playback support with the HTML5 <audio> element, including start and end trimming, the gain field, live streams, multiplexing with other streams (for, e.g., the <video> tag), and seeking, was added in Firefox 15, in production release starting August 28, 2012. | Basic playback support with the HTML5 <audio> element, including start and end trimming, the gain field, live streams, multiplexing with other streams (for, e.g., the <video> tag), and seeking, was added in Firefox 15, in production release starting August 28, 2012. | ||
Multichannel support was added in Firefox 17, in production release starting November 20, 2012. | Multichannel support was added in Firefox 17, in production release starting November 20, 2012. | ||
Line 51: | Line 51: | ||
=== Chrome === | === Chrome === | ||
Google | Google Chrome is a widely distributed implementation of this RFC. It added support with the HTML5 <audio> element in M25 and enabled it by default in M33 released in February 2014. | ||
This implementation currently does not support | This implementation currently does not support chained files. | ||
Prior to M33 support required passing --enable-opus-playback on the command line when invoking the executable. | Prior to M33 support required passing --enable-opus-playback on the command line when invoking the executable. | ||
Line 63: | Line 63: | ||
=== GStreamer === | === GStreamer === | ||
The GStreamer media framework includes an implementation of this | The GStreamer media framework includes an implementation of this RFC. | ||
It supports metadata, multichannel, start and end trimming, the gain field, live streams, chained files, multiplexing with other streams (e.g., video), and seeking. | It supports metadata, multichannel, start and end trimming, the gain field, live streams, chained files, multiplexing with other streams (e.g., video), and seeking. | ||
Support was first added in early 2011, and is part of the 0.11 and 1.0.x releases. | Support was first added in early 2011, and is part of the 0.11 and 1.0.x releases. | ||
The code implementing this | The code implementing this RFC is in the gst-plugins-bad collection, which generally indicates unsupported and/or experimental code, despite its release status. | ||
This implementation is open source. | This implementation is open source. | ||
Line 75: | Line 75: | ||
=== FFmpeg === | === FFmpeg === | ||
The popular media framework and conversion tool FFmpeg implements this | The popular media framework and conversion tool FFmpeg implements this RFC. It supports encoding and decoding, multiplexing and demultiplexing with other streams, metadata, multichannel, start and end trimming, the gain field, live streams, and seeking. | ||
This implementation is open source. | This implementation is open source. | ||
Line 83: | Line 83: | ||
=== libav === | === libav === | ||
The development repository for libav implements this | The development repository for libav implements this RFC, similar to FFmpeg. | ||
This implementation is open source. | This implementation is open source. | ||
Line 91: | Line 91: | ||
=== VLC === | === VLC === | ||
VLC is another widely deployed implementation of demuxing, decoding, and playback support for this | VLC is another widely deployed implementation of demuxing, decoding, and playback support for this RFC. | ||
It supports metadata, multichannel, start and end trimming, the gain field, live streams, seeking, chained files (though seeking does not work correctly with chained files), and multiplexing with other streams (e.g., video). | It supports metadata, multichannel, start and end trimming, the gain field, live streams, seeking, chained files (though seeking does not work correctly with chained files), and multiplexing with other streams (e.g., video). | ||
Opus support was added in version 2.0.4, released on October 18, 2012. | Opus support was added in version 2.0.4, released on October 18, 2012. | ||
Line 103: | Line 103: | ||
=== foobar2000 === | === foobar2000 === | ||
A popular Windows application, foobar2000 implements read, write, and playback support for this | A popular Windows application, foobar2000 implements read, write, and playback support for this RFC. | ||
It supports metadata, multichannel, start and end trimming, the gain field, live streams, chained files, and seeking. | It supports metadata, multichannel, start and end trimming, the gain field, live streams, chained files, and seeking. | ||
Opus support was added in version 1.1.14, released on August 17, 2012. | Opus support was added in version 1.1.14, released on August 17, 2012. | ||
Line 114: | Line 114: | ||
=== Rockbox === | === Rockbox === | ||
Rockbox is an established alternative firmware for portable music players (typically small, embedded devices) that implements demuxing, decoding, and playback support for this | Rockbox is an established alternative firmware for portable music players (typically small, embedded devices) that implements demuxing, decoding, and playback support for this RFC starting with version 3.13 released March 5, 2013. | ||
It supports metadata, start and end trimming, the gain field, and seeking. | It supports metadata, start and end trimming, the gain field, and seeking. | ||
It does not currently support multichannel or chained files. | It does not currently support multichannel or chained files. | ||
Line 123: | Line 123: | ||
* http://git.rockbox.org/?p=rockbox.git | * http://git.rockbox.org/?p=rockbox.git | ||
* http://gerrit.rockbox.org/r/#/c/300/ | * http://gerrit.rockbox.org/r/#/c/300/ | ||
=== Youki3 === | |||
Youki3 is a media player for the Android mobile operating system. It provides OPUS metadata reading support via TagLib [(c) Scott Wheeler; ported to Android] and playback via LibVLC [also see the VLC section above please; (C) VideoLAN developers]. | |||
* https://play.google.com/store/apps/details?id=net.mderezynski.youki3 | |||
The app source is currently closed, however since it utilizes LibVLC for playback, the respective source is open. | |||
=== Mutagen === | |||
Mutagen is a Python module to handle audio metadata, supporting Ogg Opus among many other media formats. It has support for editing the vorbis-style comment fields in Ogg Opus since version 1.21 (2013-01). In 2014-11 (unreleased at time of writing) it added support for preserving marked comment padding as specified in the RFC. It is used by the MusicBrainz Picard tagger, Beets music library manager, Ex Falso and Quod Libet tagger and player, among many other applications. | |||
This implementation is open source, licensed under the GPL-2. | |||
* https://mutagen.readthedocs.org/ | |||
* https://bitbucket.org/lazka/mutagen | |||
[[Category:Ogg]] | |||
[[Category:Opus]] |
Latest revision as of 20:09, 29 April 2016
Implementation Status
Implementation status of RFC 7845. This Internet Standards Track document describes encapsulation of Opus audio in the Ogg container to make .opus files and streams.
What follows is a brief summary of major implementations of the RFC, and their status. This is intended to help understand the status of each portion of the RFC, per RFC 6982.
opus-tools
The initial development implementation of this RFC was in the opusenc, opusdec, and opusinfo command-line utilities, part of the opus-tools package and repository. While still 'development' status (pre-1.0) these utilities are in active public use, and have shipped with Linux distributions as well as homebrew and MacPorts for OS X. Together they implement basic read, write and playback support of Ogg Opus files including metadata, multichannel, start and end trimming, the gain field, live streams, and chained files, but currently do not support seeking.
This implementation is open source.
opusfile
The opusfile library is a separate implementation of this RFC as a helper library for demuxing and decoding. Like opus-tools, it supports metadata, multichannel, start and end trimming, the gain field, live streams, and chained files. Its primary focus is efficient seeking, including over HTTP(S) and in chained streams. It currently does not create Ogg Opus files. This library is in early development and is not widely deployed, though several projects are currently using it, including xmms2, taglib, and cmus, and it is shipped in some Linux distributions and in homebrew.
This implementation is open source.
Firefox
The Firefox web browser is a widely deployed implementation of this RFC. Basic playback support with the HTML5 <audio> element, including start and end trimming, the gain field, live streams, multiplexing with other streams (for, e.g., the <video> tag), and seeking, was added in Firefox 15, in production release starting August 28, 2012. Multichannel support was added in Firefox 17, in production release starting November 20, 2012. Metadata support was added in Firefox 18, in production release starting January 8, 2013. Chained file support (as streams only, with seeking disabled) was added in Firefox 20, in production release starting April 2, 2013. Encoding support was added in Firefox 26, in production release starting December 10, 2013.
This implementation is open source.
- https://mozilla.org/firefox/
- https://hacks.mozilla.org/2012/08/opus-support-for-webrtc/
- https://bugzilla.mozilla.org/show_bug.cgi?id=674225
- https://bugzilla.mozilla.org/show_bug.cgi?id=748144
- https://bugzilla.mozilla.org/show_bug.cgi?id=778050
- https://bugzilla.mozilla.org/show_bug.cgi?id=455165
- https://bugzilla.mozilla.org/show_bug.cgi?id=842243
Chrome
Google Chrome is a widely distributed implementation of this RFC. It added support with the HTML5 <audio> element in M25 and enabled it by default in M33 released in February 2014. This implementation currently does not support chained files. Prior to M33 support required passing --enable-opus-playback on the command line when invoking the executable.
This implementation is based on open source code in Chromium, Blink, and FFmpeg.
- https://www.google.com/intl/en/chrome/browser/
- https://www.google.com/intl/en/chrome/browser/canary.html
- https://code.google.com/p/chromium/issues/detail?id=104241
GStreamer
The GStreamer media framework includes an implementation of this RFC. It supports metadata, multichannel, start and end trimming, the gain field, live streams, chained files, multiplexing with other streams (e.g., video), and seeking. Support was first added in early 2011, and is part of the 0.11 and 1.0.x releases. The code implementing this RFC is in the gst-plugins-bad collection, which generally indicates unsupported and/or experimental code, despite its release status.
This implementation is open source.
FFmpeg
The popular media framework and conversion tool FFmpeg implements this RFC. It supports encoding and decoding, multiplexing and demultiplexing with other streams, metadata, multichannel, start and end trimming, the gain field, live streams, and seeking.
This implementation is open source.
libav
The development repository for libav implements this RFC, similar to FFmpeg.
This implementation is open source.
VLC
VLC is another widely deployed implementation of demuxing, decoding, and playback support for this RFC. It supports metadata, multichannel, start and end trimming, the gain field, live streams, seeking, chained files (though seeking does not work correctly with chained files), and multiplexing with other streams (e.g., video). Opus support was added in version 2.0.4, released on October 18, 2012.
This implementation is open source.
- https://www.videolan.org/vlc/
- https://git.videolan.org/?p=vlc.git
- https://trac.videolan.org/vlc/ticket/7185
foobar2000
A popular Windows application, foobar2000 implements read, write, and playback support for this RFC. It supports metadata, multichannel, start and end trimming, the gain field, live streams, chained files, and seeking. Opus support was added in version 1.1.14, released on August 17, 2012. Encoding support is implemented using opusenc from opus-tools.
This implementation is closed source.
Rockbox
Rockbox is an established alternative firmware for portable music players (typically small, embedded devices) that implements demuxing, decoding, and playback support for this RFC starting with version 3.13 released March 5, 2013. It supports metadata, start and end trimming, the gain field, and seeking. It does not currently support multichannel or chained files.
This implementation is open source.
Youki3
Youki3 is a media player for the Android mobile operating system. It provides OPUS metadata reading support via TagLib [(c) Scott Wheeler; ported to Android] and playback via LibVLC [also see the VLC section above please; (C) VideoLAN developers].
The app source is currently closed, however since it utilizes LibVLC for playback, the respective source is open.
Mutagen
Mutagen is a Python module to handle audio metadata, supporting Ogg Opus among many other media formats. It has support for editing the vorbis-style comment fields in Ogg Opus since version 1.21 (2013-01). In 2014-11 (unreleased at time of writing) it added support for preserving marked comment padding as specified in the RFC. It is used by the MusicBrainz Picard tagger, Beets music library manager, Ex Falso and Quod Libet tagger and player, among many other applications.
This implementation is open source, licensed under the GPL-2.