# Theora

Theora ist ein von der Xiph.Org Foundation entwickelter freier Videocodec und Videoformat, der zum Ogg-Containerformat gehört. Aufbauend auf dem VP3.2-Codec des Unternehmens On2 Technologies sollte eine patentfreie Alternative zu proprietären Niedrig-Bitraten-Video-Codecs wie RealVideo, DivX oder Windows Media Video geboten werden.

## Geschichte

Im Juni 2002 übergab das Unternehmen On2 Technologies den Video-Codec VP3.2 an die Xiph.Org Foundation, um ihn unter einer BSD-artigen Lizenz quelloffen weiterentwickeln zu lassen. Obwohl VP3.2 patentiert ist, hatte On2 die Rechte zur abgabefreien Nutzung der jeweiligen Patente freigegeben und so die Möglichkeit eröffnet, Theora ohne patentrechtliche Probleme oder Einschränkungen zu nutzen. Der im Weiteren unter dem Namen Theora weiterentwickelte Codec wurde am 25. September 2002 in einer ersten Alpha-Version veröffentlicht. Gegenüber VP3 ist Theora bei der Quantisierung flexibler. Der Name Theora stammte dabei von Theora Jones, einer Figur aus der Cyberpunk-Fernsehserie Max Headroom.
Am 1. Juni 2004 wurde bitstream freeze festgelegt (mit libtheora 1.0alpha3), was bedeutete, dass alle Videos, die mit Codec-Versionen ab diesem Zeitpunkt und später erstellt wurden, auch mit zukünftigen Codec-Versionen gelesen werden können. Im Sommer 2004 folgten die ersten großangelegten Theora-Streams verschiedener Open-Source-Konferenzen, um die Fähigkeiten des Codecs unter Beweis zu stellen. In dieser Zeit wurde ebenfalls der RealPlayer 10 freigegeben. Er unterstützte als erster weit verbreiteter Video-Player Theora, teilweise musste aber für Microsoft Windows noch ein Plugin nachträglich installiert werden.
Am 15. Dezember 2004 wurde die Theora I Spezifikation herausgegeben.
Am 17. April 2005 wurde bekanntgegeben, dass eine C#-Portierung des Video-Codecs für die Grafik-Engine OGRE erstellt wurde. Im Juni 2005 implementierte das Software-Projekt Cinelerra die Fähigkeit, Theora-codierte Videos zu verarbeiten.
Am 22. September 2007 wurde die erste Beta-Version der Theora-Referenz-Implementation (libtheora) herausgegeben. Diese Version unterscheidet sich nach Angaben der Entwickler von der finalen Version nur noch durch die noch nicht vollständige Dokumentation und fehlenden Projektdateien für verschiedene Entwicklungsumgebungen.
Am 3. November 2008 wurde die finale libtheora 1.0 veröffentlicht.
Die Kodiereffizienz blieb hinter den aktuellen kommerziellen Alternativen noch deutlich zurück (ein mit dem Theora Codec kodiertes Video benötigt etwa 30 % mehr Speicherplatz als eines in vergleichbarer Qualität im H.264-Format). Mit Unterstützung von Red Hat und Mozilla wurde an einem neuen Referenz-Encoder namens Thusnelda gearbeitet. Durch verbesserte Bewegungssuche, Nutzung der gegenüber VP3 erweiterten Möglichkeiten bei der Quantisierung und intelligentere Bitallokation holte er wesentlich mehr aus dem Format heraus, als der alte, auf dem VP3-Encoder basierende Encoder, der von den neuen Möglichkeiten des Theora-Formates noch keinen Gebrauch machte. Dieser von Grund auf neu geschriebene Encoder wurde im September 2009 als Theora 1.1 veröffentlicht. Neben verbesserter Kodiereffizienz, die Theora nun wettbewerbsfähig machte, war er auch wesentlich schneller. Unter anderem wird durch Vorabschätzen der zu erwartenden Bewegung eines Blockes aus vergangener Bewegung viel bei der rechenaufwändigen Bewegungssuche eingespart. Danach wurde unter dem Codenamen Ptalarbvorm an libtheora 1.2 gearbeitet.
Ab 2008 wurden VP8 und dessen Nachfolger VP9 und AV1 von Google veröffentlicht. Diese ebenfalls weitgehend offen und lizenzgebührenfrei nutzbaren Videoformate haben unter anderem aufgrund der besseren Komprimierung Theora inzwischen weitgehend abgelöst.
In dem Projekt Daala wurde an einem Nachfolger zu Theora gearbeitet, die Entwicklung wurde jedoch 2015 weitgehend eingestellt.

## Wiedergabe
### Einbettung in HTML5

Gemäß dem ursprünglichen HTML5-Entwurf haben folgende Browser Unterstützung für Theora im video-Element integriert:
* Google Chrome (von Version 3.0 bis 119)
* Mozilla Firefox (ab Version 3.5)
* Opera (von Version 10.5 bis 105)
Gegen Ende 2023/Anfang 2024 haben die meisten verbreiteten Browser die Unterstützung für Theora wieder entfernt, da dessen Nutzung im Internet kaum noch nachzuweisen war und die Angriffsfläche für Zero-Day-Exploits reduziert werden sollte.

### Browser-Plugins

* Annodex Plugin von OggPlay
* Cortado, ein Java-Applet
** Itheora, eine PHP-Implementierung von Cortado
* 88Mv_Embed Mv Embed9 HTML 5 Videoelement-Implementierung für verschiedene Plugin-Typen.
* VLC-Browser-Plugins für Internet Explorer und Firefox

### Unterstützende Medien-Frameworks

* DirectShow bei Verwendung eines DirectShow-Filters
* GStreamer via Theora-Modul, unterstützt GStreamer-basierte Anwendungen z. B. Totem und Songbird
* Phonon
* QuickTime via Xiph QuickTime Components

### Unterstützende Anwendungen

* FFmpeg (eigene Implementierung)
* Helix Player
* Miro Media Player (ursprünglich bekannt als Democracy Player)
* MPlayer mit GUIs
* Songbird
* VLC (native Unterstützung)
* xine und alle libxine-basierenden Wiedergabe-Anwendungen wie zum Beispiel Kaffeine

## Codierung

Es gibt mehrere Programme anderer Hersteller, die das Codieren mittels der libtheora-Programmbibliothek unterstützen:
| Beschreibung | Unterstützte Betriebssysteme | Unterstützte Betriebssysteme | Unterstützte Betriebssysteme |
| | Linux | Mac OS X | Windows |
| ffmpeg2theora benutzt FFmpeg, um Videos zu dekodieren und libtheora zum Kodieren. Dieser robuste Theora-Kodierer kann zur Erstellung von sowohl einzelnen Videodateien als auch für Direktübertragungen (Videostreams) verwendet werden. | ja | ja | ja |
| VLC kann Theora-Videos aus allen unterstützten Eingangsformaten codieren und übertragen (streaming). | ja | ja | ja |
| OggConvert (Open Source) | ja | | beinahe |
| FreeJ ('Video DJ', Open Source) kann Theora codieren und übertragen (Streaming). Das Video stammt dabei aus einem oder mehreren Video- oder Bilddateien, während die Tonquelle aus der Soundkarte stammt. | ja | ja | |
| PiTiVi (Die Gnome-Videobearbeitungssoftware). | ja | | |
| SUPER (Freeware). | | | ja |
| LiVES (Open-Source-Videobearbeitungssoftware). | ja | ja | |
| Recordmydesktop (nimmt den aktiven Desktop als Ogg/Theora-Video auf, mit optionaler Vorbis-Audioaufnahme). | ja | | |
Die libtheora-Programmbibliothek enthält die Referenzimplementation der Theora-Spezifikation für Codierung und Decodierung. Sie wird immer noch von der Xiph.Org Foundation weiterentwickelt und kann nach den Bestimmungen der BSD-Lizenz verwendet werden. Außerdem bieten verschiedene Medien-Frameworks Unterstützung für Theora.
Die Open-Source Direct-Show Audio/Video Codec ffdshow kann über die Schnittstelle Video for Windows (VFW) Theora-Videos codieren und decodieren. Dabei werden Theoras alpha-4-Bibliotheken verwendet. Allerdings sind nicht alle Einstellungsmöglichkeiten über die grafische Benutzeroberfläche zugänglich. Auch das GStreamer-Framework unterstützt Theora.

## Bearbeitung

| Beschreibung | Unterstützte Betriebssysteme | Unterstützte Betriebssysteme | Unterstützte Betriebssysteme |
| | Linux | Mac OS X | Windows |
| PiTiVi (der Gnome-Video-Editor). | ja | | |
| Aktuelle Versionen der non-linearen Videoschnittsoftware Cinelerra unterstützen Theora. | ja | ja | |

## Direktübertragung (Streaming)

Folgende Programme können Theora-Videos direkt übertragen:
| Beschreibung | Unterstützte Betriebssysteme | Unterstützte Betriebssysteme | Unterstützte Betriebssysteme |
| | Linux | Mac OS X | Windows |
| VLC | ja | ja | Ja |
| Icecast | ja | ? | ja |
| Flumotion | ja | | |
Theora Streaming Studio erlaubt das Verbinden zu einem Icecast-Server.

## Libtheora Versionen

Versionen der Theora-Referenz-Implementation (libtheora):
| Version | Datum |
| Alpha 1 | 25. September 2002 |
| Alpha 2 | 9. Juni 2003 |
| Alpha 3 | 20. März 2004 |
| Alpha 4 | 15. Dezember 2004 |
| Alpha 5 | 20. August 2005 |
| Alpha 6 | 30. Mai 2006 |
| Alpha 7 | 20. Juni 2006 |
| Alpha 8 | 18. September 2007 |
| Beta 1 | 22. September 2007 |
| Beta 2 | 12. Oktober 2007 |
| Beta 3 | 16. April 2008 |
| 1.0 | 3. November 2008 |
| 1.1 | 24. September 2009 |
| 1.1.1 | 1. Oktober 2009 |