<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.xiph.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mdale</id>
	<title>XiphWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.xiph.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mdale"/>
	<link rel="alternate" type="text/html" href="https://wiki.xiph.org/Special:Contributions/Mdale"/>
	<updated>2026-04-23T21:29:28Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Summer_of_Code_2010&amp;diff=10855</id>
		<title>Summer of Code 2010</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Summer_of_Code_2010&amp;diff=10855"/>
		<updated>2010-03-12T03:13:42Z</updated>

		<summary type="html">&lt;p&gt;Mdale: added initial soc 2010 page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is  our ideas page for [http://code.google.com/soc/ Google Summer of Code] projects with [http://xiph.org Xiph.org] and [http://annodex.org/ Annodex]. The two projects participate jointly this year under Xiph&#039;s name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Students&#039;&#039;&#039; please use the template at [[Summer of Code Applications]] when applying for a GSoC position.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentors&#039;&#039;&#039; please visit [[Summer of Code Mentoring]] and help us prepare our application as a mentoring organization.&lt;br /&gt;
&lt;br /&gt;
== Current Ideas ==&lt;br /&gt;
&lt;br /&gt;
=== OggIndex ===&lt;br /&gt;
Oggindex has recently been introduced and many applications need to be supported. For more info see [[OggIndex-Migration]]. Mentor: Chris Pearce&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Summer_of_Code&amp;diff=10854</id>
		<title>Summer of Code</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Summer_of_Code&amp;diff=10854"/>
		<updated>2010-03-12T03:11:24Z</updated>

		<summary type="html">&lt;p&gt;Mdale: added summer of code 2010&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*see [[Summer of Code 2009]]&lt;br /&gt;
*see [[Summer of Code 2008]]&lt;br /&gt;
*see [[Summer of Code 2010]]&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=OggIndex-Migration&amp;diff=10853</id>
		<title>OggIndex-Migration</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=OggIndex-Migration&amp;diff=10853"/>
		<updated>2010-03-09T19:17:35Z</updated>

		<summary type="html">&lt;p&gt;Mdale: added cortado to the list&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for collecting patches related to the [[Ogg Index]] introduction.&lt;br /&gt;
&lt;br /&gt;
Please add links and information about your favorite applications to this page!&lt;br /&gt;
&lt;br /&gt;
Applications which read (decode) Ogg files should be extended to additionally recognize the OggIndex.&lt;br /&gt;
&lt;br /&gt;
=== Encoders ===&lt;br /&gt;
&lt;br /&gt;
* ffmpeg2theora supports creating indexes&lt;br /&gt;
&lt;br /&gt;
* what about other encoders? VLC, GStreamer&lt;br /&gt;
&lt;br /&gt;
* oggz-chop support on output&lt;br /&gt;
&lt;br /&gt;
=== Decoders ===&lt;br /&gt;
&lt;br /&gt;
==== oggz-chop ====&lt;br /&gt;
&lt;br /&gt;
* files with index can be chopped, output will not include an index&lt;br /&gt;
* should use index for seeking and include an index in output&lt;br /&gt;
&lt;br /&gt;
==== GStreamer ====&lt;br /&gt;
&lt;br /&gt;
* support missing, opening files in totem it askes to search for a plugin, after that one can press play again and it plays but does not allow you to seek.&lt;br /&gt;
&lt;br /&gt;
* Needs indexing added to the Ogg mux?&lt;br /&gt;
&lt;br /&gt;
==== MPlayer ====&lt;br /&gt;
&lt;br /&gt;
* support missing, no error&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== VLC ====&lt;br /&gt;
&lt;br /&gt;
* support missing, no error&lt;br /&gt;
&lt;br /&gt;
==== Cortado ====&lt;br /&gt;
&lt;br /&gt;
* support missing, not tested&lt;br /&gt;
&lt;br /&gt;
==== XiphQT ====&lt;br /&gt;
&lt;br /&gt;
* support missing, not tested&lt;br /&gt;
&lt;br /&gt;
==== FFMpeg ====&lt;br /&gt;
&lt;br /&gt;
* support missing, not tested&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=HTML5&amp;diff=10410</id>
		<title>HTML5</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=HTML5&amp;diff=10410"/>
		<updated>2009-07-08T17:52:00Z</updated>

		<summary type="html">&lt;p&gt;Mdale: updaed IE&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The HTML5 specification includes support for &amp;amp;lt;video&amp;amp;gt; and &amp;amp;lt;audio&amp;amp;gt;.&lt;br /&gt;
This page outlines use of HTML5 syntax with Xiph.Org codecs, particularly Ogg [[Theora]] and Ogg [[Vorbis]]. It is also a place to collect ideas for [http://ogg.org/ ogg.org].&lt;br /&gt;
&lt;br /&gt;
See also the [http://en.flossmanuals.net/theoracookbook Theora Cookbook] for a guide to streaming and working with Ogg Theora.&lt;br /&gt;
&lt;br /&gt;
== Browser Support ==&lt;br /&gt;
&lt;br /&gt;
Our list of [[TheoraSoftwarePlayers]] lists many general-purpose media players that support Ogg Theora.&lt;br /&gt;
&lt;br /&gt;
These web browsers support HTML5 with Ogg video:&lt;br /&gt;
&lt;br /&gt;
=== Mozilla Firefox ===&lt;br /&gt;
&lt;br /&gt;
[http://www.mozilla.com/en-US/firefox/firefox.html Firefox 3.5]&lt;br /&gt;
includes &amp;quot;support for the HTML5 &amp;lt;video&amp;gt; and &amp;lt;audio&amp;gt; elements including native support for Ogg Theora encoded video and Vorbis encoded audio.&amp;quot; See [https://developer.mozilla.org/en/Using_audio_and_video_in_Firefox Using audio and video in Firefox] at the Mozilla Developer Center for more info.&lt;br /&gt;
&lt;br /&gt;
=== Opera ===&lt;br /&gt;
&lt;br /&gt;
In [http://dev.opera.com/articles/view/a-call-for-video-on-the-web-opera-vid/ A call for video on the web - Opera &amp;lt;video&amp;gt; release on Labs], Opera announce that they &amp;quot;have created an experimental build of our browser for Windows, Mac and Linux with ... support for the &amp;lt;video&amp;gt; element/Ogg Theora built in&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The article contains links to experimental builds of Opera 9.52, and provides some simple examples of HTML5 &amp;lt;video&amp;gt; markup.&lt;br /&gt;
&lt;br /&gt;
=== Google Chrome ===&lt;br /&gt;
&lt;br /&gt;
Unstable builds are available from the&lt;br /&gt;
[http://dev.chromium.org/getting-involved/dev-channel dev-channel].&lt;br /&gt;
The first version supporting Ogg Theora was chrome 3.0.182.2.&lt;br /&gt;
&lt;br /&gt;
=== Apple Safari ===&lt;br /&gt;
&lt;br /&gt;
Install [[XiphQT]]&lt;br /&gt;
&lt;br /&gt;
=== Microsoft Internet Explorer ===&lt;br /&gt;
&lt;br /&gt;
* The default install of [http://www.videolan.org/vlc/ VLC] includes the activeX extension that enables inline ogg theora playback. &lt;br /&gt;
* You can also install the [http://www.xiph.org/dshow/ direct show filters] for windows media player.&lt;br /&gt;
&lt;br /&gt;
=== Plugins ===&lt;br /&gt;
&lt;br /&gt;
[http://itheora.org/?p=screens Compatibility]&lt;br /&gt;
&lt;br /&gt;
== Web Video sites ==&lt;br /&gt;
&lt;br /&gt;
For more examples of Ogg Theora video, see&lt;br /&gt;
[[List of Theora videos]].&lt;br /&gt;
&lt;br /&gt;
The following web sites support HTML5 with Ogg Theora.&lt;br /&gt;
&lt;br /&gt;
=== Community upload sites ===&lt;br /&gt;
&lt;br /&gt;
These sites allow anyone to upload video, and provide transcoding&lt;br /&gt;
to Ogg:&lt;br /&gt;
&lt;br /&gt;
* [http://www.dailymotion.com DailyMotion]. See also DailyMotion&#039;s [http://www.dailymotion.com/openvideodemo Open Video Demo] (restricted to Firefox 3.5)&lt;br /&gt;
* Chris Double&#039;s [http://tinyvid.tv Tinyvid] (transcoding via Firefogg)&lt;br /&gt;
&lt;br /&gt;
=== Archival and Reference ===&lt;br /&gt;
&lt;br /&gt;
Sites that curate video for general archival and reference purposes,&lt;br /&gt;
and allow anyone to upload relevant material:&lt;br /&gt;
&lt;br /&gt;
* [http://www.archive.org/details/movies Archive.org’s videos]&lt;br /&gt;
* [http://commons.wikimedia.org/wiki/Category:Videos_by_format Wikipedia’s videos]&lt;br /&gt;
&lt;br /&gt;
=== Projects ===&lt;br /&gt;
&lt;br /&gt;
* [http://metavid.org metavid]: The Open Video archive of the US Congress&lt;br /&gt;
* [http://pad.ma pad.ma]: Public Access Digital Media Archive is an online archive of densely text-annotated video material, primarily footage and not finished films.&lt;br /&gt;
&lt;br /&gt;
=== Conferences ===&lt;br /&gt;
&lt;br /&gt;
* [http://mirror.linux.org.au/linux.conf.au/ linux.conf.au]&lt;br /&gt;
* DebConf: on the individual conference pages, e.g. [http://wiki.debconf.org/wiki/DebConf8/Streams]&lt;br /&gt;
* The [http://www.foms-workshop.org/foms2009/pmwiki.php/Main/Proceedings FOMS workshop videos]: proceedings from a workshop on free and open multimedia software.&lt;br /&gt;
&lt;br /&gt;
== Technology for setting up your own site ==&lt;br /&gt;
&lt;br /&gt;
=== HTML5 &amp;amp;lt;video&amp;amp;gt; embedding ===&lt;br /&gt;
&lt;br /&gt;
There are various ways to provide HTML5 video content with fallbacks for older browsers and non-free codecs.&lt;br /&gt;
&lt;br /&gt;
You can include one of the scripts below, or modify source from an existing page such as the HTML of&lt;br /&gt;
[http://www.celt-codec.org/presentations/ CELT presentations].&lt;br /&gt;
&lt;br /&gt;
==== mv_embed ====&lt;br /&gt;
&lt;br /&gt;
[http://metavid.org/w/index.php/Mv_embed Mv_embed] is &amp;quot;a javascript library for easy embedding of ogg theora/vorbis media with the html5 tag. Once the script is included you can include an inline ogg theora clip with:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;video src=&amp;quot;mymovie.ogg&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Mv_embed will then rewrite the video tag to whatever playback method is available on the client be it native support, java cortado, mplayer or vlc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* [http://www.firefogg.org/make/mwEmbed/example_usage/Player_Simple_Video_Tag.html Demo and sample HTML].&lt;br /&gt;
&lt;br /&gt;
See also [http://www.mediawiki.org/wiki/Media_Projects_Overview#MwEmbed mv_embed on MediaWiki].&lt;br /&gt;
&lt;br /&gt;
==== iTheora ====&lt;br /&gt;
&lt;br /&gt;
[http://itheora.org/ iTheora]&lt;br /&gt;
&lt;br /&gt;
Example sites using iTheora:&lt;br /&gt;
* [http://theorasea.org]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== video4all ====&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/video4all/ video4all at Google Code]&lt;br /&gt;
&lt;br /&gt;
Uses browser specific technology (.htc, .xbl, or plain .js) to rewrite video tags to fall back to H.264 in Flash for legacy browsers, while providing H.264 natively to Safari and Theora for Mozilla. Roughly speaking a script version of Kroc Camen&#039;s pure HTML Video For Everybody solution. Doesn&#039;t (currently) use any Theora based fallbacks.&lt;br /&gt;
&lt;br /&gt;
==== Video for Everybody ====&lt;br /&gt;
&lt;br /&gt;
[http://camendesign.com/code/video_for_everybody Video for Everybody] is&lt;br /&gt;
&amp;quot;a chunk of HTML code that embeds a video into a website&lt;br /&gt;
using the HTML5 &amp;lt;video&amp;gt; element.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
:*Comment: We really shouldn&#039;t be plugging a solution which eschews cortado as a fall back in favor of FLV.  A pure HTML triple check video/java/youtube would be better, but no pure HTML solution perform a canplaytype so it will break for safari users without xiphqt.  Is &amp;quot;possible to add raw HTML but no JS&amp;quot; a common enough situation that a JS free solution is really needed? --[[User:Gmaxwell|Gmaxwell]] 22:58, 30 June 2009 (PDT)&lt;br /&gt;
&lt;br /&gt;
:*Comment: It&#039;s clear that this solution makes a few compromises in order to be JS-free. The code is both fragile and frightening for reasons that make sense with regard to the original author&#039;s goals but aren&#039;t relevant if e.g. promoting Theora adoption takes precedence over a distaste for Java and/or Javascript. --[[User:Bod|Bod]] 06:03, 6 July 2009 (PDT)&lt;br /&gt;
&lt;br /&gt;
=== HTML5 &amp;amp;lt;audio&amp;amp;gt; embedding ===&lt;br /&gt;
&lt;br /&gt;
There are various ways to provide HTML5 audio content in Vorbis and there are Java and Flash fallbacks for older browsers (and non-free codecs though this is even less necessary than it is in the case of Theora video).&lt;br /&gt;
&lt;br /&gt;
==== Vorbis via Flash 10 ====&lt;br /&gt;
&lt;br /&gt;
[http://barelyfocused.net/blog/2008/10/03/flash-vorbis-player/ fogg (aka FVorbis)], [[Jorbis]] code automatically ported to Haxe and then compiled to AS3&lt;br /&gt;
&lt;br /&gt;
[http://labs.adobe.com/wiki/index.php/Alchemy:Libraries Alchemy Vorbis], Adobe&#039;s Alchemy allows compiling C and C++ plus to AS3. Vorbis is one of the demo libraries they ported.&lt;br /&gt;
&lt;br /&gt;
[http://flash.j-ogg.de/10/ flash.j-ogg], haxe and actionscript3 translation of j-ogg&lt;br /&gt;
&lt;br /&gt;
==== Vorbis via Java ====&lt;br /&gt;
&lt;br /&gt;
[http://www.jcraft.com/jorbis/ JorbisPlayer]&lt;br /&gt;
&lt;br /&gt;
[http://www.j-ogg.de/core/main?/index-vorbis.html J-Ogg]&lt;br /&gt;
&lt;br /&gt;
==== Vorbis via Javascript and &amp;amp;lt;audio&amp;amp;gt; tag ====&lt;br /&gt;
&lt;br /&gt;
[http://alpha.libre.fm/listen/?tag=rock web radio interface]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Encoding, transcoding ===&lt;br /&gt;
&lt;br /&gt;
==== Firefogg ====&lt;br /&gt;
&lt;br /&gt;
[http://firefogg.org/ Firefogg] provides &amp;quot;video encoding and uploading for Firefox&amp;quot;. This includes a Firefox extension that allows users to encode video to Ogg Theora on their own computer while uploading it to your site. This simplifies the upload for users as they can simply choose from their existing video files, and simplifies your web site by allowing you to deal with only one video format, and offloading the CPU cycles required for encoding to the user.&lt;br /&gt;
&lt;br /&gt;
=== Content management ===&lt;br /&gt;
&lt;br /&gt;
* The [http://www.mediawiki.org/wiki/Extension:OggHandler OggHandler extension] for MediaWiki provides video and audio support with automatic fallback and thumbnailing. &lt;br /&gt;
* [http://metavid.org/wiki/MetaVidWiki_Software MetaVidWiki]&lt;br /&gt;
&lt;br /&gt;
=== Backend servers ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.xiph.org/oggz/ oggz-chop] allows you to serve time ranges of Ogg media over HTTP by any web server that supports CGI. Examples of such time range requests are http://www.example.com/video.ogv?t=200/600 which serves the segment of video.ogv from 200s-600s. This allows users to instantly jump to any point in a video, and you can put links in your web application to play arbitrary scenes.&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=HTML5&amp;diff=10291</id>
		<title>HTML5</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=HTML5&amp;diff=10291"/>
		<updated>2009-06-25T23:00:00Z</updated>

		<summary type="html">&lt;p&gt;Mdale: /* Web Video sites */ added links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The HTML5 specification includes support for &amp;amp;lt;video&amp;amp;gt; and &amp;amp;lt;audio&amp;amp;gt;.&lt;br /&gt;
This page outlines use of HTML5 syntax with Xiph.Org codecs, particularly Ogg [[Theora]] and Ogg [[Vorbis]]. It is also a place to collect ideas for [http://ogg.org/ ogg.org].&lt;br /&gt;
&lt;br /&gt;
== Browser Support ==&lt;br /&gt;
&lt;br /&gt;
[[TheoraSoftwarePlayers]]&lt;br /&gt;
&lt;br /&gt;
=== Mozilla Firefox ===&lt;br /&gt;
&lt;br /&gt;
=== Opera ===&lt;br /&gt;
&lt;br /&gt;
=== Google Chrome ===&lt;br /&gt;
&lt;br /&gt;
=== Apple Safari ===&lt;br /&gt;
&lt;br /&gt;
=== Microsoft Internet Explorer ===&lt;br /&gt;
&lt;br /&gt;
=== Plugins ===&lt;br /&gt;
&lt;br /&gt;
[http://itheora.org/?p=screens Compatibility]&lt;br /&gt;
&lt;br /&gt;
== Web Video sites ==&lt;br /&gt;
&lt;br /&gt;
The following web sites support HTML5 with ogg theora:&lt;br /&gt;
&lt;br /&gt;
* [http://tinyvid.tv tinyvid.tv]&lt;br /&gt;
* [http://www.dailymotion.com DailyMotion]&lt;br /&gt;
* [http://metavid.org metavid.org]&lt;br /&gt;
* [http://pad.ma pad.ma]&lt;br /&gt;
&lt;br /&gt;
For more examples of Ogg Theora video, see&lt;br /&gt;
[[List of Theora videos]].&lt;br /&gt;
&lt;br /&gt;
== Technology for setting up your own site ==&lt;br /&gt;
&lt;br /&gt;
=== HTML5 &amp;amp;lt;video&amp;amp;gt; embedding ===&lt;br /&gt;
&lt;br /&gt;
There are various ways to provide HTML5 video content with fallbacks for older browsers and non-free codecs.&lt;br /&gt;
&lt;br /&gt;
You can include one of the scripts below, or modify source from an existing page such as the HTML of&lt;br /&gt;
[http://www.celt-codec.org/presentations/ CELT presentations].&lt;br /&gt;
&lt;br /&gt;
==== mv_embed ====&lt;br /&gt;
&lt;br /&gt;
[http://metavid.org/w/index.php/Mv_embed mv_embed homepage]&lt;br /&gt;
and&lt;br /&gt;
[http://www.mediawiki.org/wiki/Media_Projects_Overview#MwEmbed mv_embed on MediaWiki]&lt;br /&gt;
&lt;br /&gt;
Example sites using mv_embed:&lt;br /&gt;
* [http://www.firefogg.org/make/mwEmbed/example_usage/Player_Simple_Video_Tag.html]&lt;br /&gt;
&lt;br /&gt;
==== iTheora ====&lt;br /&gt;
&lt;br /&gt;
[http://itheora.org/ iTheora]&lt;br /&gt;
&lt;br /&gt;
Example sites using iTheora:&lt;br /&gt;
* [http://theorasea.org]&lt;br /&gt;
&lt;br /&gt;
==== Video for Everybody ====&lt;br /&gt;
&lt;br /&gt;
[http://camendesign.com/code/video_for_everybody Video for Everybody] is&lt;br /&gt;
&amp;quot;a chunk of HTML code that embeds a video into a website&lt;br /&gt;
using the HTML5 &amp;lt;video&amp;gt; element.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Encoding, transcoding ===&lt;br /&gt;
&lt;br /&gt;
==== Firefogg ====&lt;br /&gt;
&lt;br /&gt;
[http://firefogg.org/ Firefogg] provides &amp;quot;video encoding and uploading for Firefox&amp;quot;. This includes a Firefox extension that allows users to encode video to Ogg Theora on their own computer while uploading it to your site. This simplifies the upload for users as they can simply choose from their existing video files, and simplifies your web site by allowing you to deal with only one video format, and offloading the CPU cycles required for encoding to the user.&lt;br /&gt;
&lt;br /&gt;
=== Content management ===&lt;br /&gt;
&lt;br /&gt;
* The [http://www.mediawiki.org/wiki/Extension:OggHandler OggHandler extension] for MediaWiki provides video and audio support with automatic fallback and thumbnailing. &lt;br /&gt;
* [http://metavid.org/wiki/MetaVidWiki_Software MetaVidWiki]&lt;br /&gt;
&lt;br /&gt;
=== Backend servers ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.xiph.org/oggz/ oggz-chop]&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Html5&amp;diff=10290</id>
		<title>Html5</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Html5&amp;diff=10290"/>
		<updated>2009-06-25T22:56:22Z</updated>

		<summary type="html">&lt;p&gt;Mdale: added redirect&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[HTML5]]&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Summer_of_Code_2009&amp;diff=10103</id>
		<title>Summer of Code 2009</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Summer_of_Code_2009&amp;diff=10103"/>
		<updated>2009-03-12T15:56:55Z</updated>

		<summary type="html">&lt;p&gt;Mdale: added mozilla summer of code link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is  our ideas page for [http://code.google.com/soc/ Google Summer of Code 2009] projects with [http://xiph.org Xiph.org] and [http://annodex.org/ Annodex]. The two projects participate jointly this year under Xiph&#039;s name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Students&#039;&#039;&#039; please use the template at [[Summer of Code Applications]] when applying for a GSoC position.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentors&#039;&#039;&#039; please visit [[Summer of Code Mentoring]] and help us prepare our application as a mentoring organization.&lt;br /&gt;
&lt;br /&gt;
== General Ideas ==&lt;br /&gt;
&lt;br /&gt;
* Kate to HTML &amp;amp; CSS overlay library in javascript.&lt;br /&gt;
&lt;br /&gt;
* Proof of concept liboggplay-based media patch for Google&#039;s Chrome browser.&lt;br /&gt;
&lt;br /&gt;
* mod_duration apache module to generate X-Content-Duration headers for Ogg files. &#039;&#039;(We should get people to use &#039;&#039;&#039;oggz_chop&#039;&#039;&#039; instead ... oggz_chop provides this functionality and more, is already relatively lightweight.)&#039;&#039; Perhaps this project could be more focused on packaging oggz_chop for other web servers like lightpd and maybe a fastCGI version and or maybe push for an mod_ogg to be adopted upstream in apache to improve distribution. &lt;br /&gt;
&lt;br /&gt;
* Get skeleton patches upstream so players stop choking on it.&lt;br /&gt;
* Portable listening application for codec MOS/MUSHRA comparisons (Win32, MacOS, Linux; FF3.1 web application?).&lt;br /&gt;
* Conference bridge using CELT.&lt;br /&gt;
* Reference SIP client for CELT.&lt;br /&gt;
* Firefox extension to record locally and stream to icecast.&lt;br /&gt;
* Firefox extension to support RTP for conferencing.&lt;br /&gt;
** also consider applying [https://wiki.mozilla.org/Community:SummerOfCode09#Firefox under Mozilla SOC org].&lt;br /&gt;
* OpenMAX IL components for Ogg codecs&lt;br /&gt;
&lt;br /&gt;
== Detailed Project Descriptions ==&lt;br /&gt;
&lt;br /&gt;
These ideas were suggested by various members of the developer community as projects that would be beneficial and which we feel we can mentor. Students should feel free to select one of these, develop a variation, or propose their own ideas. Here, ideally.&lt;br /&gt;
&lt;br /&gt;
=== Proof of Concept liboggplay (html5 video) support in Chromium Browser === &lt;br /&gt;
&lt;br /&gt;
This project would focus on integrating support for liboggplay into chrome. This project would only need to be a proof of concept with the end result being some frames decoded in the browser. We have some direct contacts with people on the Chromium project in Google, but would expect the student mostly to work through the Xiph on Chromium online communities.&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/chromium/ Chromium Home Page]&lt;br /&gt;
&lt;br /&gt;
=== Metavid related projects === &lt;br /&gt;
&lt;br /&gt;
see [http://metavid.org/wiki/Summer_of_Code_2009 full page on metavid.org]&lt;br /&gt;
* Improve transcript import / export system:&lt;br /&gt;
** Wiki to SRT &lt;br /&gt;
** SRT to Wiki &lt;br /&gt;
** CMML to Wiki&lt;br /&gt;
** Extend oggz_chop or other tool for exporting transcript encapsulated in the ogg file.&lt;br /&gt;
&lt;br /&gt;
=== Javascript Library for Subtitles, Captions and other time-aligned text ===&lt;br /&gt;
&lt;br /&gt;
The main focus of the project is around enabling video accessibility for Ogg in Firefox.&lt;br /&gt;
&lt;br /&gt;
Captions, subtitles and other categories of time-aligned text are starting to become relevant to HTML5. In Ogg, we currently encapsulate such data in OggKate and can use SRT or Kate as input formats. Display of OggKate is currently supported in VLC and there are patches for various other media players. We now want to enable Web browsers to also deal with these time-aligned text tracks in those Web Browsers that support the HTML5 video tag.&lt;br /&gt;
&lt;br /&gt;
There is a proof of concept patch for Firefox 3.1 (now called 3.5) and liboggplay through which Firefox is capable of decoding Ogg Kate tracks and either overlay them onto the video, or handing the raw text to the browser (eg, for text to speech). However, there is no display of OggKate in Firefox 3.5 using HTML5.  This can be fixed through the creation of a javascript library that can deal with Kate output and convert it to HTML and CSS. Example libraries exists for displaying SRT for HTML5 video, but they will need to be extended to Kate in this project.&lt;br /&gt;
&lt;br /&gt;
This project includes the creation of example files for different types of time-aligned text. These are then encapsulated into Ogg through Kate encoding. Firefox 3.5 with the applied OggKate patch can decode these files and hand the textual data to the Web browser. It will be necessary to extend liboggplay to pass non textual Kate data (eg, styling, etc) to the browser, as currently the only two ways of dealing with a Kate track is to render it, or pass raw text, ignoring extra styling information. This could be part of the project, or done before the GSoC projects begins. The browser receives the text and styling information, and a javascript library implemented by the student will take care of the display. This will include an implementation of default display mechanisms for the different types of time-aligned text that we decide to deal with.&lt;br /&gt;
&lt;br /&gt;
The project requires a student with experience in javascript development, HTML and CSS, but also with some understanding of C for liboggplay and libkate, and of C++ for Firefox. The student will learn how to deal with Ogg and Ogg tracks, including Ogg Kate. He/she will also get some insight into Firefox development. He/she will work with the developer of Ogg Kate and the video accessibility expert of Xiph, as well as having access to the whole Xiph community including the core developer of Ogg support in Firefox.&lt;br /&gt;
&lt;br /&gt;
The project is adaptable to the qualifications of the student - it may consist in simply implementing a tool-chain for handling srt through OggKate, or it may go much further and include richer forms or time-aligned text such as audio annotations, Karaoke, ticker text, clickable text etc.&lt;br /&gt;
&lt;br /&gt;
=== OpenMAX IL components for Ogg codecs ===&lt;br /&gt;
&lt;br /&gt;
OpenMAX is a set of low-level C APIs for media codecs. It is used by many mobile devices, in platforms like [http://www.maemo.org/ Maemo] and [http://source.android.com/ Android]. As we&#039;d like to encourage the use of free codecs on mobile and embedded devices, we want to develop a set of components using our codec libraries.&lt;br /&gt;
&lt;br /&gt;
For details, including the motivation for this project and links to related projects, see &lt;br /&gt;
[http://blog.kfish.org/2009/02/is-openmax-important-for-free-software.html Is OpenMAX important for Free Software?]&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Summer of Code 2008]]&lt;br /&gt;
*[[Summer of Code 2007]]&lt;br /&gt;
*[[Summer of Code 2006]]&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Summer_of_Code_2009&amp;diff=10102</id>
		<title>Summer of Code 2009</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Summer_of_Code_2009&amp;diff=10102"/>
		<updated>2009-03-12T15:53:49Z</updated>

		<summary type="html">&lt;p&gt;Mdale: /* General Ideas */ mod duration info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is  our ideas page for [http://code.google.com/soc/ Google Summer of Code 2009] projects with [http://xiph.org Xiph.org] and [http://annodex.org/ Annodex]. The two projects participate jointly this year under Xiph&#039;s name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Students&#039;&#039;&#039; please use the template at [[Summer of Code Applications]] when applying for a GSoC position.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentors&#039;&#039;&#039; please visit [[Summer of Code Mentoring]] and help us prepare our application as a mentoring organization.&lt;br /&gt;
&lt;br /&gt;
== General Ideas ==&lt;br /&gt;
&lt;br /&gt;
* Kate to HTML &amp;amp; CSS overlay library in javascript.&lt;br /&gt;
&lt;br /&gt;
* Proof of concept liboggplay-based media patch for Google&#039;s Chrome browser.&lt;br /&gt;
&lt;br /&gt;
* mod_duration apache module to generate X-Content-Duration headers for Ogg files. &#039;&#039;(We should get people to use &#039;&#039;&#039;oggz_chop&#039;&#039;&#039; instead ... oggz_chop provides this functionality and more, is already relatively lightweight.)&#039;&#039; Perhaps this project could be more focused on packaging oggz_chop for other web servers like lightpd and maybe a fastCGI version and or maybe push for an mod_ogg to be adopted upstream in apache to improve distribution. &lt;br /&gt;
&lt;br /&gt;
* Get skeleton patches upstream so players stop choking on it.&lt;br /&gt;
* Portable listening application for codec MOS/MUSHRA comparisons (Win32, MacOS, Linux; FF3.1 web application?).&lt;br /&gt;
* Conference bridge using CELT.&lt;br /&gt;
* Reference SIP client for CELT.&lt;br /&gt;
* Firefox extension to record locally and stream to icecast.&lt;br /&gt;
* Firefox extension to support RTP for conferencing.&lt;br /&gt;
* OpenMAX IL components for Ogg codecs&lt;br /&gt;
&lt;br /&gt;
== Detailed Project Descriptions ==&lt;br /&gt;
&lt;br /&gt;
These ideas were suggested by various members of the developer community as projects that would be beneficial and which we feel we can mentor. Students should feel free to select one of these, develop a variation, or propose their own ideas. Here, ideally.&lt;br /&gt;
&lt;br /&gt;
=== Proof of Concept liboggplay (html5 video) support in Chromium Browser === &lt;br /&gt;
&lt;br /&gt;
This project would focus on integrating support for liboggplay into chrome. This project would only need to be a proof of concept with the end result being some frames decoded in the browser. We have some direct contacts with people on the Chromium project in Google, but would expect the student mostly to work through the Xiph on Chromium online communities.&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/chromium/ Chromium Home Page]&lt;br /&gt;
&lt;br /&gt;
=== Metavid related projects === &lt;br /&gt;
&lt;br /&gt;
see [http://metavid.org/wiki/Summer_of_Code_2009 full page on metavid.org]&lt;br /&gt;
* Improve transcript import / export system:&lt;br /&gt;
** Wiki to SRT &lt;br /&gt;
** SRT to Wiki &lt;br /&gt;
** CMML to Wiki&lt;br /&gt;
** Extend oggz_chop or other tool for exporting transcript encapsulated in the ogg file.&lt;br /&gt;
&lt;br /&gt;
=== Javascript Library for Subtitles, Captions and other time-aligned text ===&lt;br /&gt;
&lt;br /&gt;
The main focus of the project is around enabling video accessibility for Ogg in Firefox.&lt;br /&gt;
&lt;br /&gt;
Captions, subtitles and other categories of time-aligned text are starting to become relevant to HTML5. In Ogg, we currently encapsulate such data in OggKate and can use SRT or Kate as input formats. Display of OggKate is currently supported in VLC and there are patches for various other media players. We now want to enable Web browsers to also deal with these time-aligned text tracks in those Web Browsers that support the HTML5 video tag.&lt;br /&gt;
&lt;br /&gt;
There is a proof of concept patch for Firefox 3.1 (now called 3.5) and liboggplay through which Firefox is capable of decoding Ogg Kate tracks and either overlay them onto the video, or handing the raw text to the browser (eg, for text to speech). However, there is no display of OggKate in Firefox 3.5 using HTML5.  This can be fixed through the creation of a javascript library that can deal with Kate output and convert it to HTML and CSS. Example libraries exists for displaying SRT for HTML5 video, but they will need to be extended to Kate in this project.&lt;br /&gt;
&lt;br /&gt;
This project includes the creation of example files for different types of time-aligned text. These are then encapsulated into Ogg through Kate encoding. Firefox 3.5 with the applied OggKate patch can decode these files and hand the textual data to the Web browser. It will be necessary to extend liboggplay to pass non textual Kate data (eg, styling, etc) to the browser, as currently the only two ways of dealing with a Kate track is to render it, or pass raw text, ignoring extra styling information. This could be part of the project, or done before the GSoC projects begins. The browser receives the text and styling information, and a javascript library implemented by the student will take care of the display. This will include an implementation of default display mechanisms for the different types of time-aligned text that we decide to deal with.&lt;br /&gt;
&lt;br /&gt;
The project requires a student with experience in javascript development, HTML and CSS, but also with some understanding of C for liboggplay and libkate, and of C++ for Firefox. The student will learn how to deal with Ogg and Ogg tracks, including Ogg Kate. He/she will also get some insight into Firefox development. He/she will work with the developer of Ogg Kate and the video accessibility expert of Xiph, as well as having access to the whole Xiph community including the core developer of Ogg support in Firefox.&lt;br /&gt;
&lt;br /&gt;
The project is adaptable to the qualifications of the student - it may consist in simply implementing a tool-chain for handling srt through OggKate, or it may go much further and include richer forms or time-aligned text such as audio annotations, Karaoke, ticker text, clickable text etc.&lt;br /&gt;
&lt;br /&gt;
=== OpenMAX IL components for Ogg codecs ===&lt;br /&gt;
&lt;br /&gt;
OpenMAX is a set of low-level C APIs for media codecs. It is used by many mobile devices, in platforms like [http://www.maemo.org/ Maemo] and [http://source.android.com/ Android]. As we&#039;d like to encourage the use of free codecs on mobile and embedded devices, we want to develop a set of components using our codec libraries.&lt;br /&gt;
&lt;br /&gt;
For details, including the motivation for this project and links to related projects, see &lt;br /&gt;
[http://blog.kfish.org/2009/02/is-openmax-important-for-free-software.html Is OpenMAX important for Free Software?]&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Summer of Code 2008]]&lt;br /&gt;
*[[Summer of Code 2007]]&lt;br /&gt;
*[[Summer of Code 2006]]&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Summer_of_Code_2009&amp;diff=10101</id>
		<title>Summer of Code 2009</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Summer_of_Code_2009&amp;diff=10101"/>
		<updated>2009-03-12T15:52:24Z</updated>

		<summary type="html">&lt;p&gt;Mdale: /* General Ideas */ mod duration info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is  our ideas page for [http://code.google.com/soc/ Google Summer of Code 2009] projects with [http://xiph.org Xiph.org] and [http://annodex.org/ Annodex]. The two projects participate jointly this year under Xiph&#039;s name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Students&#039;&#039;&#039; please use the template at [[Summer of Code Applications]] when applying for a GSoC position.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentors&#039;&#039;&#039; please visit [[Summer of Code Mentoring]] and help us prepare our application as a mentoring organization.&lt;br /&gt;
&lt;br /&gt;
== General Ideas ==&lt;br /&gt;
&lt;br /&gt;
* Kate to HTML &amp;amp; CSS overlay library in javascript.&lt;br /&gt;
&lt;br /&gt;
* Proof of concept liboggplay-based media patch for Google&#039;s Chrome browser.&lt;br /&gt;
&lt;br /&gt;
* mod_duration apache module to generate X-Content-Duration headers for Ogg files. &#039;&#039;(We should get people to use &#039;&#039;&#039;oggz_chop&#039;&#039;&#039; instead ... oggz_chop provides this functionality and more, is already relatively lightweight.)&#039;&#039; Perhaps this project could be more focused on packaging oggz_chop for other servers web servers like lightpd and maybe a fastCGI version. &lt;br /&gt;
&lt;br /&gt;
* Get skeleton patches upstream so players stop choking on it.&lt;br /&gt;
* Portable listening application for codec MOS/MUSHRA comparisons (Win32, MacOS, Linux; FF3.1 web application?).&lt;br /&gt;
* Conference bridge using CELT.&lt;br /&gt;
* Reference SIP client for CELT.&lt;br /&gt;
* Firefox extension to record locally and stream to icecast.&lt;br /&gt;
* Firefox extension to support RTP for conferencing.&lt;br /&gt;
* OpenMAX IL components for Ogg codecs&lt;br /&gt;
&lt;br /&gt;
== Detailed Project Descriptions ==&lt;br /&gt;
&lt;br /&gt;
These ideas were suggested by various members of the developer community as projects that would be beneficial and which we feel we can mentor. Students should feel free to select one of these, develop a variation, or propose their own ideas. Here, ideally.&lt;br /&gt;
&lt;br /&gt;
=== Proof of Concept liboggplay (html5 video) support in Chromium Browser === &lt;br /&gt;
&lt;br /&gt;
This project would focus on integrating support for liboggplay into chrome. This project would only need to be a proof of concept with the end result being some frames decoded in the browser. We have some direct contacts with people on the Chromium project in Google, but would expect the student mostly to work through the Xiph on Chromium online communities.&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/chromium/ Chromium Home Page]&lt;br /&gt;
&lt;br /&gt;
=== Metavid related projects === &lt;br /&gt;
&lt;br /&gt;
see [http://metavid.org/wiki/Summer_of_Code_2009 full page on metavid.org]&lt;br /&gt;
* Improve transcript import / export system:&lt;br /&gt;
** Wiki to SRT &lt;br /&gt;
** SRT to Wiki &lt;br /&gt;
** CMML to Wiki&lt;br /&gt;
** Extend oggz_chop or other tool for exporting transcript encapsulated in the ogg file.&lt;br /&gt;
&lt;br /&gt;
=== Javascript Library for Subtitles, Captions and other time-aligned text ===&lt;br /&gt;
&lt;br /&gt;
The main focus of the project is around enabling video accessibility for Ogg in Firefox.&lt;br /&gt;
&lt;br /&gt;
Captions, subtitles and other categories of time-aligned text are starting to become relevant to HTML5. In Ogg, we currently encapsulate such data in OggKate and can use SRT or Kate as input formats. Display of OggKate is currently supported in VLC and there are patches for various other media players. We now want to enable Web browsers to also deal with these time-aligned text tracks in those Web Browsers that support the HTML5 video tag.&lt;br /&gt;
&lt;br /&gt;
There is a proof of concept patch for Firefox 3.1 (now called 3.5) and liboggplay through which Firefox is capable of decoding Ogg Kate tracks and either overlay them onto the video, or handing the raw text to the browser (eg, for text to speech). However, there is no display of OggKate in Firefox 3.5 using HTML5.  This can be fixed through the creation of a javascript library that can deal with Kate output and convert it to HTML and CSS. Example libraries exists for displaying SRT for HTML5 video, but they will need to be extended to Kate in this project.&lt;br /&gt;
&lt;br /&gt;
This project includes the creation of example files for different types of time-aligned text. These are then encapsulated into Ogg through Kate encoding. Firefox 3.5 with the applied OggKate patch can decode these files and hand the textual data to the Web browser. It will be necessary to extend liboggplay to pass non textual Kate data (eg, styling, etc) to the browser, as currently the only two ways of dealing with a Kate track is to render it, or pass raw text, ignoring extra styling information. This could be part of the project, or done before the GSoC projects begins. The browser receives the text and styling information, and a javascript library implemented by the student will take care of the display. This will include an implementation of default display mechanisms for the different types of time-aligned text that we decide to deal with.&lt;br /&gt;
&lt;br /&gt;
The project requires a student with experience in javascript development, HTML and CSS, but also with some understanding of C for liboggplay and libkate, and of C++ for Firefox. The student will learn how to deal with Ogg and Ogg tracks, including Ogg Kate. He/she will also get some insight into Firefox development. He/she will work with the developer of Ogg Kate and the video accessibility expert of Xiph, as well as having access to the whole Xiph community including the core developer of Ogg support in Firefox.&lt;br /&gt;
&lt;br /&gt;
The project is adaptable to the qualifications of the student - it may consist in simply implementing a tool-chain for handling srt through OggKate, or it may go much further and include richer forms or time-aligned text such as audio annotations, Karaoke, ticker text, clickable text etc.&lt;br /&gt;
&lt;br /&gt;
=== OpenMAX IL components for Ogg codecs ===&lt;br /&gt;
&lt;br /&gt;
OpenMAX is a set of low-level C APIs for media codecs. It is used by many mobile devices, in platforms like [http://www.maemo.org/ Maemo] and [http://source.android.com/ Android]. As we&#039;d like to encourage the use of free codecs on mobile and embedded devices, we want to develop a set of components using our codec libraries.&lt;br /&gt;
&lt;br /&gt;
For details, including the motivation for this project and links to related projects, see &lt;br /&gt;
[http://blog.kfish.org/2009/02/is-openmax-important-for-free-software.html Is OpenMAX important for Free Software?]&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Summer of Code 2008]]&lt;br /&gt;
*[[Summer of Code 2007]]&lt;br /&gt;
*[[Summer of Code 2006]]&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Summer_of_Code_Applications&amp;diff=10088</id>
		<title>Summer of Code Applications</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Summer_of_Code_Applications&amp;diff=10088"/>
		<updated>2009-03-10T22:32:35Z</updated>

		<summary type="html">&lt;p&gt;Mdale: /* Applying for a Google Summer of Code project with Xiph.Org */ applicants&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Applying for a Google Summer of Code project with Xiph.Org ==&lt;br /&gt;
&lt;br /&gt;
Prospective students: please fill out a copy of this template for your application, answering each question in plenty of detail. The more information the better - though we might ask you later for more details anyway.&lt;br /&gt;
&lt;br /&gt;
Our list of suggested projects is at http://wiki.xiph.org/index.php/Summer_of_Code. You&#039;re welcome to suggest other projects, though, if you think you have a good idea. Feel free to jump on irc (irc.freenode.net, #xiph) if you&#039;d like to discuss things before submitting a project proposal.&lt;br /&gt;
&lt;br /&gt;
To be accepted, you &#039;&#039;&#039;must&#039;&#039;&#039; join the project at least peripherally ahead of time. Checking out the code, compiling and submitting sample code are highly recommended bug fixes even better :) Join the [http://lists.xiph.org/mailman/listinfo/ mailing list] for the component you want to work on and introduce yourself. Hang out with us on IRC. Give us a chance to get to know you. Don&#039;t be shy. Multimedia programming is technically demanding and while we do everything we can to help our students, we need to understand what your background is, what you know and what we&#039;ll need to work on before we can properly evaluate your application.&lt;br /&gt;
&lt;br /&gt;
To reiterate: &#039;&#039;&#039;The absolute best thing you can do is to pick a small project or bug and contribute some code. That will give you and us an idea what it&#039;s like to work together.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Name and Contact details =&lt;br /&gt;
&lt;br /&gt;
Your name and email address here. IRC nick if you have a regular one.&lt;br /&gt;
&lt;br /&gt;
= Your background = &lt;br /&gt;
&lt;br /&gt;
You&#039;re a student! Tell us about what you&#039;re studying, where, and so on. Tell us what your interests are, what (if any) work you&#039;ve previously done in the field of multimedia, and so on.&lt;br /&gt;
&lt;br /&gt;
If you&#039;ve worked on free software before, that&#039;s great. Tell us what you&#039;ve worked on, what you&#039;ve done for those projects, etc.&lt;br /&gt;
&lt;br /&gt;
= Project = &lt;br /&gt;
&lt;br /&gt;
What project would you like to work on? If it&#039;s one from our list of suggestions, don&#039;t just copy the title from there - tell us a bit about what approach(es) you&#039;d like to take to this project. If it&#039;s not from that list, tell us as much as you can about what you want to do.&lt;br /&gt;
&lt;br /&gt;
= Project outcomes = &lt;br /&gt;
&lt;br /&gt;
Go into more details here: what do you think you&#039;ll be able to get done in the three months available? Name specific goals: features, percentage performance improvements, etc.&lt;br /&gt;
&lt;br /&gt;
= Schedule = &lt;br /&gt;
&lt;br /&gt;
Give us a rough outline of how you want to schedule your work over the three months. If you&#039;re going to be away for any part of that, let us know now - it&#039;s not a problem if you&#039;re heading off on holidays for a week or two, but we have to be convinced you&#039;re going to put enough time in. When will you start? What milestones do you want within the project? How much time will you be able to put in? Is this the only thing you&#039;ll be doing during the term or do you have other commitments?&lt;br /&gt;
&lt;br /&gt;
= Why should we select you? =&lt;br /&gt;
&lt;br /&gt;
Google&#039;s Summer of Code project is enormously popular - unfortunately, we&#039;ll have to reject many more proposals than we&#039;ll be able to accept. So this is your chance to tell us what makes YOU the best person for us to pick.&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Summer_of_Code_Mentoring&amp;diff=10087</id>
		<title>Summer of Code Mentoring</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Summer_of_Code_Mentoring&amp;diff=10087"/>
		<updated>2009-03-10T21:53:08Z</updated>

		<summary type="html">&lt;p&gt;Mdale: /* Why is your organization applying to participate in GSoC 2008? What do you hope to gain by participating? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Xiph.Org Application as a mentoring organization ==&lt;br /&gt;
&lt;br /&gt;
We need to apply for consideration as a mentoring organization 2008 March 3-12. Google lists the following questions in their [http://code.google.com/soc/2008/faqs.html#0.1_org_apply faq]. Our work-in-progress answers are inline.&lt;br /&gt;
&lt;br /&gt;
==== Describe your organization. ====&lt;br /&gt;
&lt;br /&gt;
The Xiph.Org Foundation is a 501(c)(3) non-profit organization dedicated to providing open and free-to-implement multimedia technology as a foundation for an interoperable, level playing field on the Internet and other digital distribution networks. Over the past 8 years we have developed most of the major patent-free and royalty-free audio and video codecs currently in use, including Vorbis, Speex, FLAC and Theora, as well as developing the Ogg streaming format, and the Icecast streaming media server. Xiph hosted libraries like liboggplay and liboggz power the underling html5 video support in Mozilla Firefox. &lt;br /&gt;
&lt;br /&gt;
This year we are also coordinating projects for the Annodex association under our umbrella. The Annodex projects develop standards and software for timed metadata and temporal media reference compatible with the existing web ecosystem. The Annodex streaming media server is used on sites such as wikipedia and archive.org to facilitate improved video seeking, inter-archive interoperability, and temporal media referencing via URLs&lt;br /&gt;
&lt;br /&gt;
==== Why is your organization applying to participate in GSoC 2008? What do you hope to gain by participating? ====&lt;br /&gt;
&lt;br /&gt;
We believe that the Xiph.Org Foundation has a wide-ranging set of projects that are both challenging and educational for students. Furthermore, they are important/useful goals for the wider technology community, and especially users of open source software.&lt;br /&gt;
&lt;br /&gt;
We believe that Xiph&#039;s mandate to develop multimedia standards and software is an important one, but as a small non-profit with no official staff we&amp;amp;mdash;of course&amp;amp;mdash;have limited resources. We hope that the results of GSoC will include the direct benefit of new software development, but also help grow the number of active participants in a long-term manner. Most of our core developers started as students, but have since moved on from their student days. Attracting and retaining students is essential to the health and sustainability of our project and is an important goal for all of us.&lt;br /&gt;
&lt;br /&gt;
==== Did your organization participate in past GSoCs? If so, please summarize your involvement and the successes and challenges of your participation. ====&lt;br /&gt;
&lt;br /&gt;
The Xiph.Org Foundation was invited to participate in GSoc in both 2006 and 2007, and informally mentored Annodex-related projects as well.&lt;br /&gt;
&lt;br /&gt;
In 2006, we were granted funding for 6 slots. One we weren&#039;t able to fill because our chosen students picked or were assigned to other projects. &lt;br /&gt;
&lt;br /&gt;
Two were [http://code.google.com/soc/xiph/about.html successful]. One, a [http://code.google.com/soc/xiph/appinfo.html?csaid=5F9265EEC6FA0611 hardware implementation of a Theora decoder]: this project produced HDL implementation of the major decoder components, to be used with a general purpose CPU, such as the open source LEON sparc implementation. Real time playback of SD content was demonstrated using these components in combination with the proprietary Nagios CPU design. Two, [http://code.google.com/soc/xiph/appinfo.html?csaid=213E2D30F095565D implementation of OggSkeleton support] in various tools. We have maintained contact with the two successful students since the program finished. One has continued to contribute code outside the GSoC term, continuing related work.&lt;br /&gt;
&lt;br /&gt;
The remaining three were unsuccessful through lack of necessary skills, health complications, insufficient motivation, or some combination of all of these.&lt;br /&gt;
&lt;br /&gt;
In 2007, we were given 2 project slots. One was an extension of the hardware decoder effort from last year. The other was helping to do R&amp;amp;D on Xiph&#039;s next-generation audio codec, Ghost. Both were marginally successful &amp;amp;mdash; the students reached the minimum goals set, but little more, and did not maintain contact with Xiph after the program. &lt;br /&gt;
&lt;br /&gt;
We enjoyed our participation over the last two years. It provided needed external input, energizing our project and improving our connections to the rest of the open source community. We think we&#039;ve learnt a lot about how to mentor new and upcoming contributors, and how to best screen the applications we do receive.&lt;br /&gt;
&lt;br /&gt;
==== If your organization has not previously participated in GSoC, have you applied in the past? If so, for what year(s)? ====&lt;br /&gt;
&lt;br /&gt;
We have participated previously, in 2006 and 2007.&lt;br /&gt;
&lt;br /&gt;
==== Who will your organization administrator be? Please include Google Account information. ====&lt;br /&gt;
&lt;br /&gt;
Michael Smith has volunteered to be the primary admin this year. Google account mlrsmith@gmail.com.&lt;br /&gt;
&lt;br /&gt;
==== What license(s) does your project use? ====&lt;br /&gt;
&lt;br /&gt;
In general, we use the revised 3-clause BSD license for our libraries, to enable the widest possible uses of our formats and reference implementations.&lt;br /&gt;
&lt;br /&gt;
Our applications are generally GPL but LGPL or (GPL-compatible) modified.  BSD is also acceptable.&lt;br /&gt;
&lt;br /&gt;
==== What is the URL for your ideas page? ====&lt;br /&gt;
&lt;br /&gt;
http://wiki.xiph.org/index.php/Summer_of_Code&lt;br /&gt;
&lt;br /&gt;
==== What is the main development mailing list or forum for your organization? ====&lt;br /&gt;
&lt;br /&gt;
We don&#039;t have a single central mailing list for all of the Foundation. Instead, we have project-specific mailing lists; of these the most active is vorbis-dev@xiph.org. A complete listing of our lists is available at:&lt;br /&gt;
&lt;br /&gt;
http://lists.xiph.org/mailman/listinfo/&lt;br /&gt;
&lt;br /&gt;
The primary contact of the Annodex projects is [http://lists.annodex.net/ annodex-dev@lists.annodex.net]&lt;br /&gt;
&lt;br /&gt;
==== What is the main IRC channel for your organization? ====&lt;br /&gt;
&lt;br /&gt;
Our main channel is #xiph on irc.freenode.net. We also have project-specific channels: #vorbis, #theora, #icecast, #speex and #annodex are the major ones.&lt;br /&gt;
&lt;br /&gt;
==== Does your organization have an application template you would like to see students use? If so, please provide it now. ====&lt;br /&gt;
&lt;br /&gt;
http://wiki.xiph.org/index.php/Summer_of_Code_Applications&lt;br /&gt;
&lt;br /&gt;
==== Who will be your backup organization administrator? Please include Google Account information. ====&lt;br /&gt;
&lt;br /&gt;
Ralph Giles will be the backup admin if no one else volunteers. Google account giles@xiph.org.&lt;br /&gt;
&lt;br /&gt;
==== Who will your mentors be? Please include Google Account information. ====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Michael Smith&#039;&#039;&#039;: google account mlrsmith@gmail.com&lt;br /&gt;
* &#039;&#039;&#039;Ralph Giles&#039;&#039;&#039;: google account giles@xiph.org&lt;br /&gt;
* &#039;&#039;&#039;Silvia Pfeiffer&#039;&#039;&#039;: google account silviapfeiffer1@gmail.com&lt;br /&gt;
* &#039;&#039;&#039;Christopher Montgomery&#039;&#039;&#039;: google account xiphmont@gmail.com&lt;br /&gt;
* &#039;&#039;&#039;Timothy Terriberry&#039;&#039;&#039;: google account tterribe@vt.edu&lt;br /&gt;
* &#039;&#039;&#039;Jean-Marc Valin&#039;&#039;&#039;: google account jmvalin@gmail.com&lt;br /&gt;
* &#039;&#039;&#039;Arek Korbik&#039;&#039;&#039;: google account arkadini@gmail.com&lt;br /&gt;
* &#039;&#039;&#039;Michael Dale&#039;&#039;&#039;: google account bigmammoth@gmail.com&lt;br /&gt;
* &#039;&#039;&#039;Ivo Emanuel Gonçalves&#039;&#039;&#039;: google account justivo@gmail.com&lt;br /&gt;
&lt;br /&gt;
==== What criteria did you use to select these individuals as mentors? Please be as specific as possible. ====&lt;br /&gt;
&lt;br /&gt;
We selected our mentors from the &#039;core&#039; developers and contributors within Xiph. Mentors were selected based on how well they know the code area they&#039;re volunteering to mentor, how long they&#039;ve been part of Xiph, how well they interact with others (particularly in terms of building community around our projects).&lt;br /&gt;
&lt;br /&gt;
The majority of the mentors we&#039;ve selected are core developers on the various Xiph sub-projects that they&#039;ve volunteered to mentor for. They have been contributing to the Xiph.Org Foundation for at least several years, and have shown a persistent interest both in the software we develop, and in helping to create a community around it. We have also made sure that each mentor has sufficient time available to adequately mentor their student(s).&lt;br /&gt;
&lt;br /&gt;
Michael Smith has been involved with the Xiph.Org Foundation and multimedia development since 2000 and remains one of our most involved core members. He helped write major portions of the vorbis-tools suite and the icecast streaming media server. He currently works as a developer at Fluendo.com on the GStreamer multimedia framework, flumotion (a streaming media server), and other multimedia software. &lt;br /&gt;
&lt;br /&gt;
Ralph Giles has been involved with the Xiph.Org Foundation and multimedia development since 2000. He has contributed to tool development and the Theora video codec. He handles much of the coordination and administrative work for the Xiph.Org Foundation. He mentored the successful &amp;quot;Hardware implementation of Theora decoding&amp;quot; project in GSoC 2006 and acted as an administrator.&lt;br /&gt;
&lt;br /&gt;
Silvia Pfeiffer is the founder of the Annodex project and president of the Annodex Association. She is the principle author of most of the Annodex specifications, RFC 3533 describing the Ogg media format, and is heavily involved as an organizer in both the Xiph and Annodex projects. Most recently she organized the [http://www.annodex.org/events/foms2007/ FOMS] developer summit and media recording for [http://lca2007.linux.org.au/ LCA 2007]. She helped mentor the successful &amp;quot;OggSkeleton support&amp;quot; project in GSoC 2006 and acted as an administrator during the application process.&lt;br /&gt;
&lt;br /&gt;
Christopher &amp;quot;Monty&amp;quot; Montgomery is the founder of the Xiph.Org Foundation, architect and lead developer of the Ogg Vorbis general purpose audio compression format. He has been doing open source development under the Xiph name since 1999. His current work focuses on development of a next-generation audio codec and a new Theora encoder. He helped mentor a project related to this in GSoC 2006.&lt;br /&gt;
&lt;br /&gt;
Timothy Terriberry is the author of the Theora video codec specification and the author of the theora-exp implementation. He has been an active contributor since 2003. He mentored a Theora-related project in GSoC 2006.&lt;br /&gt;
&lt;br /&gt;
Jean-Marc Valin is the architect and lead developer of the Speex voice codec. He has been involved in the Xiph.Org Founation since 2002. He mentored an audio codec research project in GSoC 2006.&lt;br /&gt;
&lt;br /&gt;
Arek Korbik is the author of the [http://xiph.org/quicktime/ Xiph QuickTime Components]. He has been a project contributor since 2005.&lt;br /&gt;
&lt;br /&gt;
Michael Dale is the author of the [http://metavid.org MetaVidWiki] project which implements many of the Annodex and Xiph technologies as an extension to MediaWiki.&lt;br /&gt;
&lt;br /&gt;
==== What is your plan for dealing with disappearing students? ====&lt;br /&gt;
&lt;br /&gt;
Our first goal will be to provide necessary support from the community such that our students do not want to suddenly vanish. We want our students to become real members of the community, with ongoing contributions. That said, we&#039;re well aware of the possibility of a student disappearing.&lt;br /&gt;
&lt;br /&gt;
We intend to be reasonably strict with requiring students to keep in touch - whilst we&#039;re quite happy for them to be absent for a while if they let us know in advance, we will intend to get at least twice-weekly updates from each student. &lt;br /&gt;
&lt;br /&gt;
The mentors will have primary responsibility for their students, but the admins (Mike Smith and Ralph Giles) are also going to ensure that the mentors are indeed keeping track of what their students are up to. We&#039;ll ask our students to provide means for us to get in touch beyond email, where possible - phone, etc - in case we need to get in touch urgently.&lt;br /&gt;
&lt;br /&gt;
==== What is your plan for dealing with disappearing mentors? ====&lt;br /&gt;
&lt;br /&gt;
Our mentors are all people who are major contributors to the Xiph projects - and have generally been contributing for many years. So, we think it&#039;s pretty unlikely that a mentor will disappear. However, we do have more mentors available than we expect to eventually have students (based on past years), so we&#039;re well able to take up the slack if a mentor becomes unavailable for any reason.&lt;br /&gt;
&lt;br /&gt;
Our admins will ensure that the mentors are keeping up with the students appropriately, and should it be absolutely necessary, we will either find another appropriate mentor, or the admins (Michael and Ralph) will take over mentoring the students directly.&lt;br /&gt;
&lt;br /&gt;
==== What steps will you take to encourage students to interact with your project&#039;s community before, during and after the program? ====&lt;br /&gt;
&lt;br /&gt;
The Xiph.Org Founation conducts much of its development discussion and community-building on our IRC channels. We&#039;ll ask that the students be present there while they&#039;re working, where adequate network access makes that possible. We hope to make them feel that they&#039;re an important part of our community; that their contributions are really making a difference towards the goals of Xiph. &lt;br /&gt;
&lt;br /&gt;
We intend to be open to their contributions - whilst we&#039;re aware that initially their work may not be of a quality sufficient to go into our core codebase immediately, we&#039;ll give them write access to our repository to work on a branch. We&#039;ll ask them to be open in discussing and designing their contributions on IRC and our mailing lists. Our application template welcomes them to come and ask us questions when they&#039;re trying to write up their application. We hope that some, or even all, of the students will continue to be part of the Xiph community after SoC concludes. For those students who have not previously contributed to open source software, we&#039;ll teach them about how important community building is for the ongoing health of such projects.&lt;br /&gt;
&lt;br /&gt;
==== What will you do to ensure that your accepted students stick with the project after GSoC concludes? ====&lt;br /&gt;
&lt;br /&gt;
We hope that the mentoring process and the experiences they have as part of GSoC will make the students interested in remaining part of Xiph, continuing development on the software they&#039;ve been working on, and perhaps nurturing their patches towards inclusion in an actual release.&lt;br /&gt;
&lt;br /&gt;
A very important part of GSoC is for us to make them active members of the community, in particular on the irc channels and the mailing lists. Past experience tells that once they have become part of that community, they will stick around for longer.&lt;br /&gt;
&lt;br /&gt;
We will encourage them not to consider this just &amp;quot;a summer job&amp;quot;, but as being part of a real community &amp;amp;mdash; and doing something that is both interesting, and useful to the wider world.&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Summer_of_Code_Mentoring&amp;diff=10086</id>
		<title>Summer of Code Mentoring</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Summer_of_Code_Mentoring&amp;diff=10086"/>
		<updated>2009-03-10T21:50:41Z</updated>

		<summary type="html">&lt;p&gt;Mdale: /* Describe your organization. */ updaed per draft&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Xiph.Org Application as a mentoring organization ==&lt;br /&gt;
&lt;br /&gt;
We need to apply for consideration as a mentoring organization 2008 March 3-12. Google lists the following questions in their [http://code.google.com/soc/2008/faqs.html#0.1_org_apply faq]. Our work-in-progress answers are inline.&lt;br /&gt;
&lt;br /&gt;
==== Describe your organization. ====&lt;br /&gt;
&lt;br /&gt;
The Xiph.Org Foundation is a 501(c)(3) non-profit organization dedicated to providing open and free-to-implement multimedia technology as a foundation for an interoperable, level playing field on the Internet and other digital distribution networks. Over the past 8 years we have developed most of the major patent-free and royalty-free audio and video codecs currently in use, including Vorbis, Speex, FLAC and Theora, as well as developing the Ogg streaming format, and the Icecast streaming media server. Xiph hosted libraries like liboggplay and liboggz power the underling html5 video support in Mozilla Firefox. &lt;br /&gt;
&lt;br /&gt;
This year we are also coordinating projects for the Annodex association under our umbrella. The Annodex projects develop standards and software for timed metadata and temporal media reference compatible with the existing web ecosystem. The Annodex streaming media server is used on sites such as wikipedia and archive.org to facilitate improved video seeking, inter-archive interoperability, and temporal media referencing via URLs&lt;br /&gt;
&lt;br /&gt;
==== Why is your organization applying to participate in GSoC 2008? What do you hope to gain by participating? ====&lt;br /&gt;
&lt;br /&gt;
We believe that the Xiph.Org Foundation has a wide-ranging set of projects that are both challenging and educational for students. Furthermore, they are important/useful goals for the wider technology community, and especially users of open source software.&lt;br /&gt;
&lt;br /&gt;
We believe that Xiph&#039;s mandate to develop multimedia standards and software is an important one, but we&amp;amp;mdash;of course&amp;amp;mdash;have limited resources. We hope that the results of GSoC will include the direct benefit of new software development, but also help grow the number of active participants in a long-term manner. Most of our core developers started as students, but have since moved on from their student days. Attracting and retaining students is essential to the health and sustainability of our project and is an important goal for all of us.&lt;br /&gt;
&lt;br /&gt;
==== Did your organization participate in past GSoCs? If so, please summarize your involvement and the successes and challenges of your participation. ====&lt;br /&gt;
&lt;br /&gt;
The Xiph.Org Foundation was invited to participate in GSoc in both 2006 and 2007, and informally mentored Annodex-related projects as well.&lt;br /&gt;
&lt;br /&gt;
In 2006, we were granted funding for 6 slots. One we weren&#039;t able to fill because our chosen students picked or were assigned to other projects. &lt;br /&gt;
&lt;br /&gt;
Two were [http://code.google.com/soc/xiph/about.html successful]. One, a [http://code.google.com/soc/xiph/appinfo.html?csaid=5F9265EEC6FA0611 hardware implementation of a Theora decoder]: this project produced HDL implementation of the major decoder components, to be used with a general purpose CPU, such as the open source LEON sparc implementation. Real time playback of SD content was demonstrated using these components in combination with the proprietary Nagios CPU design. Two, [http://code.google.com/soc/xiph/appinfo.html?csaid=213E2D30F095565D implementation of OggSkeleton support] in various tools. We have maintained contact with the two successful students since the program finished. One has continued to contribute code outside the GSoC term, continuing related work.&lt;br /&gt;
&lt;br /&gt;
The remaining three were unsuccessful through lack of necessary skills, health complications, insufficient motivation, or some combination of all of these.&lt;br /&gt;
&lt;br /&gt;
In 2007, we were given 2 project slots. One was an extension of the hardware decoder effort from last year. The other was helping to do R&amp;amp;D on Xiph&#039;s next-generation audio codec, Ghost. Both were marginally successful &amp;amp;mdash; the students reached the minimum goals set, but little more, and did not maintain contact with Xiph after the program. &lt;br /&gt;
&lt;br /&gt;
We enjoyed our participation over the last two years. It provided needed external input, energizing our project and improving our connections to the rest of the open source community. We think we&#039;ve learnt a lot about how to mentor new and upcoming contributors, and how to best screen the applications we do receive.&lt;br /&gt;
&lt;br /&gt;
==== If your organization has not previously participated in GSoC, have you applied in the past? If so, for what year(s)? ====&lt;br /&gt;
&lt;br /&gt;
We have participated previously, in 2006 and 2007.&lt;br /&gt;
&lt;br /&gt;
==== Who will your organization administrator be? Please include Google Account information. ====&lt;br /&gt;
&lt;br /&gt;
Michael Smith has volunteered to be the primary admin this year. Google account mlrsmith@gmail.com.&lt;br /&gt;
&lt;br /&gt;
==== What license(s) does your project use? ====&lt;br /&gt;
&lt;br /&gt;
In general, we use the revised 3-clause BSD license for our libraries, to enable the widest possible uses of our formats and reference implementations.&lt;br /&gt;
&lt;br /&gt;
Our applications are generally GPL but LGPL or (GPL-compatible) modified.  BSD is also acceptable.&lt;br /&gt;
&lt;br /&gt;
==== What is the URL for your ideas page? ====&lt;br /&gt;
&lt;br /&gt;
http://wiki.xiph.org/index.php/Summer_of_Code&lt;br /&gt;
&lt;br /&gt;
==== What is the main development mailing list or forum for your organization? ====&lt;br /&gt;
&lt;br /&gt;
We don&#039;t have a single central mailing list for all of the Foundation. Instead, we have project-specific mailing lists; of these the most active is vorbis-dev@xiph.org. A complete listing of our lists is available at:&lt;br /&gt;
&lt;br /&gt;
http://lists.xiph.org/mailman/listinfo/&lt;br /&gt;
&lt;br /&gt;
The primary contact of the Annodex projects is [http://lists.annodex.net/ annodex-dev@lists.annodex.net]&lt;br /&gt;
&lt;br /&gt;
==== What is the main IRC channel for your organization? ====&lt;br /&gt;
&lt;br /&gt;
Our main channel is #xiph on irc.freenode.net. We also have project-specific channels: #vorbis, #theora, #icecast, #speex and #annodex are the major ones.&lt;br /&gt;
&lt;br /&gt;
==== Does your organization have an application template you would like to see students use? If so, please provide it now. ====&lt;br /&gt;
&lt;br /&gt;
http://wiki.xiph.org/index.php/Summer_of_Code_Applications&lt;br /&gt;
&lt;br /&gt;
==== Who will be your backup organization administrator? Please include Google Account information. ====&lt;br /&gt;
&lt;br /&gt;
Ralph Giles will be the backup admin if no one else volunteers. Google account giles@xiph.org.&lt;br /&gt;
&lt;br /&gt;
==== Who will your mentors be? Please include Google Account information. ====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Michael Smith&#039;&#039;&#039;: google account mlrsmith@gmail.com&lt;br /&gt;
* &#039;&#039;&#039;Ralph Giles&#039;&#039;&#039;: google account giles@xiph.org&lt;br /&gt;
* &#039;&#039;&#039;Silvia Pfeiffer&#039;&#039;&#039;: google account silviapfeiffer1@gmail.com&lt;br /&gt;
* &#039;&#039;&#039;Christopher Montgomery&#039;&#039;&#039;: google account xiphmont@gmail.com&lt;br /&gt;
* &#039;&#039;&#039;Timothy Terriberry&#039;&#039;&#039;: google account tterribe@vt.edu&lt;br /&gt;
* &#039;&#039;&#039;Jean-Marc Valin&#039;&#039;&#039;: google account jmvalin@gmail.com&lt;br /&gt;
* &#039;&#039;&#039;Arek Korbik&#039;&#039;&#039;: google account arkadini@gmail.com&lt;br /&gt;
* &#039;&#039;&#039;Michael Dale&#039;&#039;&#039;: google account bigmammoth@gmail.com&lt;br /&gt;
* &#039;&#039;&#039;Ivo Emanuel Gonçalves&#039;&#039;&#039;: google account justivo@gmail.com&lt;br /&gt;
&lt;br /&gt;
==== What criteria did you use to select these individuals as mentors? Please be as specific as possible. ====&lt;br /&gt;
&lt;br /&gt;
We selected our mentors from the &#039;core&#039; developers and contributors within Xiph. Mentors were selected based on how well they know the code area they&#039;re volunteering to mentor, how long they&#039;ve been part of Xiph, how well they interact with others (particularly in terms of building community around our projects).&lt;br /&gt;
&lt;br /&gt;
The majority of the mentors we&#039;ve selected are core developers on the various Xiph sub-projects that they&#039;ve volunteered to mentor for. They have been contributing to the Xiph.Org Foundation for at least several years, and have shown a persistent interest both in the software we develop, and in helping to create a community around it. We have also made sure that each mentor has sufficient time available to adequately mentor their student(s).&lt;br /&gt;
&lt;br /&gt;
Michael Smith has been involved with the Xiph.Org Foundation and multimedia development since 2000 and remains one of our most involved core members. He helped write major portions of the vorbis-tools suite and the icecast streaming media server. He currently works as a developer at Fluendo.com on the GStreamer multimedia framework, flumotion (a streaming media server), and other multimedia software. &lt;br /&gt;
&lt;br /&gt;
Ralph Giles has been involved with the Xiph.Org Foundation and multimedia development since 2000. He has contributed to tool development and the Theora video codec. He handles much of the coordination and administrative work for the Xiph.Org Foundation. He mentored the successful &amp;quot;Hardware implementation of Theora decoding&amp;quot; project in GSoC 2006 and acted as an administrator.&lt;br /&gt;
&lt;br /&gt;
Silvia Pfeiffer is the founder of the Annodex project and president of the Annodex Association. She is the principle author of most of the Annodex specifications, RFC 3533 describing the Ogg media format, and is heavily involved as an organizer in both the Xiph and Annodex projects. Most recently she organized the [http://www.annodex.org/events/foms2007/ FOMS] developer summit and media recording for [http://lca2007.linux.org.au/ LCA 2007]. She helped mentor the successful &amp;quot;OggSkeleton support&amp;quot; project in GSoC 2006 and acted as an administrator during the application process.&lt;br /&gt;
&lt;br /&gt;
Christopher &amp;quot;Monty&amp;quot; Montgomery is the founder of the Xiph.Org Foundation, architect and lead developer of the Ogg Vorbis general purpose audio compression format. He has been doing open source development under the Xiph name since 1999. His current work focuses on development of a next-generation audio codec and a new Theora encoder. He helped mentor a project related to this in GSoC 2006.&lt;br /&gt;
&lt;br /&gt;
Timothy Terriberry is the author of the Theora video codec specification and the author of the theora-exp implementation. He has been an active contributor since 2003. He mentored a Theora-related project in GSoC 2006.&lt;br /&gt;
&lt;br /&gt;
Jean-Marc Valin is the architect and lead developer of the Speex voice codec. He has been involved in the Xiph.Org Founation since 2002. He mentored an audio codec research project in GSoC 2006.&lt;br /&gt;
&lt;br /&gt;
Arek Korbik is the author of the [http://xiph.org/quicktime/ Xiph QuickTime Components]. He has been a project contributor since 2005.&lt;br /&gt;
&lt;br /&gt;
Michael Dale is the author of the [http://metavid.org MetaVidWiki] project which implements many of the Annodex and Xiph technologies as an extension to MediaWiki.&lt;br /&gt;
&lt;br /&gt;
==== What is your plan for dealing with disappearing students? ====&lt;br /&gt;
&lt;br /&gt;
Our first goal will be to provide necessary support from the community such that our students do not want to suddenly vanish. We want our students to become real members of the community, with ongoing contributions. That said, we&#039;re well aware of the possibility of a student disappearing.&lt;br /&gt;
&lt;br /&gt;
We intend to be reasonably strict with requiring students to keep in touch - whilst we&#039;re quite happy for them to be absent for a while if they let us know in advance, we will intend to get at least twice-weekly updates from each student. &lt;br /&gt;
&lt;br /&gt;
The mentors will have primary responsibility for their students, but the admins (Mike Smith and Ralph Giles) are also going to ensure that the mentors are indeed keeping track of what their students are up to. We&#039;ll ask our students to provide means for us to get in touch beyond email, where possible - phone, etc - in case we need to get in touch urgently.&lt;br /&gt;
&lt;br /&gt;
==== What is your plan for dealing with disappearing mentors? ====&lt;br /&gt;
&lt;br /&gt;
Our mentors are all people who are major contributors to the Xiph projects - and have generally been contributing for many years. So, we think it&#039;s pretty unlikely that a mentor will disappear. However, we do have more mentors available than we expect to eventually have students (based on past years), so we&#039;re well able to take up the slack if a mentor becomes unavailable for any reason.&lt;br /&gt;
&lt;br /&gt;
Our admins will ensure that the mentors are keeping up with the students appropriately, and should it be absolutely necessary, we will either find another appropriate mentor, or the admins (Michael and Ralph) will take over mentoring the students directly.&lt;br /&gt;
&lt;br /&gt;
==== What steps will you take to encourage students to interact with your project&#039;s community before, during and after the program? ====&lt;br /&gt;
&lt;br /&gt;
The Xiph.Org Founation conducts much of its development discussion and community-building on our IRC channels. We&#039;ll ask that the students be present there while they&#039;re working, where adequate network access makes that possible. We hope to make them feel that they&#039;re an important part of our community; that their contributions are really making a difference towards the goals of Xiph. &lt;br /&gt;
&lt;br /&gt;
We intend to be open to their contributions - whilst we&#039;re aware that initially their work may not be of a quality sufficient to go into our core codebase immediately, we&#039;ll give them write access to our repository to work on a branch. We&#039;ll ask them to be open in discussing and designing their contributions on IRC and our mailing lists. Our application template welcomes them to come and ask us questions when they&#039;re trying to write up their application. We hope that some, or even all, of the students will continue to be part of the Xiph community after SoC concludes. For those students who have not previously contributed to open source software, we&#039;ll teach them about how important community building is for the ongoing health of such projects.&lt;br /&gt;
&lt;br /&gt;
==== What will you do to ensure that your accepted students stick with the project after GSoC concludes? ====&lt;br /&gt;
&lt;br /&gt;
We hope that the mentoring process and the experiences they have as part of GSoC will make the students interested in remaining part of Xiph, continuing development on the software they&#039;ve been working on, and perhaps nurturing their patches towards inclusion in an actual release.&lt;br /&gt;
&lt;br /&gt;
A very important part of GSoC is for us to make them active members of the community, in particular on the irc channels and the mailing lists. Past experience tells that once they have become part of that community, they will stick around for longer.&lt;br /&gt;
&lt;br /&gt;
We will encourage them not to consider this just &amp;quot;a summer job&amp;quot;, but as being part of a real community &amp;amp;mdash; and doing something that is both interesting, and useful to the wider world.&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Summer_of_Code_2009&amp;diff=10068</id>
		<title>Summer of Code 2009</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Summer_of_Code_2009&amp;diff=10068"/>
		<updated>2009-03-03T23:09:41Z</updated>

		<summary type="html">&lt;p&gt;Mdale: /* Proof of Concept liboggplay (html5 video) support in Chromium Browser */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is  our ideas page for [http://code.google.com/soc/ Google Summer of Code 2009] projects with [http://xiph.org Xiph.org] and [http://annodex.org/ Annodex]. The two projects participate jointly this year under Xiph&#039;s name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Students&#039;&#039;&#039; please use the template at [[Summer of Code Applications]] when applying for a GSoC position.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentors&#039;&#039;&#039; please visit [[Summer of Code Mentoring]] and help us prepare our application as a mentoring organization.&lt;br /&gt;
&lt;br /&gt;
== General Ideas ==&lt;br /&gt;
&lt;br /&gt;
* Kate to HTML &amp;amp; CSS overlay library in javascript.&lt;br /&gt;
* Proof of concept liboggplay-based media patch for Google&#039;s Chrome browser.&lt;br /&gt;
* mod_duration apache module to generate X-Content-Duration headers for Ogg files.&lt;br /&gt;
* Get skeleton patches upstream so players stop choking on it.&lt;br /&gt;
* Portable listening application for codec MOS/MUSHRA comparisons (Win32, MacOS, Linux; FF3.1 web application?).&lt;br /&gt;
* Conference bridge using CELT.&lt;br /&gt;
* Reference SIP client for CELT.&lt;br /&gt;
* Firefox extension to record locally and stream to icecast.&lt;br /&gt;
* Firefox extension to support RTP for conferencing.&lt;br /&gt;
&lt;br /&gt;
== Detailed Project Descriptions ==&lt;br /&gt;
&lt;br /&gt;
These ideas were suggested by various members of the developer community as projects that would be beneficial and which we feel we can mentor. Students should feel free to select one of these, develop a variation, or propose their own ideas. Here, ideally.&lt;br /&gt;
&lt;br /&gt;
=== Proof of Concept liboggplay (html5 video) support in Chromium Browser === &lt;br /&gt;
&lt;br /&gt;
This project would focus on integrating support for liboggplay into chrome. This project would only need to be a proof of concept with the end result being some frames decoded in the browser.&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/chromium/ Chromium Home Page]&lt;br /&gt;
&lt;br /&gt;
=== Metavid related projects === &lt;br /&gt;
&lt;br /&gt;
see [http://metavid.org/wiki/Summer_of_Code_2009 full page on metavid.org]&lt;br /&gt;
* Improve transcript import / export system:&lt;br /&gt;
** Wiki to SRT &lt;br /&gt;
** SRT to Wiki &lt;br /&gt;
** CMML to Wiki&lt;br /&gt;
** Extend oggz_chop or other tool for exporting transcript encapsulated in the ogg file.&lt;br /&gt;
&lt;br /&gt;
=== Javascript Library for Subtitles, Captions and other time-aligned text ===&lt;br /&gt;
&lt;br /&gt;
Captions, subtitles and other categories of time-aligned text are starting to become relevant to HTML5. In Ogg, we currently encapsulate such data in OggKate and can use SRT or Kate as input formats. Display of OggKate is currently supported in VLC and there is a patch to mplayer. However, there is no display of OggKate in Firefox 3.1 using HTML5. This can be fixed through the creation of a javascript library that can deal with Kate output and convert it to HTML and CSS. Such a library exists for SRT, but will be extended to Kate in this project.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Summer of Code 2008]]&lt;br /&gt;
*[[Summer of Code 2007]]&lt;br /&gt;
*[[Summer of Code 2006]]&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Summer_of_Code_2009&amp;diff=10067</id>
		<title>Summer of Code 2009</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Summer_of_Code_2009&amp;diff=10067"/>
		<updated>2009-03-03T22:59:29Z</updated>

		<summary type="html">&lt;p&gt;Mdale: /* Metavid related projects */ reworded export desc&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is  our ideas page for [http://code.google.com/soc/ Google Summer of Code 2009] projects with [http://xiph.org Xiph.org] and [http://annodex.org/ Annodex]. The two projects participate jointly this year under Xiph&#039;s name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Students&#039;&#039;&#039; please use the template at [[Summer of Code Applications]] when applying for a GSoC position.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentors&#039;&#039;&#039; please visit [[Summer of Code Mentoring]] and help us prepare our application as a mentoring organization.&lt;br /&gt;
&lt;br /&gt;
== General Ideas ==&lt;br /&gt;
&lt;br /&gt;
* Kate to HTML &amp;amp; CSS overlay library in javascript.&lt;br /&gt;
* Proof of concept liboggplay-based media patch for Google&#039;s Chrome browser.&lt;br /&gt;
* mod_duration apache module to generate X-Content-Duration headers for Ogg files.&lt;br /&gt;
* Get skeleton patches upstream so players stop choking on it.&lt;br /&gt;
* Portable listening application for codec MOS/MUSHRA comparisons (Win32, MacOS, Linux; FF3.1 web application?).&lt;br /&gt;
* Conference bridge using CELT.&lt;br /&gt;
* Reference SIP client for CELT.&lt;br /&gt;
* Firefox extension to record locally and stream to icecast.&lt;br /&gt;
* Firefox extension to support RTP for conferencing.&lt;br /&gt;
&lt;br /&gt;
== Detailed Project Descriptions ==&lt;br /&gt;
&lt;br /&gt;
These ideas were suggested by various members of the developer community as projects that would be beneficial and which we feel we can mentor. Students should feel free to select one of these, develop a variation, or propose their own ideas. Here, ideally.&lt;br /&gt;
&lt;br /&gt;
=== Proof of Concept liboggplay (html5 video) support in Chrome Browser === &lt;br /&gt;
&lt;br /&gt;
This project would focus on creating a patch for basic liboggplay support into chrome. This project would only need to be a proof of concept with the end result being some frames decoded in the browser. Buffering, and full html5 video feature set support would not need to be addressed. &lt;br /&gt;
&lt;br /&gt;
=== Metavid related projects === &lt;br /&gt;
&lt;br /&gt;
see [http://metavid.org/wiki/Summer_of_Code_2009 full page on metavid.org]&lt;br /&gt;
* Improve transcript import / export system:&lt;br /&gt;
** Wiki to SRT &lt;br /&gt;
** SRT to Wiki &lt;br /&gt;
** CMML to Wiki&lt;br /&gt;
** Extend oggz_chop or other tool for exporting transcript encapsulated in the ogg file.&lt;br /&gt;
&lt;br /&gt;
=== Javascript Library for Subtitles, Captions and other time-aligned text ===&lt;br /&gt;
&lt;br /&gt;
Captions, subtitles and other categories of time-aligned text are starting to become relevant to HTML5. In Ogg, we currently encapsulate such data in OggKate and can use SRT or Kate as input formats. Display of OggKate is currently supported in VLC and there is a patch to mplayer. However, there is no display of OggKate in Firefox 3.1 using HTML5. This can be fixed through the creation of a javascript library that can deal with Kate output and convert it to HTML and CSS. Such a library exists for SRT, but will be extended to Kate in this project.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Summer of Code 2008]]&lt;br /&gt;
*[[Summer of Code 2007]]&lt;br /&gt;
*[[Summer of Code 2006]]&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Summer_of_Code_2009&amp;diff=10029</id>
		<title>Summer of Code 2009</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Summer_of_Code_2009&amp;diff=10029"/>
		<updated>2009-02-27T17:41:04Z</updated>

		<summary type="html">&lt;p&gt;Mdale: /* Detailed Project Description */ heading for metavid projects&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is  our ideas page for [http://code.google.com/soc/ Google Summer of Code 2009] projects with [http://xiph.org Xiph.org] and [http://annodex.org/ Annodex]. The two projects participate jointly this year under Xiph&#039;s name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Students&#039;&#039;&#039; please use the template at [[Summer of Code Applications]] when applying for a GSoC position.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentors&#039;&#039;&#039; please visit [[Summer of Code Mentoring]] and help us prepare our application as a mentoring organization.&lt;br /&gt;
&lt;br /&gt;
== General Ideas ==&lt;br /&gt;
&lt;br /&gt;
==Detailed Project Description==&lt;br /&gt;
===Proof of Concept liboggplay (html5 video) support in Chrome Browser === &lt;br /&gt;
This project would focus on creating a patch for basic liboggplay support into chrome. This project would only need to be a proof of concept with the end result being some frames decoded in the browser. Buffering, and full html5 video feature set support would not need to be addressed. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Metavid related projects === &lt;br /&gt;
see [http://metavid.org/wiki/Summer_of_Code_2009 full page on metavid.org]&lt;br /&gt;
* Improve transcript import export system:&lt;br /&gt;
** [[CMML]] to SRT &lt;br /&gt;
** SRT to Wiki &lt;br /&gt;
** Wiki to oggkate SRT+OGG stream&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Summer of Code 2008]]&lt;br /&gt;
*[[Summer of Code 2007]]&lt;br /&gt;
*[[Summer of Code 2006]]&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Summer_of_Code_2009&amp;diff=10028</id>
		<title>Summer of Code 2009</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Summer_of_Code_2009&amp;diff=10028"/>
		<updated>2009-02-27T17:40:20Z</updated>

		<summary type="html">&lt;p&gt;Mdale: added liboggplay chrome support idea&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is  our ideas page for [http://code.google.com/soc/ Google Summer of Code 2009] projects with [http://xiph.org Xiph.org] and [http://annodex.org/ Annodex]. The two projects participate jointly this year under Xiph&#039;s name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Students&#039;&#039;&#039; please use the template at [[Summer of Code Applications]] when applying for a GSoC position.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentors&#039;&#039;&#039; please visit [[Summer of Code Mentoring]] and help us prepare our application as a mentoring organization.&lt;br /&gt;
&lt;br /&gt;
== General Ideas ==&lt;br /&gt;
&lt;br /&gt;
==Detailed Project Description==&lt;br /&gt;
===Proof of Concept liboggplay (html5 video) support in Chrome Browser === &lt;br /&gt;
This project would focus on creating a patch for basic liboggplay support into chrome. This project would only need to be a proof of concept with the end result being some frames decoded in the browser. Buffering, and full html5 video feature set support would not need to be addressed. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metavid related projects see [http://metavid.org/wiki/Summer_of_Code_2009 full page on metavid.org]&lt;br /&gt;
* Improve transcript import export system:&lt;br /&gt;
** [[CMML]] to SRT &lt;br /&gt;
** SRT to Wiki &lt;br /&gt;
** Wiki to oggkate SRT+OGG stream&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Summer of Code 2008]]&lt;br /&gt;
*[[Summer of Code 2007]]&lt;br /&gt;
*[[Summer of Code 2006]]&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Summer_of_Code_2009&amp;diff=10027</id>
		<title>Summer of Code 2009</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Summer_of_Code_2009&amp;diff=10027"/>
		<updated>2009-02-27T16:49:13Z</updated>

		<summary type="html">&lt;p&gt;Mdale: /* Detailed Project Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is  our ideas page for [http://code.google.com/soc/ Google Summer of Code 2009] projects with [http://xiph.org Xiph.org] and [http://annodex.org/ Annodex]. The two projects participate jointly this year under Xiph&#039;s name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Students&#039;&#039;&#039; please use the template at [[Summer of Code Applications]] when applying for a GSoC position.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentors&#039;&#039;&#039; please visit [[Summer of Code Mentoring]] and help us prepare our application as a mentoring organization.&lt;br /&gt;
&lt;br /&gt;
== General Ideas ==&lt;br /&gt;
&lt;br /&gt;
==Detailed Project Description==&lt;br /&gt;
&lt;br /&gt;
Metavid related projects see [http://metavid.org/wiki/Summer_of_Code_2009 full page on metavid.org]&lt;br /&gt;
* Improve transcript import export system:&lt;br /&gt;
** [[CMML]] to SRT &lt;br /&gt;
** SRT to Wiki &lt;br /&gt;
** Wiki to oggkate SRT+OGG stream&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Summer of Code 2008]]&lt;br /&gt;
*[[Summer of Code 2007]]&lt;br /&gt;
*[[Summer of Code 2006]]&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Summer_of_Code_2009&amp;diff=10026</id>
		<title>Summer of Code 2009</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Summer_of_Code_2009&amp;diff=10026"/>
		<updated>2009-02-27T02:18:37Z</updated>

		<summary type="html">&lt;p&gt;Mdale: /* Current Ideas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is  our ideas page for [http://code.google.com/soc/ Google Summer of Code 2009] projects with [http://xiph.org Xiph.org] and [http://annodex.org/ Annodex]. The two projects participate jointly this year under Xiph&#039;s name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Students&#039;&#039;&#039; please use the template at [[Summer of Code Applications]] when applying for a GSoC position.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentors&#039;&#039;&#039; please visit [[Summer of Code Mentoring]] and help us prepare our application as a mentoring organization.&lt;br /&gt;
&lt;br /&gt;
== General Ideas ==&lt;br /&gt;
&lt;br /&gt;
==Detailed Project Description==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Summer of Code 2008]]&lt;br /&gt;
*[[Summer of Code 2007]]&lt;br /&gt;
*[[Summer of Code 2006]]&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Summer_of_Code_2009&amp;diff=10025</id>
		<title>Summer of Code 2009</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Summer_of_Code_2009&amp;diff=10025"/>
		<updated>2009-02-27T02:18:24Z</updated>

		<summary type="html">&lt;p&gt;Mdale: initial summer of code 2009 page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is  our ideas page for [http://code.google.com/soc/ Google Summer of Code 2009] projects with [http://xiph.org Xiph.org] and [http://annodex.org/ Annodex]. The two projects participate jointly this year under Xiph&#039;s name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Students&#039;&#039;&#039; please use the template at [[Summer of Code Applications]] when applying for a GSoC position.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentors&#039;&#039;&#039; please visit [[Summer of Code Mentoring]] and help us prepare our application as a mentoring organization.&lt;br /&gt;
&lt;br /&gt;
== Current Ideas ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Detailed Project Description==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Summer of Code 2008]]&lt;br /&gt;
*[[Summer of Code 2007]]&lt;br /&gt;
*[[Summer of Code 2006]]&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Summer_of_Code&amp;diff=10024</id>
		<title>Summer of Code</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Summer_of_Code&amp;diff=10024"/>
		<updated>2009-02-27T02:15:34Z</updated>

		<summary type="html">&lt;p&gt;Mdale: updaed page to disambiguate&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*see [[Summer of Code 2009]]&lt;br /&gt;
*see [[Summer of Code 2008]]&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Talk:Summer_of_Code&amp;diff=10023</id>
		<title>Talk:Summer of Code</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Talk:Summer_of_Code&amp;diff=10023"/>
		<updated>2009-02-27T02:14:41Z</updated>

		<summary type="html">&lt;p&gt;Mdale: Talk:Summer of Code moved to Talk:Summer of Code 2008: moved 2008 summer of code page to 2008&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Talk:Summer of Code 2008]]&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Talk:Summer_of_Code_2008&amp;diff=10022</id>
		<title>Talk:Summer of Code 2008</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Talk:Summer_of_Code_2008&amp;diff=10022"/>
		<updated>2009-02-27T02:14:41Z</updated>

		<summary type="html">&lt;p&gt;Mdale: Talk:Summer of Code moved to Talk:Summer of Code 2008: moved 2008 summer of code page to 2008&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Summer_of_Code&amp;diff=10021</id>
		<title>Summer of Code</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Summer_of_Code&amp;diff=10021"/>
		<updated>2009-02-27T02:14:40Z</updated>

		<summary type="html">&lt;p&gt;Mdale: Summer of Code moved to Summer of Code 2008: moved 2008 summer of code page to 2008&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Summer of Code 2008]]&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Summer_of_Code_2008&amp;diff=10020</id>
		<title>Summer of Code 2008</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Summer_of_Code_2008&amp;diff=10020"/>
		<updated>2009-02-27T02:14:40Z</updated>

		<summary type="html">&lt;p&gt;Mdale: Summer of Code moved to Summer of Code 2008: moved 2008 summer of code page to 2008&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is  our ideas page for [http://code.google.com/soc/ Google Summer of Code] projects with [http://xiph.org Xiph.org] and [http://annodex.org/ Annodex]. The two projects participate jointly this year under Xiph&#039;s name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Students&#039;&#039;&#039; please use the template at [[Summer of Code Applications]] when applying for a GSoC position.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentors&#039;&#039;&#039; please visit [[Summer of Code Mentoring]] and help us prepare our application as a mentoring organization.&lt;br /&gt;
&lt;br /&gt;
== Current Ideas ==&lt;br /&gt;
&lt;br /&gt;
We need a primary and backup mentor volunteer for any project that is to become an official proposal, but submit something and we&#039;ll see who we can round up. :)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Project ideas go here&#039;&#039;&lt;br /&gt;
* Transcode/Tag/Upload tool for Theora et al. (ideally as a firefox extension so web cms integration is easy) &#039;&#039;&#039;OggPusher&#039;&#039;&#039; details below:&lt;br /&gt;
* Theora encoding support in GIMP&lt;br /&gt;
* Cross-platform qt4 wrapper around Xiph encoders.  A do-it-all encoder in one simple GUI, possibly drag&amp;amp;drop a la OggDropXPd.  This would make it tremendously easy for end-users to encode Theora et al&lt;br /&gt;
* Theora Java port directly (semi)automatically derived from the reference sources&lt;br /&gt;
* Optimisations for Oggenc and Co. as done by Lancer (http://homepage3.nifty.com/blacksword/) which gives around 3x more speed. If one fears quality lose, make it ./configure option. Lancers diffs only work for Windows.&lt;br /&gt;
:The last statement shows why this is a bad idea.&lt;br /&gt;
* Speex support in IceS&lt;br /&gt;
* Better stream source gui for dvswitch&lt;br /&gt;
* XSPF support in ogg123 and oggenc (playlist creation)&lt;br /&gt;
* Initial support for OggPCM in some of our tools&lt;br /&gt;
* OggMNG tools&lt;br /&gt;
:Is this really necessary?  I mean, OggMNG seems to have gone nowhere and serve no niche.--Ivo&lt;br /&gt;
::We still keep getting asked for a format where speex and images together make up a movie.--Silvia&lt;br /&gt;
* ROE implementation for network: using ROE in a client-server negotiation to dynamically request a specific multi-track ogg file using skeleton (Silvia)&lt;br /&gt;
* create Ogg caption support for vlc using CMML&lt;br /&gt;
* ffmpeg improvements for Xiph codecs:&lt;br /&gt;
** add Speex support&lt;br /&gt;
** add Ogg Skeleton support&lt;br /&gt;
** fix seeking bugs involving Ogg Theora&lt;br /&gt;
** fix bugs in Ogg Theora decoder&lt;br /&gt;
** improve ogg muxer&lt;br /&gt;
* Ogg Cutter, a GUI to cut out segments from Ogg Videos, this could be based on oggz-chop (part of oggz-tools) or done with Gstreamer (starting with [http://webcvs.freedesktop.org/gstreamer/gst-python/examples/remuxer.py?content-type=text%2Fplain&amp;amp;view=co remuxer.py])&lt;br /&gt;
* Improve [http://xiph.org/quicktime/ Xiph QuickTime Components]:&lt;br /&gt;
** add Ogg Skeleton support (would make XiphQT able to properly play streams served with mod_annodex)&lt;br /&gt;
** add FLAC and Speex encoding support&lt;br /&gt;
** improve user interface of the Ogg exporter&lt;br /&gt;
** add AudioFile components supporting Ogg and FLAC files (to make XiphQT available to applications using only CoreAudio without QuickTime)&lt;br /&gt;
* Portable [http://rarewares.org/ogg-oggenc.php oggenc2] --[[User:Fp|Fp]] 02:26, 14 May 2008 (PDT)&lt;br /&gt;
** oggenc2 is a fork of xiph.org oggenc available for the Win32 platform. Sources are available under the GPL. Unfortunately it does not compile under POSIX systems. Oggenc2 has a lot of features and bug fixes over xiph.org oggenc, e.g.:&lt;br /&gt;
*** use of libsamplerate for resampling, giving a higher quality;&lt;br /&gt;
*** support of 32 bit and floating point WAV format for input;&lt;br /&gt;
** this project should port all the improvements in oggenc2 to oggenc. Note that the two projects are diverged somewhat and so oggenc may have some other features that oggenc2 have not, so a straight port of oggenc2 to POSIX could not be the right approach. The best way is to get the source of all versions of oggenc2, do a diff between them and try to apply in oggenc.&lt;br /&gt;
&lt;br /&gt;
==Detailed Project Description==&lt;br /&gt;
&lt;br /&gt;
===Mv_Embed: Accessibility and [re]usability:===&lt;br /&gt;
&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Michael Dale, Anna (EngageMedia) &amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Existing Feature Set:&#039;&#039;&#039; [http://metavid.ucsc.edu/wiki/index.php/Mv_Embed Mv_Embed] is an existing javascript library that takes html5 &amp;lt;video&amp;gt; tag and rewrites the video tag for to support in-page ogg theora playback in contemporary browsers. MV_embed supports may browsers and plugins including: native browser support such as firefox 3 video builds, oggplay plugin for firefox2 in win, mac, linux ; VLC activX/plugin for win IE, firefox, and mac, linux firefox; mplayer &amp;amp; totem for linux; and java cortado for microsoft, sun, apple java VM for IE, firefox &amp;amp; safari. Mv_embed maps all these plugin javascript systems to a ~near~ html5 spec api enabling web application developers to take advantage of a uniform javascript API for video control and interaction without having to worry about the underling plugin systems. Mv_Embed is used as part of the metavidWiki Project (screen cast).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Proposed Development:&#039;&#039;&#039; Mv_Embed will be enhanced around two goals integration into prominent open source Content Management Systems and better accessibility of close captions and associative video metadata.&lt;br /&gt;
&lt;br /&gt;
Mv_Embed will integrate into existing CMS video extensions for quick &amp;quot;one-off&amp;quot; ogg theora support.&lt;br /&gt;
* FilmForge (Drupal)&lt;br /&gt;
* ShowInABox (Wordpress)&lt;br /&gt;
* Plumi (Plone)&lt;br /&gt;
&lt;br /&gt;
Additional server side components like transcoding to theora, generating thumbnails, and exporting metadata will also be developed. Where time / resources permit server side hooks into ffmepg2theora (for transcoding) and mplayer (for generating thumbnails) will be developed for the CMS systems as well. As OggPusher matures simple hooks will be added to the CMS&#039;s to support direct ogg theora clip uploads.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Accessibility &amp;amp; CMML&#039;&#039;&#039;&lt;br /&gt;
Accessible components of mv_embed consist of obtaining the metadata and putting it into the dom as a child of the video element. Mv_Embed will  offer a reference javascript interface for client interactions with that metadata. The metadata will be structured in Continues Media Markup Language (CMML). CMML is a part of the annodex technology set and can either be muxed into the ogg stream or be requested separately via XML. Mv_Embed will negotiate a transport method for the metadata that will work for the given plugin type.(Currently only oggplay plugin supports ogg-skeleton and exposing muxed CMML tracks in the ogg stream).&lt;br /&gt;
&lt;br /&gt;
Mv_Embed is part of [http://metavid.ucsc.edu/wiki/index.php/MetaVidWiki MetavidWiki] enables community authored transcripts and exposes these multiple layers in CMML. Proposed work on Mv_Embed will generalize these development efforts taking place in the metavid project for other CMS&#039;s and improve the usability and accessibility of these metadata layers in javascript based interfaces and mutil-plugin playback environment.&lt;br /&gt;
&lt;br /&gt;
=== Theora Java port directly (semi)automatically derived from the reference sources ===&lt;br /&gt;
&lt;br /&gt;
The current Java decoder port (jheora) is rapidly heading towards becoming obsolete. It was based on the C reference implementation during alpha development stages, which means it cannot decode advanced Theora streams using non-VP3 features. Current Theora mainline features a completely new decoder, implementing all bitstream features, and a new encoder needing these advanced decoder capabilities is expected to arrive soon. jheora, however, appears to be unmaintainable for very same reasons the original alpha decoder was dropped. To make matters worse there&#039;s a very very noticable lack of someone being at least moderately skilled in Java AND being skilled in video coding AND writing Java code with acceptable speed (video decoding should be realtime). Any conventional manual Java source port may quickly bitrot to an unmaintainable state.&lt;br /&gt;
&lt;br /&gt;
Thankfully there *are* technologies to get C code to execute in the Java Virtual Machine. The obvious idea would be to translate the actual source code to Java using an automated process, but no reliable tools exist doing this (and given the concept-clash in some areas between C and Java it&#039;s unlikely something really nice will emerge). Projects like NestedVM (http://nestedvm.ibex.org/) and Cibyl (http://spel.bth.se/index.php/Cibyl) are doing &#039;&#039;&#039;language agnostic translations to Java bytecode&#039;&#039;&#039;, using the GCC toolchain.&lt;br /&gt;
&lt;br /&gt;
In the first step the code to be ported is compiled to MIPS ELF binaries. Those are then converted to Java bytecode. This works pretty well because MIPS is pretty similar to Java bytecode and most instructions can be mapped directly.&lt;br /&gt;
&lt;br /&gt;
Crazyness? Work of mad men, living in nuclear families, fighting rampaging robots with nuclear missiles? Does this actually work? Yup, it does work, and some Xiph encoders/decoders have been successfully converted with NestedVM already (http://groups.google.com/group/nestedvm/browse_thread/thread/df96ef7337f390e4/a45fdd66534e7641?#a45fdd66534e7641) and figures provided by the Cibyl project indicate that the MIPS-to-Java approach isn&#039;t actually slower than a &amp;quot;real&amp;quot; Java port (http://spel.bth.se/index.php/Cibyl_performance) - it&#039;s sometimes faster, sometimes slower.&lt;br /&gt;
&lt;br /&gt;
The problem with NestedVM is that there appears to be no means to generate a Java interface from the converted binaries - which means that while the converted binaries work fine on Java there&#039;s no way to call the functionality of the converted code by other Java classes, which would be necessary to e.g. write a player applet.&lt;br /&gt;
&lt;br /&gt;
Cibyl, on the other hand, does provide means to generate Java interfaces, given the binary and the header files. Cibyl, however, needs to link some helper symbols into the MIPS binary, which apparently requires some tricks to work in the usual autoconf setup (http://groups.google.com/group/cibyl-devel/browse_thread/thread/584e5fc3b9bc7e2c). So for the Cibyl port to work some autoconf magic may be necessary.&lt;br /&gt;
&lt;br /&gt;
So what should this project do:&lt;br /&gt;
&lt;br /&gt;
* Create and document a working setup for doing language-agnostic Java conversions&lt;br /&gt;
* Demonstrate this for Theora&lt;br /&gt;
* Find a way to generate a Java interface in a way being automated as much as possible&lt;br /&gt;
&lt;br /&gt;
This project most likely is directly bound to progress made with either NestedVM or Cibyl. The upside of this is that any results may be directly applied to other projects, too&lt;br /&gt;
&lt;br /&gt;
--[[User:Maikmerten|Maikmerten]] 03:43, 12 March 2008 (PDT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===OggPusher===&lt;br /&gt;
&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Michael Dale ... or anyone else with more experience with firefox extensions/ffmpeg2theora ? &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Abstract:&#039;&#039;&#039; OggPusher is a proposed cross platform packaging of ffmpeg2theora as a browser extension. This exposes JavaScript hooks to web applications enabling easy client side transcodes from high quality source originals such as DV or MPEG2 and uploading into web based content management systems.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Sample Application Flow:&#039;&#039;&#039; is as follows: A user visits a oggPusher enabled web service. The firefox user is prompted to install a browser extension via firefox&#039;s .xpi extension framework. Once enabled, the web service upload interface does a call to the oggPusher to expose a &amp;quot;open file&amp;quot; dialog box on the client. The websevice access the oggPusher api to set the requested transcode bitrate and other transcode options (such as interlace, number of audio channels, resolution etc).  The client selects the high quality local file and begins transcoding to a temporary location on local disk. If there is an error in transcoding the upload is aborted and an error is exposed to web application.  Once the file is done transcoding, the web interface has the client issue a POST of the transcoded file.(if the server supports more efficient PUT than that can be used). The amount of the file that has been transcoded and the amount uploaded are exposed via javascript hooks so that web application javascript interface can update the client on upload progress.  If the the upload connection is reset a ajax request on the client can request &amp;quot;bytes upload so far&amp;quot; from the server and have oggPusher begin uploading from that point in the temporary local ogg file. A local file hash could be rechecked to insure the local file has not changed. The server can then do a simple join on the uploaded pieces, enabling reusable uploads over existing http protocol. If the server does not support resumes the file will be uploaded from the start.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Features for initial Release:&#039;&#039;&#039;&lt;br /&gt;
* A .xpi extension based on ffmpeg2theoa that supports uploading of local files of any type that ffmpeg accepts.&lt;br /&gt;
* Supports two modes of operation&lt;br /&gt;
** zero server side config where oggPusher just gives the option of uploading theora video where it finds a form file input type.&lt;br /&gt;
** server side config where the server/service hooks into oggPusher for extra functionality, like resuming transferrer and status updates integrated with the web application.&lt;br /&gt;
* A simple javascript api for controlling ffmpeg2theora encoding options. These options will be pre-demerited and javascript input will be scrubbed to avoid client side security risks.&lt;br /&gt;
* A set of javascript hooks for oggPusher that expose upload progress, encoding progress and transcoding errors.&lt;br /&gt;
* A sample server side implementation using php/html/javascript for grabbing ogg files from oggPusher.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Future Feature RoadMap:&#039;&#039;&#039;&lt;br /&gt;
Once the basic implementation has been deployed the following features will be targeted for future versions:&lt;br /&gt;
&lt;br /&gt;
* Integration with popular open source CMS&#039;s first target is mediaWiki.&lt;br /&gt;
* Hooks for connecting into &amp;quot;live&amp;quot; interfaces such as firewire digital video input or USB web cams.&lt;br /&gt;
** Extend oggfwd and server side components for in browser live streaming to web services.&lt;br /&gt;
* Extend to support ffmpeg2Dirac and future open source media codecs.&lt;br /&gt;
* Enable javascript hooks for grabbing highquality jpg or png screen grabs from the original source to be uploaded alongside the encoded video.&lt;br /&gt;
* Enable Bittorrent uploads&lt;br /&gt;
&lt;br /&gt;
===XSPF support in oggenc and ogg123 applications===&lt;br /&gt;
&lt;br /&gt;
Mentor: Ivo Emanuel Gonçalves&amp;lt;br/&amp;gt;&lt;br /&gt;
Existing Feature Set: oggenc and ogg123 are part of a toolset named vorbis-tools, where oggenc is a Vorbis encoder and ogg123 an audio player.  XSPF is a XML-based playlist format, extensible, but simple and efficient.&lt;br /&gt;
&lt;br /&gt;
Proposed Development: this project would extend those two applications (oggenc and ogg123) to support XSPF.  Namely, oggenc would be able to generate a playlist from the encoded files, and ogg123 would be able to parse a playlist for supported media for playback.  This is a C project, with the intention of using code from or actually linking to the BSD-licensed libSpiff, which is a C++ XSPF library.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===php_annodex: wrapper to libannodex or liboggz for doing media stuff===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Silvia Pfeiffer ... or anyone else with an a php background e.g. Michael Dale&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What is it?&#039;&#039;&#039;&lt;br /&gt;
Direct interaction with Ogg video and audio files from within a Web scripting language is key to providing further support to existing and new Web media applications. php_annodex can e.g. be used to extend Drupal, MediaWiki and other php-based applications with function calls to control opening, closing, seeking, playing, pausing, telling position and similar interactions with audio/video. Further, since Annodex has CMML for time-aligned annotations, hyperlinks to other places, and textual descriptions (such as captions) can be accessed and used through php_annodex.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What is the project?&#039;&#039;&#039;&lt;br /&gt;
An initial version of [http://annodex.net/software/phpannodex/index.html php_annodex exists], but it is incomplete and not up-to-date. This is in comparison with such support in python through [http://annodex.net/taxonomy_menu/1/19 pyannodex]. A GSoC student would be expected to bring the support for Xiph and Annodex technology in php_annodex up-to-date. In addition, he/she could extend this work by also implementing media support in a plugin, e.g. the Drupal module [http://annodex.net/software/phpannodex/index.html Acidfree]. php_annodex is simply a php wrapper around the C-libraries libannodex and liboggz. It may suffice to just focus on liboggz.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===ruby_annodex: wrapper to libannodex or liboggz for doing media stuff===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Silvia Pfeiffer&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What is it?&#039;&#039;&#039;&lt;br /&gt;
Direct interaction with Ogg video and audio files from within a Web scripting language is key to providing further support to existing and new Web media applications. ruby_annodex can e.g. be used to extend rails with function calls to control opening, closing, seeking, playing, pausing, telling position and similar interactions with audio/video. Further, since Annodex has CMML for time-aligned annotations, hyperlinks to other places, and textual descriptions (such as captions) can be accessed and used through ruby_annodex.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What is the project?&#039;&#039;&#039;&lt;br /&gt;
A python wrapper of similar type called [http://annodex.net/taxonomy_menu/1/19 pyannodex] exists. The ruby_annodex wrapper should provide similar functionality to ruby, in particular with a view of using it from within rails for the development of Web applications. Development of an example application in ruby on rails would be part of this. Extension of this project to include media support into a ruby-based CMS is possible.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Using ROE to create multi-track Ogg files===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Silvia Pfeiffer ... and anyone else interested in ROE, e.g. Ralph Giles, Conrad Parker, Michael Dale, Shane Stephens&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What is it?&#039;&#039;&#039;&lt;br /&gt;
[http://trac.annodex.net/wiki/MovieDescriptionLanguage ROE] is a small XML description language for multi-track media files. It can be used for authoring multi-track media files from separate physical files on disk. It can also be used on a Web server to dynamically create multi-track media resources where the tracks are selected through the request from the client.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What is the project?&#039;&#039;&#039;&lt;br /&gt;
In this project, we only implement and experiment with the file multiplexing side of things. The ROE specification is very new and potentially incomplete, so part of the project will be to validate this specification. The other part will be to create an authoring tool that can take a ROE file, parse it, pull in all the input audio, video, text etc files and create an Ogg file with a Skeleton that contains the equivalent of ROE inside the binary file. The project will start with a focus on multiplexing vorbis audio and theora video, but also include speex, FLAC, CMML, and possibly MNG data. If this is achieved in a short time frame, the project can continue onto developing support for these multi-track files in e.g. vlc or ffmpeg. This can even extend to providing a full tool-chain from authoring captions for a video file, to creating the respective multitrack Ogg file, and finally to playing them back inside vlc where the captions are shown as overlays.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SHARE application for the Spread Open Media project===&lt;br /&gt;
&lt;br /&gt;
Mentor: Ivo Emanuel Gonçalves&amp;lt;br/&amp;gt;&lt;br /&gt;
Existing Feature Set: Spread Open Media is a community project to promote the different free formats for multimedia and otherwise.  SHARE is a pratical step to build on this community and spread more files.&lt;br /&gt;
&lt;br /&gt;
Proposed Development: SHARE is intended to be a PHP project.  We do not discard the possibility of using Rails or Python, but the current SOM server does not support these.  SHARE will be a WebJay-like clone, as in users will be able to register, vote, comment and upload their own XSPF playlists.  Basically, it is a playlist sharing application.  Using OpenID for registration and Cortado (an existing Java applet) for playback would be welcome additions.&lt;br /&gt;
&lt;br /&gt;
=== Cross-platform Xiph encoder wrapper in qt4 ===&lt;br /&gt;
&lt;br /&gt;
Mentor: Not specified yet&amp;lt;br/&amp;gt;&lt;br /&gt;
Existing Feature Set: qt4 is a cross-platform C++ widget toolkit, which makes it easy to create GUI programs.  Xiph has encoders for all of its main formats, but they are command line only, which a big no-no for the average user.&lt;br /&gt;
&lt;br /&gt;
Proposed Development: The idea is to create a qt4 wrapper around those encoders to make it easier for anyone to encode media into Vorbis, Speex, Theora and FLAC.  This would likely boost the popularity of said formats tremendously.&lt;br /&gt;
&lt;br /&gt;
===Dirac support in liboggplay and liboggz===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentor:&#039;&#039;&#039; ??&lt;br /&gt;
&lt;br /&gt;
Right now [http://wiki.xiph.org/index.php/OggPlay liboggplay] only support Theora video. &lt;br /&gt;
Your aim for this project is to add support for [http://dirac.sourceforge.net/ Dirac],&lt;br /&gt;
this should be done using [http://www.diracvideo.org/ libschrodinger].&lt;br /&gt;
Doing this, you will add OggDirac support to the OggPlay Browser Plugin and the upcoming &amp;lt;video&amp;gt; tag support in Firefox.&lt;br /&gt;
&lt;br /&gt;
== Guidelines for Applying ==&lt;br /&gt;
&lt;br /&gt;
Remember that many people will apply to work on the Summer of Code.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that those of us evaluating your application do not know you, we do not know what kind of &lt;br /&gt;
experience you have, we do not know what you have done in the past and we have to pick the best people &lt;br /&gt;
suited for a particular task.&lt;br /&gt;
&lt;br /&gt;
Hence, it is very important that you tell us in your email why you should be considered to implement a &lt;br /&gt;
particular project. Please use the application template at [[Summer of Code Applications]] as a starting point.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
*[[Todo]]&lt;br /&gt;
*[[Bounties]]&lt;br /&gt;
*[[CodingGuidelines]]&lt;br /&gt;
*[[MIT approach to design and implementation]]&lt;br /&gt;
*[[How to do a release]]&lt;br /&gt;
*[[Summer of Code 2007]]&lt;br /&gt;
*[[Summer of Code 2006]]&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=ROE&amp;diff=9801</id>
		<title>ROE</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=ROE&amp;diff=9801"/>
		<updated>2008-12-19T16:34:37Z</updated>

		<summary type="html">&lt;p&gt;Mdale: /* ROE in Use */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
ROE (Rich Open multitrack media Exposition) is a way of describing the relationships between tracks of media in a stream. It is used to group tracks which have similar purpose and to identify alternatives.&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
&lt;br /&gt;
== Authoring ==&lt;br /&gt;
One use of ROE is to author a multi-track audio-visual stream from multiple input files. In this document, we present a description of how to use ROE to author multi-track Ogg files.&lt;br /&gt;
&lt;br /&gt;
== Dynamic Web Requests ==&lt;br /&gt;
Another use of ROE is in a Web client-server scenario. The Web server uses ROE as a means of representing the different tracks that are available for a multi-track Web resource. A Web client may not require all available tracks to present the resource to the user. It may decide to request the ROE representation first and then request only a subset of tracks from the server, e.g. only the English soundtrack. Or it may directly request particular tracks only. The server will use the request from the client to dynamically compose a multi-track stream with the requested tracks and mandatory tracks and serve this to satisfy the resource request.&lt;br /&gt;
&lt;br /&gt;
== ROE in Use ==&lt;br /&gt;
A draft version of the spec is in use in the mediaWiki extension [http://metavid.org/w/index.php/MetaVidWiki MetaVidWiki]. This runs on the site [http://metavid.org metavid.org] and is used for remote embeding. In [http://metavid-mike.blogspot.com/ this blog] for example all the clips refrence a single roe file to expose multiple video tracks and text transcripts. [http://metavid.org/w/index.php?title=Special:MvExportStream&amp;amp;feed_format=roe&amp;amp;stream_name=House_proceeding_06-09-08_01&amp;amp;t=0%3A01%3A38%2F0%3A10%3A00 Sample ROE output] from metavid&lt;br /&gt;
&lt;br /&gt;
= The ROE model =&lt;br /&gt;
&lt;br /&gt;
Here we describe two representations of ROE: that of ROE XML, and that of ROE in Ogg Skeleton. Each representation is capable of entirely encoding the relationships of the ROE model, such that it is possible to losslessly convert between them.&lt;br /&gt;
&lt;br /&gt;
= ROE XML =&lt;br /&gt;
&lt;br /&gt;
ROE XML is a XML markup language that describes a hierarchical serialization of the ROE model.&lt;br /&gt;
&lt;br /&gt;
A ROE XML file is an instance document of the [http://svn.annodex.net/standards/roe/roe_1_0.xsd ROE XML schema].&lt;br /&gt;
&lt;br /&gt;
It is composed of a &amp;lt;head&amp;gt; tag followed by a &amp;lt;body&amp;gt; tag. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Head Element ==&lt;br /&gt;
&lt;br /&gt;
=== Head Tags ===&lt;br /&gt;
The &amp;lt;head&amp;gt; tag is optional and may optionally contain:&lt;br /&gt;
&lt;br /&gt;
* a &amp;lt;title&amp;gt; tag to provide a textual description for the multi-track stream,&lt;br /&gt;
* a set of &amp;lt;link&amp;gt; tags that provide an alternative representation of the multi-track stream, e.g. as a html document,&lt;br /&gt;
* a &amp;lt;img&amp;gt; tag to provide a representative thumbnail for the multi-track stream,&lt;br /&gt;
* a set of &amp;lt;meta&amp;gt; tags that provide structured name-value annotations of the multi-track stream,&lt;br /&gt;
* a &amp;lt;base&amp;gt; tag to provide a base URI for resources referred to in the ROE file, and&lt;br /&gt;
* a set of &amp;lt;profile&amp;gt; tags that allows description of so-called track profiles.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;title&amp;gt;, &amp;lt;link&amp;gt;, &amp;lt;meta&amp;gt;, and &amp;lt;base&amp;gt; tags are taken out of [http://www.w3.org/TR/xhtml1-schema/ XHTML] and serve the same purpose as they serve there.&lt;br /&gt;
&lt;br /&gt;
=== Track Profiles ===&lt;br /&gt;
A track profile is a combination of tracks that is pre-defined within the ROE file and can be accessed by Web clients or authoring applications directly. Examples of such profiles are the Director&#039;s cut, or the Australian version.&lt;br /&gt;
&lt;br /&gt;
A profile defines a list of references to the tracks of a media resource and possibly a selection from the alternative media sources of the track, to use for a particular pre-defined profile of the resource.&lt;br /&gt;
&lt;br /&gt;
To that end, the profile element has a subelement called &amp;quot;partial&amp;quot; which contains the ID of a selected track and potentially the ID of a selected alternate media source for the track.&lt;br /&gt;
&lt;br /&gt;
An example profile is:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;profile name=&amp;quot;director&#039;s cut&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;partial track=&amp;quot;v&amp;quot; select=&amp;quot;v1&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;partial track=&amp;quot;a&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/profile&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;head&amp;gt; tag essentially separates the profiles from the core document structure being provided in the &amp;lt;body&amp;gt; element.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Body Element ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;body&amp;gt; tag consists of a sequence of &amp;lt;track&amp;gt; elements that each describe a logical media track.&lt;br /&gt;
&lt;br /&gt;
=== The Track Tag ===&lt;br /&gt;
A media track may consist of one of:&lt;br /&gt;
&lt;br /&gt;
* a media source, such as a audio, video, or text stream described in a &amp;lt;mediaSource&amp;gt; tag,&lt;br /&gt;
* a sequence of media sources described in a &amp;lt;seq&amp;gt; tag with start and end times, or&lt;br /&gt;
* a set of alternate media sources described in a &amp;lt;switch&amp;gt; tag, only one of which can be selected.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;track&amp;gt; element contains a mandatory &amp;quot;provides&amp;quot; attribute, which introduces a virtual label such as &amp;quot;commentary&amp;quot;, &amp;quot;video&amp;quot;, &amp;quot;audio&amp;quot;, &amp;quot;textoverlay&amp;quot;, &amp;quot;closedcaption&amp;quot;, &amp;quot;logo&amp;quot;, or &amp;quot;scoreboard&amp;quot;. The track provides that kind of content.&lt;br /&gt;
&lt;br /&gt;
=== The Switch Tag ===&lt;br /&gt;
The &amp;lt;switch&amp;gt; tag provides a choice between alternates, distinguished for a specific reason. The reason is given in the &amp;quot;distinction&amp;quot; attribute of the &amp;lt;switch&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
Inside a &amp;lt;switch&amp;gt; tag, the choices can be specified through the following means:&lt;br /&gt;
&lt;br /&gt;
* directly as a &amp;lt;mediaSource&amp;gt;,&lt;br /&gt;
* as a sequence of media sources in a &amp;lt;seq&amp;gt; element, or&lt;br /&gt;
* as the outcome of another &amp;lt;switch&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
Example &amp;lt;switch&amp;gt; element:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;switch distinction=&amp;quot;language&amp;quot; default=&amp;quot;a3&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;switch id=&amp;quot;a1&amp;quot; distinction=&amp;quot;bitrate&amp;quot; default=&amp;quot;a1b1&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;mediaSource id=&amp;quot;a1b1&amp;quot; lang=&amp;quot;en&amp;quot; content-type=&amp;quot;audio/vorbis&amp;quot; src=&amp;quot;http://example.com/lang1b1.oga&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;mediaSource id=&amp;quot;a1b2&amp;quot; lang=&amp;quot;en&amp;quot; content-type=&amp;quot;audio/vorbis&amp;quot; src=&amp;quot;http://example.com/lang1b2.oga&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/switch&amp;gt;&lt;br /&gt;
    &amp;lt;mediaSource id=&amp;quot;a2&amp;quot; lang=&amp;quot;de&amp;quot; content-type=&amp;quot;audio/vorbis&amp;quot; src=&amp;quot;http://example.com/lang2.oga&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;seq id=&amp;quot;a3&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mediaSource id=&amp;quot;a3a&amp;quot; lang=&amp;quot;fr&amp;quot; content-type=&amp;quot;audio/vorbis&amp;quot; src=&amp;quot;http://example.com/lang3a.oga&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;mediaSource id=&amp;quot;a3b&amp;quot; lang=&amp;quot;fr&amp;quot; content-type=&amp;quot;audio/vorbis&amp;quot; src=&amp;quot;http://example.com/lang3b.oga&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/seq&amp;gt;&lt;br /&gt;
  &amp;lt;/switch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, we have a choice between three languages: en, de and fr.&lt;br /&gt;
The English language track also comes in two different bitrates.&lt;br /&gt;
The French language track comes in two different files that should be played in sequence&lt;br /&gt;
&lt;br /&gt;
=== Inline XML files ===&lt;br /&gt;
Some media source elements are XML documents themselves. These can be represented inline in a ROE file. The purpose of this is to contain all or some the annotation information of a media resource inside one XML file. Thus, the &amp;quot;inline&amp;quot; attribute can have the values &amp;quot;false&amp;quot;, &amp;quot;partial&amp;quot; or &amp;quot;full&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
An example inline XML file is the use of CMML inside a ROE track:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;track id=&amp;quot;t1&amp;quot; provides=&amp;quot;caption&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;mediaSource id=&amp;quot;c&amp;quot; src=&amp;quot;http://example.com/cmml1.cmml&amp;quot; inline=&amp;quot;partial&amp;quot; content-type=&amp;quot;text/cmml&amp;quot; &amp;gt;&lt;br /&gt;
      &amp;lt;cmml role=&amp;quot;caption&amp;quot; xmlns:cmml=&amp;quot;http://www.annodex.org/spec/cmml/cmml40&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;cmml:head&amp;gt;&lt;br /&gt;
          &amp;lt;cmml:title&amp;gt;random 1&amp;lt;/cmml:title&amp;gt;&lt;br /&gt;
        &amp;lt;/cmml:head&amp;gt;&lt;br /&gt;
        &amp;lt;cmml:clip start=&amp;quot;t1&amp;quot; end=&amp;quot;t2&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;cmml:body&amp;gt;&lt;br /&gt;
            &amp;lt;html:p&amp;gt;&amp;lt;html:span&amp;gt;rillian:&amp;lt;/html:span&amp;gt;FOMS rocks&amp;lt;/html:p&amp;gt;&lt;br /&gt;
          &amp;lt;/cmml:body&amp;gt;&lt;br /&gt;
        &amp;lt;/cmml:clip&amp;gt;&lt;br /&gt;
      &amp;lt;/cmml&amp;gt;&lt;br /&gt;
    &amp;lt;/mediaSource&amp;gt;&lt;br /&gt;
  &amp;lt;/track&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== An example ROE XML file ==&lt;br /&gt;
&lt;br /&gt;
Putting it all together, here is an example of a ROE XML file:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;xs:schema targetNamespace=&amp;quot;http://www.xiph.org/roe1.0&amp;quot;&lt;br /&gt;
             xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLS&lt;br /&gt;
             xmlns:html=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;br /&gt;
             elementFormDefault=&amp;quot;qualified&amp;quot;&lt;br /&gt;
             attributeFormDefault=&amp;quot;unqualified&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;ROE&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
      &amp;lt;link id=&amp;quot;html_linkback&amp;quot; rel=&amp;quot;alternate&amp;quot; type=&amp;quot;text/html&amp;quot; href=&amp;quot;http://example.com/full_video.html&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;img id=&amp;quot;stream_thumb&amp;quot; src=&amp;quot;http://example.com/full_video.jpg&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;title&amp;gt;Example video&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;profile name=&amp;quot;director&#039;s cut&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;partial track=&amp;quot;v&amp;quot; select=&amp;quot;v1&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;partial track=&amp;quot;a&amp;quot; /&amp;gt;			&lt;br /&gt;
      &amp;lt;/profile&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
      &amp;lt;track id=&amp;quot;v&amp;quot; provides=&amp;quot;video&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;switch distinction=&amp;quot;angle&amp;quot; default=&amp;quot;v1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;mediaSource id=&amp;quot;v1&amp;quot; content-type=&amp;quot;video/theora&amp;quot; src=&amp;quot;http://example.com/angle1.ogv?track=v1&amp;amp;amp;t=t1/t2&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;mediaSource id=&amp;quot;v2&amp;quot; content-type=&amp;quot;video/theora&amp;quot; src=&amp;quot;http://example.com/angle2.ogv&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/switch&amp;gt;&lt;br /&gt;
      &amp;lt;/track&amp;gt;&lt;br /&gt;
      &amp;lt;track id=&amp;quot;a&amp;quot; provides=&amp;quot;audio&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;switch distinction=&amp;quot;Content-Language&amp;quot; default=&amp;quot;a3&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;switch id=&amp;quot;a1&amp;quot; distinction=&amp;quot;bitrate&amp;quot; default=&amp;quot;a1b1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;mediaSource id=&amp;quot;a1b1&amp;quot; lang=&amp;quot;en&amp;quot; content-type=&amp;quot;audio/vorbis&amp;quot; src=&amp;quot;http://example.com/lang1b1.oga&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;mediaSource id=&amp;quot;a1b2&amp;quot; lang=&amp;quot;en&amp;quot; content-type=&amp;quot;audio/vorbis&amp;quot; src=&amp;quot;http://example.com/lang1b2.oga&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/switch&amp;gt;&lt;br /&gt;
          &amp;lt;mediaSource id=&amp;quot;a2&amp;quot; lang=&amp;quot;de&amp;quot; content-type=&amp;quot;audio/vorbis&amp;quot; src=&amp;quot;http://example.com/lang2.oga&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;seq id=&amp;quot;a3&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;mediaSource id=&amp;quot;a3a&amp;quot; lang=&amp;quot;fr&amp;quot; content-type=&amp;quot;audio/vorbis&amp;quot; src=&amp;quot;http://example.com/lang3a.oga&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;mediaSource id=&amp;quot;a3b&amp;quot; lang=&amp;quot;fr&amp;quot; content-type=&amp;quot;audio/vorbis&amp;quot; src=&amp;quot;http://example.com/lang3b.org&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/seq&amp;gt;&lt;br /&gt;
        &amp;lt;/switch&amp;gt;&lt;br /&gt;
      &amp;lt;/track&amp;gt;&lt;br /&gt;
      &amp;lt;track id=&amp;quot;t&amp;quot; provides=&amp;quot;text overlay&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;switch distinction=&amp;quot;Content-Language&amp;quot; default=&amp;quot;t1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;mediaSource id=&amp;quot;t1&amp;quot; lang=&amp;quot;en&amp;quot; content-type=&amp;quot;text/cmml&amp;quot; src=&amp;quot;http://example.com/transcript1.cmml&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;mediaSource id=&amp;quot;t2&amp;quot; lang=&amp;quot;de&amp;quot; content-type=&amp;quot;text/cmml&amp;quot; src=&amp;quot;http://example.com/transcript2.cmml&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;mediaSource id=&amp;quot;t3&amp;quot; lang=&amp;quot;fr&amp;quot; content-type=&amp;quot;text/cmml&amp;quot; src=&amp;quot;http://example.com/transcript3.cmml&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/switch&amp;gt;&lt;br /&gt;
      &amp;lt;/track&amp;gt;&lt;br /&gt;
      &amp;lt;track id=&amp;quot;l&amp;quot; provides=&amp;quot;logo&amp;quot; default=&amp;quot;O1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;seq&amp;gt;&lt;br /&gt;
      	  &amp;lt;mediaSource id=&amp;quot;O1&amp;quot; content-type=&amp;quot;application/ogg&amp;quot; src=&amp;quot;http://example.com/mng.ogx?track=1&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;mediaSource id=&amp;quot;O2&amp;quot; content-type=&amp;quot;application/ogg&amp;quot; src=&amp;quot;http://example.com/mng.ogx?track=2&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/seq&amp;gt;&lt;br /&gt;
      &amp;lt;/track&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
  &amp;lt;/ROE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Representation in Skeleton =&lt;br /&gt;
&lt;br /&gt;
When the relationships described by ROE are written into an Ogg stream, they are encoded using the message header fields of Ogg Skeleton fisbones for each track. One of the primary design goals for fisbone headers is to minimize the need for global information to be stored in a stream. Each track&#039;s fisbone contains headers describing only itself and its relationship to other tracks in the stream. This allows tracks to be inserted or removed at the Ogg level without needing to modify any data in individual headers.&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
Relationships between tracks are given by the following headers:&lt;br /&gt;
&lt;br /&gt;
=== Provides ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Provides&#039;&#039; introduces a virtual label such as &amp;quot;commentary&amp;quot;, which this track provides. Many tracks may provide the same such label, and as long as one is present then a dependency on that label can be satisfied.&lt;br /&gt;
&lt;br /&gt;
=== Depends ===&lt;br /&gt;
&lt;br /&gt;
This declares that it is not valid to include this track in a stream unless the track it depends on is present. An example use of this might be the generic captioning of sound effects for the deaf, which may not make sense unless the captioning of speech (in an appropriate language) is also rendered.&lt;br /&gt;
&#039;&#039;Depends&#039;&#039; refers to either a virtual label provided by another track, or an explicit track ID.&lt;br /&gt;
&lt;br /&gt;
When removing a track from a file, any other tracks dependent on it must also be removed.&lt;br /&gt;
&lt;br /&gt;
=== Recommends ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Recommends&#039;&#039; refers to either a virtual label provided by another track, or an explicit track ID.&lt;br /&gt;
&lt;br /&gt;
=== Suggests ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Suggests&#039;&#039; refers to either a virtual label provided by another track, or an explicit track ID.&lt;br /&gt;
&lt;br /&gt;
=== Conflicts ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Conflicts&#039;&#039; refers to either a virtual label provided by another track, or an explicit track ID.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Serving Suggestions ==&lt;br /&gt;
&lt;br /&gt;
=== Disposition ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= HTTP-style message headers for client-server negotiation =&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=ROE&amp;diff=9560</id>
		<title>ROE</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=ROE&amp;diff=9560"/>
		<updated>2008-11-04T19:10:36Z</updated>

		<summary type="html">&lt;p&gt;Mdale: added usag example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
ROE (Rich Open multitrack media Exposition) is a way of describing the relationships between tracks of media in a stream. It is used to group tracks which have similar purpose and to identify alternatives.&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
&lt;br /&gt;
== Authoring ==&lt;br /&gt;
One use of ROE is to author a multi-track audio-visual stream from multiple input files. In this document, we present a description of how to use ROE to author multi-track Ogg files.&lt;br /&gt;
&lt;br /&gt;
== Dynamic Web Requests ==&lt;br /&gt;
Another use of ROE is in a Web client-server scenario. The Web server uses ROE as a means of representing the different tracks that are available for a multi-track Web resource. A Web client may not require all available tracks to present the resource to the user. It may decide to request the ROE representation first and then request only a subset of tracks from the server, e.g. only the English soundtrack. Or it may directly request particular tracks only. The server will use the request from the client to dynamically compose a multi-track stream with the requested tracks and mandatory tracks and serve this to satisfy the resource request.&lt;br /&gt;
&lt;br /&gt;
== ROE in Use ==&lt;br /&gt;
A draft version of the spec is in use in media CMS&#039;s such as [http://metavid.org/w/index.php/MetaVidWiki MetaVidWiki]. The Dynamic web request senerio is best illustrated by the mv_embed library remote embedding clips from the metavid archive. This can be seen in [http://metavid-mike.blogspot.com/ this blog] demonstrating its usage. If you view source you can see the roe xml that is making ogg, flash video clips available along with multiple timed text tracks in CMML.&lt;br /&gt;
&lt;br /&gt;
= The ROE model =&lt;br /&gt;
&lt;br /&gt;
Here we describe two representations of ROE: that of ROE XML, and that of ROE in Ogg Skeleton. Each representation is capable of entirely encoding the relationships of the ROE model, such that it is possible to losslessly convert between them.&lt;br /&gt;
&lt;br /&gt;
= ROE XML =&lt;br /&gt;
&lt;br /&gt;
ROE XML is a XML markup language that describes a hierarchical serialization of the ROE model.&lt;br /&gt;
&lt;br /&gt;
A ROE XML file is an instance document of the [http://svn.annodex.net/standards/roe/roe_1_0.xsd ROE XML schema].&lt;br /&gt;
&lt;br /&gt;
It is composed of a &amp;lt;head&amp;gt; tag followed by a &amp;lt;body&amp;gt; tag. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Head Element ==&lt;br /&gt;
&lt;br /&gt;
=== Head Tags ===&lt;br /&gt;
The &amp;lt;head&amp;gt; tag is optional and may optionally contain:&lt;br /&gt;
&lt;br /&gt;
* a &amp;lt;title&amp;gt; tag to provide a textual description for the multi-track stream,&lt;br /&gt;
* a set of &amp;lt;link&amp;gt; tags that provide an alternative representation of the multi-track stream, e.g. as a html document,&lt;br /&gt;
* a &amp;lt;img&amp;gt; tag to provide a representative thumbnail for the multi-track stream,&lt;br /&gt;
* a set of &amp;lt;meta&amp;gt; tags that provide structured name-value annotations of the multi-track stream,&lt;br /&gt;
* a &amp;lt;base&amp;gt; tag to provide a base URI for resources referred to in the ROE file, and&lt;br /&gt;
* a set of &amp;lt;profile&amp;gt; tags that allows description of so-called track profiles.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;title&amp;gt;, &amp;lt;link&amp;gt;, &amp;lt;meta&amp;gt;, and &amp;lt;base&amp;gt; tags are taken out of [http://www.w3.org/TR/xhtml1-schema/ XHTML] and serve the same purpose as they serve there.&lt;br /&gt;
&lt;br /&gt;
=== Track Profiles ===&lt;br /&gt;
A track profile is a combination of tracks that is pre-defined within the ROE file and can be accessed by Web clients or authoring applications directly. Examples of such profiles are the Director&#039;s cut, or the Australian version.&lt;br /&gt;
&lt;br /&gt;
A profile defines a list of references to the tracks of a media resource and possibly a selection from the alternative media sources of the track, to use for a particular pre-defined profile of the resource.&lt;br /&gt;
&lt;br /&gt;
To that end, the profile element has a subelement called &amp;quot;partial&amp;quot; which contains the ID of a selected track and potentially the ID of a selected alternate media source for the track.&lt;br /&gt;
&lt;br /&gt;
An example profile is:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;profile name=&amp;quot;director&#039;s cut&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;partial track=&amp;quot;v&amp;quot; select=&amp;quot;v1&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;partial track=&amp;quot;a&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/profile&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;head&amp;gt; tag essentially separates the profiles from the core document structure being provided in the &amp;lt;body&amp;gt; element.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Body Element ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;body&amp;gt; tag consists of a sequence of &amp;lt;track&amp;gt; elements that each describe a logical media track.&lt;br /&gt;
&lt;br /&gt;
=== The Track Tag ===&lt;br /&gt;
A media track may consist of one of:&lt;br /&gt;
&lt;br /&gt;
* a media source, such as a audio, video, or text stream described in a &amp;lt;mediaSource&amp;gt; tag,&lt;br /&gt;
* a sequence of media sources described in a &amp;lt;seq&amp;gt; tag with start and end times, or&lt;br /&gt;
* a set of alternate media sources described in a &amp;lt;switch&amp;gt; tag, only one of which can be selected.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;track&amp;gt; element contains a mandatory &amp;quot;provides&amp;quot; attribute, which introduces a virtual label such as &amp;quot;commentary&amp;quot;, &amp;quot;video&amp;quot;, &amp;quot;audio&amp;quot;, &amp;quot;textoverlay&amp;quot;, &amp;quot;closedcaption&amp;quot;, &amp;quot;logo&amp;quot;, or &amp;quot;scoreboard&amp;quot;. The track provides that kind of content.&lt;br /&gt;
&lt;br /&gt;
=== The Switch Tag ===&lt;br /&gt;
The &amp;lt;switch&amp;gt; tag provides a choice between alternates, distinguished for a specific reason. The reason is given in the &amp;quot;distinction&amp;quot; attribute of the &amp;lt;switch&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
Inside a &amp;lt;switch&amp;gt; tag, the choices can be specified through the following means:&lt;br /&gt;
&lt;br /&gt;
* directly as a &amp;lt;mediaSource&amp;gt;,&lt;br /&gt;
* as a sequence of media sources in a &amp;lt;seq&amp;gt; element, or&lt;br /&gt;
* as the outcome of another &amp;lt;switch&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
Example &amp;lt;switch&amp;gt; element:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;switch distinction=&amp;quot;language&amp;quot; default=&amp;quot;a3&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;switch id=&amp;quot;a1&amp;quot; distinction=&amp;quot;bitrate&amp;quot; default=&amp;quot;a1b1&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;mediaSource id=&amp;quot;a1b1&amp;quot; lang=&amp;quot;en&amp;quot; content-type=&amp;quot;audio/vorbis&amp;quot; src=&amp;quot;http://example.com/lang1b1.oga&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;mediaSource id=&amp;quot;a1b2&amp;quot; lang=&amp;quot;en&amp;quot; content-type=&amp;quot;audio/vorbis&amp;quot; src=&amp;quot;http://example.com/lang1b2.oga&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/switch&amp;gt;&lt;br /&gt;
    &amp;lt;mediaSource id=&amp;quot;a2&amp;quot; lang=&amp;quot;de&amp;quot; content-type=&amp;quot;audio/vorbis&amp;quot; src=&amp;quot;http://example.com/lang2.oga&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;seq id=&amp;quot;a3&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;mediaSource id=&amp;quot;a3a&amp;quot; lang=&amp;quot;fr&amp;quot; content-type=&amp;quot;audio/vorbis&amp;quot; src=&amp;quot;http://example.com/lang3a.oga&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;mediaSource id=&amp;quot;a3b&amp;quot; lang=&amp;quot;fr&amp;quot; content-type=&amp;quot;audio/vorbis&amp;quot; src=&amp;quot;http://example.com/lang3b.oga&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/seq&amp;gt;&lt;br /&gt;
  &amp;lt;/switch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, we have a choice between three languages: en, de and fr.&lt;br /&gt;
The English language track also comes in two different bitrates.&lt;br /&gt;
The French language track comes in two different files that should be played in sequence&lt;br /&gt;
&lt;br /&gt;
=== Inline XML files ===&lt;br /&gt;
Some media source elements are XML documents themselves. These can be represented inline in a ROE file. The purpose of this is to contain all or some the annotation information of a media resource inside one XML file. Thus, the &amp;quot;inline&amp;quot; attribute can have the values &amp;quot;false&amp;quot;, &amp;quot;partial&amp;quot; or &amp;quot;full&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
An example inline XML file is the use of CMML inside a ROE track:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;track id=&amp;quot;t1&amp;quot; provides=&amp;quot;caption&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;mediaSource id=&amp;quot;c&amp;quot; src=&amp;quot;http://example.com/cmml1.cmml&amp;quot; inline=&amp;quot;partial&amp;quot; content-type=&amp;quot;text/cmml&amp;quot; &amp;gt;&lt;br /&gt;
      &amp;lt;cmml role=&amp;quot;caption&amp;quot; xmlns:cmml=&amp;quot;http://www.annodex.org/spec/cmml/cmml40&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;cmml:head&amp;gt;&lt;br /&gt;
          &amp;lt;cmml:title&amp;gt;random 1&amp;lt;/cmml:title&amp;gt;&lt;br /&gt;
        &amp;lt;/cmml:head&amp;gt;&lt;br /&gt;
        &amp;lt;cmml:clip start=&amp;quot;t1&amp;quot; end=&amp;quot;t2&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;cmml:body&amp;gt;&lt;br /&gt;
            &amp;lt;html:p&amp;gt;&amp;lt;html:span&amp;gt;rillian:&amp;lt;/html:span&amp;gt;FOMS rocks&amp;lt;/html:p&amp;gt;&lt;br /&gt;
          &amp;lt;/cmml:body&amp;gt;&lt;br /&gt;
        &amp;lt;/cmml:clip&amp;gt;&lt;br /&gt;
      &amp;lt;/cmml&amp;gt;&lt;br /&gt;
    &amp;lt;/mediaSource&amp;gt;&lt;br /&gt;
  &amp;lt;/track&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== An example ROE XML file ==&lt;br /&gt;
&lt;br /&gt;
Putting it all together, here is an example of a ROE XML file:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;xs:schema targetNamespace=&amp;quot;http://www.xiph.org/roe1.0&amp;quot;&lt;br /&gt;
             xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLS&lt;br /&gt;
             xmlns:html=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;br /&gt;
             elementFormDefault=&amp;quot;qualified&amp;quot;&lt;br /&gt;
             attributeFormDefault=&amp;quot;unqualified&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;ROE&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
      &amp;lt;link id=&amp;quot;html_linkback&amp;quot; rel=&amp;quot;alternate&amp;quot; type=&amp;quot;text/html&amp;quot; href=&amp;quot;http://example.com/full_video.html&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;img id=&amp;quot;stream_thumb&amp;quot; src=&amp;quot;http://example.com/full_video.jpg&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;title&amp;gt;Example video&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;profile name=&amp;quot;director&#039;s cut&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;partial track=&amp;quot;v&amp;quot; select=&amp;quot;v1&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;partial track=&amp;quot;a&amp;quot; /&amp;gt;			&lt;br /&gt;
      &amp;lt;/profile&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
      &amp;lt;track id=&amp;quot;v&amp;quot; provides=&amp;quot;video&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;switch distinction=&amp;quot;angle&amp;quot; default=&amp;quot;v1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;mediaSource id=&amp;quot;v1&amp;quot; content-type=&amp;quot;video/theora&amp;quot; src=&amp;quot;http://example.com/angle1.ogv?track=v1&amp;amp;amp;t=t1/t2&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;mediaSource id=&amp;quot;v2&amp;quot; content-type=&amp;quot;video/theora&amp;quot; src=&amp;quot;http://example.com/angle2.ogv&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/switch&amp;gt;&lt;br /&gt;
      &amp;lt;/track&amp;gt;&lt;br /&gt;
      &amp;lt;track id=&amp;quot;a&amp;quot; provides=&amp;quot;audio&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;switch distinction=&amp;quot;Content-Language&amp;quot; default=&amp;quot;a3&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;switch id=&amp;quot;a1&amp;quot; distinction=&amp;quot;bitrate&amp;quot; default=&amp;quot;a1b1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;mediaSource id=&amp;quot;a1b1&amp;quot; lang=&amp;quot;en&amp;quot; content-type=&amp;quot;audio/vorbis&amp;quot; src=&amp;quot;http://example.com/lang1b1.oga&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;mediaSource id=&amp;quot;a1b2&amp;quot; lang=&amp;quot;en&amp;quot; content-type=&amp;quot;audio/vorbis&amp;quot; src=&amp;quot;http://example.com/lang1b2.oga&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/switch&amp;gt;&lt;br /&gt;
          &amp;lt;mediaSource id=&amp;quot;a2&amp;quot; lang=&amp;quot;de&amp;quot; content-type=&amp;quot;audio/vorbis&amp;quot; src=&amp;quot;http://example.com/lang2.oga&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;seq id=&amp;quot;a3&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;mediaSource id=&amp;quot;a3a&amp;quot; lang=&amp;quot;fr&amp;quot; content-type=&amp;quot;audio/vorbis&amp;quot; src=&amp;quot;http://example.com/lang3a.oga&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;mediaSource id=&amp;quot;a3b&amp;quot; lang=&amp;quot;fr&amp;quot; content-type=&amp;quot;audio/vorbis&amp;quot; src=&amp;quot;http://example.com/lang3b.org&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/seq&amp;gt;&lt;br /&gt;
        &amp;lt;/switch&amp;gt;&lt;br /&gt;
      &amp;lt;/track&amp;gt;&lt;br /&gt;
      &amp;lt;track id=&amp;quot;t&amp;quot; provides=&amp;quot;text overlay&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;switch distinction=&amp;quot;Content-Language&amp;quot; default=&amp;quot;t1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;mediaSource id=&amp;quot;t1&amp;quot; lang=&amp;quot;en&amp;quot; content-type=&amp;quot;text/cmml&amp;quot; src=&amp;quot;http://example.com/transcript1.cmml&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;mediaSource id=&amp;quot;t2&amp;quot; lang=&amp;quot;de&amp;quot; content-type=&amp;quot;text/cmml&amp;quot; src=&amp;quot;http://example.com/transcript2.cmml&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;mediaSource id=&amp;quot;t3&amp;quot; lang=&amp;quot;fr&amp;quot; content-type=&amp;quot;text/cmml&amp;quot; src=&amp;quot;http://example.com/transcript3.cmml&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/switch&amp;gt;&lt;br /&gt;
      &amp;lt;/track&amp;gt;&lt;br /&gt;
      &amp;lt;track id=&amp;quot;l&amp;quot; provides=&amp;quot;logo&amp;quot; default=&amp;quot;O1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;seq&amp;gt;&lt;br /&gt;
      	  &amp;lt;mediaSource id=&amp;quot;O1&amp;quot; content-type=&amp;quot;application/ogg&amp;quot; src=&amp;quot;http://example.com/mng.ogx?track=1&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;mediaSource id=&amp;quot;O2&amp;quot; content-type=&amp;quot;application/ogg&amp;quot; src=&amp;quot;http://example.com/mng.ogx?track=2&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/seq&amp;gt;&lt;br /&gt;
      &amp;lt;/track&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
  &amp;lt;/ROE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Representation in Skeleton =&lt;br /&gt;
&lt;br /&gt;
When the relationships described by ROE are written into an Ogg stream, they are encoded using the message header fields of Ogg Skeleton fisbones for each track. One of the primary design goals for fisbone headers is to minimize the need for global information to be stored in a stream. Each track&#039;s fisbone contains headers describing only itself and its relationship to other tracks in the stream. This allows tracks to be inserted or removed at the Ogg level without needing to modify any data in individual headers.&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
&lt;br /&gt;
Relationships between tracks are given by the following headers:&lt;br /&gt;
&lt;br /&gt;
=== Provides ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Provides&#039;&#039; introduces a virtual label such as &amp;quot;commentary&amp;quot;, which this track provides. Many tracks may provide the same such label, and as long as one is present then a dependency on that label can be satisfied.&lt;br /&gt;
&lt;br /&gt;
=== Depends ===&lt;br /&gt;
&lt;br /&gt;
This declares that it is not valid to include this track in a stream unless the track it depends on is present. An example use of this might be the generic captioning of sound effects for the deaf, which may not make sense unless the captioning of speech (in an appropriate language) is also rendered.&lt;br /&gt;
&#039;&#039;Depends&#039;&#039; refers to either a virtual label provided by another track, or an explicit track ID.&lt;br /&gt;
&lt;br /&gt;
When removing a track from a file, any other tracks dependent on it must also be removed.&lt;br /&gt;
&lt;br /&gt;
=== Recommends ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Recommends&#039;&#039; refers to either a virtual label provided by another track, or an explicit track ID.&lt;br /&gt;
&lt;br /&gt;
=== Suggests ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Suggests&#039;&#039; refers to either a virtual label provided by another track, or an explicit track ID.&lt;br /&gt;
&lt;br /&gt;
=== Conflicts ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Conflicts&#039;&#039; refers to either a virtual label provided by another track, or an explicit track ID.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Serving Suggestions ==&lt;br /&gt;
&lt;br /&gt;
=== Disposition ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= HTTP-style message headers for client-server negotiation =&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=List_of_Theora_videos&amp;diff=9555</id>
		<title>List of Theora videos</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=List_of_Theora_videos&amp;diff=9555"/>
		<updated>2008-11-03T20:57:57Z</updated>

		<summary type="html">&lt;p&gt;Mdale: /* Serial and Episodic */ removed dead link (opengov)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of sites where you can download videos encoded with [[Theora]].&lt;br /&gt;
&lt;br /&gt;
=== Serial and Episodic ===&lt;br /&gt;
;[http://www.geekentertainment.tv Geek Entertainment TV]: A weekly video-cast covering technology topics, in an interview format.  Many &#039;&#039;Ogg Theora&#039;&#039; format videos in the 2007 and prior archives.&lt;br /&gt;
;[http://www.internautas.tv/ INTERNAUTAS TELEVÍSION]: Spanish website with clips from Andaluzian tv station.  Content licensed under CC-BY-NC.&lt;br /&gt;
;[http://www.linux.com/ Linux.com]: All videos, after late-2007, are in &#039;&#039;Ogg Theora&#039;&#039; format.  There is an RSS feed available to be alerted to new videos, as they become available.&lt;br /&gt;
;[http://nikosapi.org/video/LAS/ Linux Action Show]: Video broadcast of the Linux Action Show during live recording.&lt;br /&gt;
;[http://metavid.org Metavid]: Archive of the House of Representatives and Senate (USA) floor footage. &lt;br /&gt;
;[http://video.indypgh.org Rustbelt TV]: [http://pittsburgh.indypgh.org Pittsburgh Indymedia&#039;s] TV program based on [http://radio.indypgh.org Rustbelt Radio] (audio available as ogg vorbis).&lt;br /&gt;
;[http://ryanishungry.com RyanIsHungry]: Features the stories of individuals hacking everyday life, with environmental sustainability.&lt;br /&gt;
;[http://revision3.com/thebroken/ thebroken]: Four technology episodes, from 2003 to 2006, that look at the computer hacker mentality.&lt;br /&gt;
;[http://www.thesourceshow.org/ the_source]: A video show providing news, reviews, and general discussion about open source initiatives, since 2006.&lt;br /&gt;
&lt;br /&gt;
=== Video Sharing Services ===&lt;br /&gt;
A list of video sharing websites which support the &#039;&#039;upload&#039;&#039; of Ogg files can be found on [http://en.wikipedia.org/wiki/Comparison_of_video_services#Upload_file_formats Wikipedia].  Below is a shorter list of video sharing websites which support the &#039;&#039;download&#039;&#039; of Ogg files.&lt;br /&gt;
;[http://blip.tv/search?q=ogg Blip.tv]: A video sharing website which allows the upload and the download of &#039;&#039;Ogg Theora&#039;&#039; files.&lt;br /&gt;
;[http://www.engagemedia.org/Members/okvideo/ogg-videos/ Engage Media]: A video sharing website which focuses on social justice and environmental issues in South East Asia.&lt;br /&gt;
;[http://theorasea.org/ Theora Sea]: A directory of online and free videos using [http://menguy.aymeric.free.fr/theora/ ITheora].&lt;br /&gt;
;[http://tinyvid.tv/ TinyVid]: An experimental Ogg video uploading site, which exists to test out usage of the HTML 5 video and audio elements with the Ogg codecs. You&#039;ll need a web browser that can playback Ogg media using &#039;&#039;video&#039;&#039; and &#039;&#039;audio&#039;&#039; tags, to display this video media.&lt;br /&gt;
;[http://v2v.cc/ V2V]: A video syndication network which uses only open source software, in order to provide free and equal access to the video source.&lt;br /&gt;
;[http://commons.wikimedia.org/ Wikimedia Commons]: An archive database of [http://commons.wikimedia.org/wiki/Special:Statistics more than 3,000,000] media files, to which anyone can contribute.&lt;br /&gt;
&lt;br /&gt;
=== Short Films ===&lt;br /&gt;
;[http://intanto.org/cgi-bin/lala.sh?video 11200 Undo]: A short movie about computer, religion, sex, glue and so on...&lt;br /&gt;
;[http://www.bigbuckbunny.org/index.php/download/ Big Buck Bunny]: An open content, short animated film by the Blender Institute. Also known as by the project codename, Peach. Available in 720p and smaller sizes.&lt;br /&gt;
;[http://wiki.xiph.org/index.php/Elephants_Dream Elephants Dream]: An open content, short animated film by the Blender Institute. Also known as by the project codename, Orange. [http://orange.blender.org/background More about the project...]&lt;br /&gt;
;[http://www.polycrystal.org/lego/movies.html Lego Movies]: Two short movies: &#039;&#039;A New Computer&#039;&#039; and &#039;&#039;Swim&#039;&#039;.&lt;br /&gt;
;[http://www.flashingtwelve.brickfilms.com/Website/films.html More Lego Movies]: Submissions from a Theora-only animation contest.&lt;br /&gt;
;[http://dekku.blogspot.com/ No Fat Clips!!!]: Short films, music videos, hip commercials, and other kinds of short visual entertainment.  Updated daily.  (English and Italian language) &lt;br /&gt;
;[http://www.naomiklein.org/shock-doctrine/short-film Shock Doctrine]: A short film by Alfonso Cuarón and Naomi Klein, directed by Jonás Cuarón.&lt;br /&gt;
;[http://www.archive.org/details/VoyagetothePlanetofPrehistoricWomen Voyage to the Planet of Prehistoric Women] (1967) and [http://www.archive.org/details/TheSnowCreature The Snow Creature] (1954): Full-length public domain movies from the Internet Archive&#039;s [http://www.archive.org/details/feature_films collection].&lt;br /&gt;
&lt;br /&gt;
=== Scientific Demonstrations ===&lt;br /&gt;
;[http://ptaff.ca/orage_montreal/?lang=en_CA 1696 Lightnings]: Visual and audible demonstration of a lightning storm in Montreal.&lt;br /&gt;
;[http://www.deepvision.ca/tech_example4.php Deep Vision]: Technical demonstrations of the features of Deep Vision&#039;s &#039;&#039;Machine Perception&#039;&#039;.&lt;br /&gt;
;[http://www.rethaw.com/wp/category/videos/ Rethaw]: Conceptual resonance with ice, by David Steinberg.&lt;br /&gt;
;[http://selectparks.net/~julian/index.php?entry=entry060602-125815 SysBlog]: Two videos on computer graphic engines: &#039;&#039;fijuu2&#039;&#039; and &#039;&#039;q3apd&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Streaming Media ===&lt;br /&gt;
;[http://www.editingarchive.com/eatv/ Editing Archive TV]: Streams unlicensed Japanese anime, amateur machinima films, and video game captures.&lt;br /&gt;
;[http://tvmallorca.net/pages/tv_online TV Mallorca]: Streams the &#039;&#039;Mallorca&#039;&#039; television station content through streaming online.  (Spanish language)&lt;br /&gt;
;[http://www.visonair.tv/ Visonair.tv]: Provides video producers open-access to online media streaming, in a format stylized after a television channel.&lt;br /&gt;
;[http://iptv.okto.tv:8080/okto.ogg.m3u Theora Livestream]: from Vienna based community TV station [http://okto.tv Okto]&lt;br /&gt;
&lt;br /&gt;
=== GNU/Linux Philosophical ===&lt;br /&gt;
;[http://computerworld.co.nz/news.nsf/news/1461E04FC8D3293FCC2574A500173A09 Computerworld]: Recording of a speech on copyright, at Auckland University, New Zealand.&lt;br /&gt;
;[http://support.creativecommons.org/videos/ Creative Commons]: Informational videos about Creative Commons, a charitable corporation which promotes alternative copyright licenses.&lt;br /&gt;
;[http://free-electrons.com/community/videos/conferences/en Free Electrons Conferences]: technical talks given at conferences about free software.&lt;br /&gt;
;[http://www.gnu.org/fry/ Freedom Fry]: Short film celebrating the 25th anniversary of the GNU operating system, starting Stephen Fry, entitled &#039;&#039;Happy birthday to GNU&#039;&#039;.&lt;br /&gt;
;[http://audio-video.gnu.org/ GNU and FSF Audio and Video Repository]: Collection of audio and video content, primarily speeches on Free Software.&lt;br /&gt;
;[http://gplv3.fsf.org/av GPLv3 Conference, January 16-17 2006]: Speeches by Peter Brown, Eben Moglen and Richard Stallman.&lt;br /&gt;
;[http://www.gnu.org/philosophy/audio/audio.html GNU Project&#039;s Philosophy Speeches]: Featuring Richard Stallman and others.&lt;br /&gt;
;[http://punkcast.com/905/ PUNKCAST#905]: Two speeches by Richard Stallman: &#039;&#039;What&#039;s GNU?&#039;&#039; and &#039;&#039;St. IGNUcius&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== GNU/Linux Technical ===&lt;br /&gt;
;[http://wiki.debconf.org/wiki/Videoteam Debian Videos]: the annual Debian developers meeting, an event filled with discussions and workshops. &lt;br /&gt;
;[http://fedoraproject.org/wiki/RenderingProject/aiglx AIGLX]: Demonstration videos for AIGLX, a project that aims to enable GL-accelerated effects on a standard desktop.&lt;br /&gt;
;[http://dimitris.glezos.com/weblog/2008/03/26/fosscomm-recap/ Community &#039;&#039;foo&#039;&#039;]: A speech by Dimitris Glezos, from the Fedora Project, at FOSSComm 2008.  (Greek language)&lt;br /&gt;
;[http://linux.dell.com/vlogs/ Dell Linux Engineering Vlogs]: Recordings of interviews from Dell&#039;s Linux team, from 2006.&lt;br /&gt;
;[http://linmagazine.co.il/fedora/2008/02/06/fedora-9-alpha Fedora 9]: Video demonstration of Resizing feature in Fedora 9.  (Hebrew language)&lt;br /&gt;
;[http://video.fosdem.org/ FOSDEM Speeches]: Video recordings of &#039;&#039;Free and Open Source&#039;&#039; developer talks held at FOSDEM editions from 2005 and onward.&lt;br /&gt;
;[http://dot.kde.org/1213190021/ KDE Day]: Video recordings of technical talks at a conference commemorating the release of KDE 4, in Toulouse, France.&lt;br /&gt;
;[http://macslow.thepimp.net/ MacSlow Blog]: A few videos demonstrating GUI elements, linked from a developer&#039;s blog.&lt;br /&gt;
;[http://www.novell.com/brainshare/keynotes.html Novell Brainshare]: The three keynote speeches which were presented at Novell&#039;s Brainshare, in 2006.&lt;br /&gt;
;[http://www.redhat.com/solutions/info/videos/ Red Hat Videos]: Videos about the GNU/Linux vendor&#039;s customers and solutions.&lt;br /&gt;
;[http://tube.opensuse.org/ tube.openSUSE.org]: The official repository of videos by the openSUSE people, such as software developer interviews, instructional screencasts, and conference speeches.&lt;br /&gt;
;[http://www.twistedlincoln.com/linuxclass Twisted Lincoln]: Two instructional videos on the use of the GNU/Linux operating system.&lt;br /&gt;
;[http://screencasts.ubuntu.com/ Ubuntu Screencasts] and [http://videos.ubuntu.com/ Ubuntu Videos]: Video tutorials and graphical demonstrations on how to use the Ubuntu operating system.&lt;br /&gt;
&lt;br /&gt;
=== Web/Internet Technical ===&lt;br /&gt;
;[http://media.annodex.net/cmmlwiki/Special:ListHTML Annodex]: Combination of &#039;&#039;Theora&#039;&#039; video examples, from Open Source Forum 2005 and other events.  Annodex applies open standards in annotating and indexing networked media.&lt;br /&gt;
;[http://backstage.bbc.co.uk/news/archives/2008/11/george_wright_r.html BBC Backstage Blog]: George Wright responds to &#039;&#039;Backstage&#039;&#039; questions in a video available in &#039;&#039;Theora&#039;&#039; format.&lt;br /&gt;
;[http://envycasts.com/ Envy Casts]: Tutorials available for download in &#039;&#039;Ogg Theora&#039;&#039; after purchase.  Instructor led training for Ruby on Rails computer programming.&lt;br /&gt;
;[http://www.mozilla.com/en-US/firefox/video/videos/FF3_Screencast.ogg Firefox 3 Screencast]: Firefox 3 screenshot and advertising video&lt;br /&gt;
;[http://www.double.co.nz/video_test/ Firefox] and [http://dev.opera.com/articles/view/a-call-for-video-on-the-web-opera-vid/ Opera] HTML5 Tests: Implementation examples of the HTML &amp;quot;video tag&amp;quot;, using &#039;&#039;Theora&#039;&#039; video formats.&lt;br /&gt;
;[http://annevankesteren.nl/2008/09/fronteers-html5-video HTML5 Demonstration]: Anne van Kesteren&#039;s Fronteers HTML 5 presentation which has &#039;&#039;video&#039;&#039; tags embedded in the presentation itself.&lt;br /&gt;
;[http://lachy.id.au/log/2007/06/webjam3 WebJam 3]: Short video highlight of the WebJam 3, held in 2007.  Media is free of copyright restrictions (public domain).&lt;br /&gt;
&lt;br /&gt;
=== Uncatergorized videos ===&lt;br /&gt;
;[http://www.pragprog.com/screencasts Pragmatic Programmer]: Technical tutorial screencasts for sale.  Some screencasts and screencast previews are available in &#039;&#039;Ogg Vorbis&#039;&#039; format, including &#039;&#039;The Ruby Object Model and Metaprogramming&#039;&#039;, &#039;&#039;Erlang by Example&#039;&#039;, and &#039;&#039;Everyday Active Record&#039;&#039;.&lt;br /&gt;
;[http://ulm.ccc.de/ChaosSeminar Ulm CCC Chaosseminar]: Computer-security conference speeches.  (German language)&lt;br /&gt;
&lt;br /&gt;
== See also== &lt;br /&gt;
{{Template:Theora}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Theora]]&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Summer_of_Code_2008&amp;diff=8743</id>
		<title>Summer of Code 2008</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Summer_of_Code_2008&amp;diff=8743"/>
		<updated>2008-03-19T01:21:16Z</updated>

		<summary type="html">&lt;p&gt;Mdale: /* Current Ideas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is  our ideas page for [http://code.google.com/soc/ Google Summer of Code] projects with [http://xiph.org Xiph.org] and [http://annodex.org/ Annodex]. The two projects participate jointly this year under Xiph&#039;s name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Students&#039;&#039;&#039; please use the template at [[Summer of Code Applications]] when applying for a GSoC position.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentors&#039;&#039;&#039; please visit [[Summer of Code Mentoring]] and help us prepare our application as a mentoring organization.&lt;br /&gt;
&lt;br /&gt;
== Current Ideas ==&lt;br /&gt;
&lt;br /&gt;
We need a primary and backup mentor volunteer for any project that is to become an official proposal, but submit something and we&#039;ll see who we can round up. :)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Project ideas go here&#039;&#039;&lt;br /&gt;
* Transcode/Tag/Upload tool for Theora et al. (ideally as a firefox extension so web cms integration is easy) &#039;&#039;&#039;OggPusher&#039;&#039;&#039; details below:&lt;br /&gt;
* Improve [http://xiph.org/quicktime/ xiphqt component] support of ogg skeleton streams. (currently does not work with streams served with mod_annodex)&lt;br /&gt;
* Theora encoding support in GIMP&lt;br /&gt;
* Theora Java port directly (semi)automatically derived from the reference sources&lt;br /&gt;
* Optimisations for Oggenc and Co. as done by Lancer (http://homepage3.nifty.com/blacksword/) which gives around 3x more speed. If one fears quality lose, make it ./configure option. Lancers diffs only work for Windows.&lt;br /&gt;
* Speex support in IceS&lt;br /&gt;
* Better stream source gui for dvswitch&lt;br /&gt;
* Multiplexing support (so one can play audio from video files) in ogg123&lt;br /&gt;
:Isn&#039;t this already done with the vorbisfile support in 1.2.0?&lt;br /&gt;
::At first, I thought it wasn&#039;t but that&#039;s because I tested with a 2.3 GB film and it didn&#039;t work.  Smaller files work just fine, which makes me believe there&#039;s a bug somewhere that needs to be found.  Anyway, we can remove this entry.--Ivo&lt;br /&gt;
:::2.3 GB is just above what can be represented as bytes on a signed 32 bit int - clue to the bug ? --[[User:Ogg.k.ogg.k|Ogg.k.ogg.k]]&lt;br /&gt;
* XSPF support in ogg123 and oggenc (playlist creation)&lt;br /&gt;
* Initial support for OggPCM in some of our tools&lt;br /&gt;
* OggMNG tools&lt;br /&gt;
:Is this really necessary?  I mean, OggMNG seems to have gone nowhere and serve no niche.--Ivo&lt;br /&gt;
::We still keep getting asked for a format where speex and images together make up a movie.--Silvia&lt;br /&gt;
* ROE implementation for network: using ROE in a client-server negotiation to dynamically request a specific multi-track ogg file using skeleton (Silvia)&lt;br /&gt;
* create Ogg caption support for vlc using CMML&lt;br /&gt;
* ffmpeg improvements for Xiph.Org codecs:&lt;br /&gt;
** add Speex support&lt;br /&gt;
** add Ogg Skeleton support&lt;br /&gt;
** fix seeking bugs involving Ogg Theora&lt;br /&gt;
** fix bugs in Ogg Theora decoder&lt;br /&gt;
** improve ogg muxer&lt;br /&gt;
* Ogg Cutter, a GUI to cut out segments from Ogg Videos, this could be based on oggz-chop (part of oggz-tools) or done with Gstreamer (starting with [http://webcvs.freedesktop.org/gstreamer/gst-python/examples/remuxer.py?content-type=text%2Fplain&amp;amp;view=co remuxer.py]&lt;br /&gt;
&lt;br /&gt;
==Detailed Project Description==&lt;br /&gt;
&lt;br /&gt;
===Mv_Embed: Accessibility and [re]usability:===&lt;br /&gt;
&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Michael Dale, Anna (EngageMedia) &amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Existing Feature Set:&#039;&#039;&#039; [http://metavid.ucsc.edu/wiki/index.php/Mv_Embed Mv_Embed] is an existing javascript library that takes html5 &amp;lt;video&amp;gt; tag and rewrites the video tag for to support in-page ogg theora playback in contemporary browsers. MV_embed supports may browsers and plugins including: native browser support such as firefox 3 video builds, oggplay plugin for firefox2 in win, mac, linux ; VLC activX/plugin for win IE, firefox, and mac, linux firefox; mplayer &amp;amp; totem for linux; and java cortado for microsoft, sun, apple java VM for IE, firefox &amp;amp; safari. Mv_embed maps all these plugin javascript systems to a ~near~ html5 spec api enabling web application developers to take advantage of a uniform javascript API for video control and interaction without having to worry about the underling plugin systems. Mv_Embed is used as part of the metavidWiki Project (screen cast).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Proposed Development:&#039;&#039;&#039; Mv_Embed will be enhanced around two goals integration into prominent open source Content Management Systems and better accessibility of close captions and associative video metadata.&lt;br /&gt;
&lt;br /&gt;
Mv_Embed will integrate into existing CMS video extensions for quick &amp;quot;one-off&amp;quot; ogg theora support.&lt;br /&gt;
* FilmForge (Drupal)&lt;br /&gt;
* ShowInABox (Wordpress)&lt;br /&gt;
* Plumi (Plone)&lt;br /&gt;
&lt;br /&gt;
Additional server side components like transcoding to theora, generating thumbnails, and exporting metadata will also be developed. Where time / resources permit server side hooks into ffmepg2theora (for transcoding) and mplayer (for generating thumbnails) will be developed for the CMS systems as well. As OggPusher matures simple hooks will be added to the CMS&#039;s to support direct ogg theora clip uploads.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Accessibility &amp;amp; CMML&#039;&#039;&#039;&lt;br /&gt;
Accessible components of mv_embed consist of obtaining the metadata and putting it into the dom as a child of the video element. Mv_Embed will  offer a reference javascript interface for client interactions with that metadata. The metadata will be structured in Continues Media Markup Language (CMML). CMML is a part of the annodex technology set and can either be muxed into the ogg stream or be requested separately via XML. Mv_Embed will negotiate a transport method for the metadata that will work for the given plugin type.(Currently only oggplay plugin supports ogg-skeleton and exposing muxed CMML tracks in the ogg stream).&lt;br /&gt;
&lt;br /&gt;
Mv_Embed is part of [http://metavid.ucsc.edu/wiki/index.php/MetaVidWiki MetavidWiki] enables community authored transcripts and exposes these multiple layers in CMML. Proposed work on Mv_Embed will generalize these development efforts taking place in the metavid project for other CMS&#039;s and improve the usability and accessibility of these metadata layers in javascript based interfaces and mutil-plugin playback environment.&lt;br /&gt;
&lt;br /&gt;
=== Theora Java port directly (semi)automatically derived from the reference sources ===&lt;br /&gt;
&lt;br /&gt;
The current Java decoder port (jheora) is rapidly heading towards becoming obsolete. It was based on the C reference implementation during alpha development stages, which means it cannot decode advanced Theora streams using non-VP3 features. Current Theora mainline features a completely new decoder, implementing all bitstream features, and a new encoder needing these advanced decoder capabilities is expected to arrive soon. jheora, however, appears to be unmaintainable for very same reasons the original alpha decoder was dropped. To make matters worse there&#039;s a very very noticable lack of someone being at least moderately skilled in Java AND being skilled in video coding AND writing Java code with acceptable speed (video decoding should be realtime). Any conventional manual Java source port may quickly bitrot to an unmaintainable state.&lt;br /&gt;
&lt;br /&gt;
Thankfully there *are* technologies to get C code to execute in the Java Virtual Machine. The obvious idea would be to translate the actual source code to Java using an automated process, but no reliable tools exist doing this (and given the concept-clash in some areas between C and Java it&#039;s unlikely something really nice will emerge). Projects like NestedVM (http://nestedvm.ibex.org/) and Cibyl (http://spel.bth.se/index.php/Cibyl) are doing &#039;&#039;&#039;language agnostic translations to Java bytecode&#039;&#039;&#039;, using the GCC toolchain.&lt;br /&gt;
&lt;br /&gt;
In the first step the code to be ported is compiled to MIPS ELF binaries. Those are then converted to Java bytecode. This works pretty well because MIPS is pretty similar to Java bytecode and most instructions can be mapped directly.&lt;br /&gt;
&lt;br /&gt;
Crazyness? Work of mad men, living in nuclear families, fighting rampaging robots with nuclear missiles? Does this actually work? Yup, it does work, and some Xiph encoders/decoders have been successfully converted with NestedVM already (http://groups.google.com/group/nestedvm/browse_thread/thread/df96ef7337f390e4/a45fdd66534e7641?#a45fdd66534e7641) and figures provided by the Cibyl project indicate that the MIPS-to-Java approach isn&#039;t actually slower than a &amp;quot;real&amp;quot; Java port (http://spel.bth.se/index.php/Cibyl_performance) - it&#039;s sometimes faster, sometimes slower.&lt;br /&gt;
&lt;br /&gt;
The problem with NestedVM is that there appears to be no means to generate a Java interface from the converted binaries - which means that while the converted binaries work fine on Java there&#039;s no way to call the functionality of the converted code by other Java classes, which would be necessary to e.g. write a player applet.&lt;br /&gt;
&lt;br /&gt;
Cibyl, on the other hand, does provide means to generate Java interfaces, given the binary and the header files. Cibyl, however, needs to link some helper symbols into the MIPS binary, which apparently requires some tricks to work in the usual autoconf setup (http://groups.google.com/group/cibyl-devel/browse_thread/thread/584e5fc3b9bc7e2c). So for the Cibyl port to work some autoconf magic may be necessary.&lt;br /&gt;
&lt;br /&gt;
So what should this project do:&lt;br /&gt;
&lt;br /&gt;
* Create and document a working setup for doing language-agnostic Java conversions&lt;br /&gt;
* Demonstrate this for Theora&lt;br /&gt;
* Find a way to generate a Java interface in a way being automated as much as possible&lt;br /&gt;
&lt;br /&gt;
This project most likely is directly bound to progress made with either NestedVM or Cibyl. The upside of this is that any results may be directly applied to other projects, too&lt;br /&gt;
&lt;br /&gt;
--[[User:Maikmerten|Maikmerten]] 03:43, 12 March 2008 (PDT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===OggPusher===&lt;br /&gt;
&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Michael Dale ... or anyone else with more experience with firefox extensions/ffmpeg2theora ? &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Abstract:&#039;&#039;&#039; OggPusher is a proposed cross platform packaging of ffmpeg2theora as a browser extension. This exposes JavaScript hooks to web applications enabling easy client side transcodes from high quality source originals such as DV or MPEG2 and uploading into web based content management systems.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Sample Application Flow:&#039;&#039;&#039; is as follows: A user visits a oggPusher enabled web service. The firefox user is prompted to install a browser extension via firefox&#039;s .xpi extension framework. Once enabled, the web service upload interface does a call to the oggPusher to expose a &amp;quot;open file&amp;quot; dialog box on the client. The websevice access the oggPusher api to set the requested transcode bitrate and other transcode options (such as interlace, number of audio channels, resolution etc).  The client selects the high quality local file and begins transcoding to a temporary location on local disk. If there is an error in transcoding the upload is aborted and an error is exposed to web application.  Once the file is done transcoding, the web interface has the client issue a POST of the transcoded file.(if the server supports more efficient PUT than that can be used). The amount of the file that has been transcoded and the amount uploaded are exposed via javascript hooks so that web application javascript interface can update the client on upload progress.  If the the upload connection is reset a ajax request on the client can request &amp;quot;bytes upload so far&amp;quot; from the server and have oggPusher begin uploading from that point in the temporary local ogg file. A local file hash could be rechecked to insure the local file has not changed. The server can then do a simple join on the uploaded pieces, enabling reusable uploads over existing http protocol. If the server does not support resumes the file will be uploaded from the start.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Features for initial Release:&#039;&#039;&#039;&lt;br /&gt;
* A .xpi extension based on ffmpeg2theoa that supports uploading of local files of any type that ffmpeg accepts.&lt;br /&gt;
* Supports two modes of operation&lt;br /&gt;
** zero server side config where oggPusher just gives the option of uploading theora video where it finds a form file input type.&lt;br /&gt;
** server side config where the server/service hooks into oggPusher for extra functionality, like resuming transferrer and status updates integrated with the web application.&lt;br /&gt;
* A simple javascript api for controlling ffmpeg2theora encoding options. These options will be pre-demerited and javascript input will be scrubbed to avoid client side security risks.&lt;br /&gt;
* A set of javascript hooks for oggPusher that expose upload progress, encoding progress and transcoding errors.&lt;br /&gt;
* A sample server side implementation using php/html/javascript for grabbing ogg files from oggPusher.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Future Feature RoadMap:&#039;&#039;&#039;&lt;br /&gt;
Once the basic implementation has been deployed the following features will be targeted for future versions:&lt;br /&gt;
&lt;br /&gt;
* Integration with popular open source CMS&#039;s first target is mediaWiki.&lt;br /&gt;
* Hooks for connecting into &amp;quot;live&amp;quot; interfaces such as firewire digital video input or USB web cams.&lt;br /&gt;
** Extend oggfwd and server side components for in browser live streaming to web services.&lt;br /&gt;
* Extend to support ffmpeg2Dirac and future open source media codecs.&lt;br /&gt;
* Enable javascript hooks for grabbing highquality jpg or png screen grabs from the original source to be uploaded alongside the encoded video.&lt;br /&gt;
* Enable Bittorrent uploads&lt;br /&gt;
&lt;br /&gt;
===XSPF support in oggenc and ogg123 applications===&lt;br /&gt;
&lt;br /&gt;
Mentor: Ivo Emanuel Gonçalves&amp;lt;br/&amp;gt;&lt;br /&gt;
Existing Feature Set: oggenc and ogg123 are part of a toolset named vorbis-tools, where oggenc is a Vorbis encoder and ogg123 an audio player.  XSPF is a XML-based playlist format, extensible, but simple and efficient.&lt;br /&gt;
&lt;br /&gt;
Proposed Development: this project would extend those two applications (oggenc and ogg123) to support XSPF.  Namely, oggenc would be able to generate a playlist from the encoded files, and ogg123 would be able to parse a playlist for supported media for playback.  This is a C project, with the intention of using code from or actually linking to the BSD-licensed libSpiff, which is a C++ XSPF library.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===php_annodex: wrapper to libannodex or liboggz for doing media stuff===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Silvia Pfeiffer ... or anyone else with an a php background e.g. Michael Dale&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What is it?&#039;&#039;&#039;&lt;br /&gt;
Direct interaction with Ogg video and audio files from within a Web scripting language is key to providing further support to existing and new Web media applications. php_annodex can e.g. be used to extend Drupal, MediaWiki and other php-based applications with function calls to control opening, closing, seeking, playing, pausing, telling position and similar interactions with audio/video. Further, since Annodex has CMML for time-aligned annotations, hyperlinks to other places, and textual descriptions (such as captions) can be accessed and used through php_annodex.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What is the project?&#039;&#039;&#039;&lt;br /&gt;
An initial version of [http://annodex.net/software/phpannodex/index.html php_annodex exists], but it is incomplete and not up-to-date. This is in comparison with such support in python through [http://annodex.net/taxonomy_menu/1/19 pyannodex]. A GSoC student would be expected to bring the support for Xiph and Annodex technology in php_annodex up-to-date. In addition, he/she could extend this work by also implementing media support in a plugin, e.g. the Drupal module [http://annodex.net/software/phpannodex/index.html Acidfree]. php_annodex is simply a php wrapper around the C-libraries libannodex and liboggz. It may suffice to just focus on liboggz.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===ruby_annodex: wrapper to libannodex or liboggz for doing media stuff===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Silvia Pfeiffer&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What is it?&#039;&#039;&#039;&lt;br /&gt;
Direct interaction with Ogg video and audio files from within a Web scripting language is key to providing further support to existing and new Web media applications. ruby_annodex can e.g. be used to extend rails with function calls to control opening, closing, seeking, playing, pausing, telling position and similar interactions with audio/video. Further, since Annodex has CMML for time-aligned annotations, hyperlinks to other places, and textual descriptions (such as captions) can be accessed and used through ruby_annodex.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What is the project?&#039;&#039;&#039;&lt;br /&gt;
A python wrapper of similar type called [http://annodex.net/taxonomy_menu/1/19 pyannodex] exists. The ruby_annodex wrapper should provide similar functionality to ruby, in particular with a view of using it from within rails for the development of Web applications. Development of an example application in ruby on rails would be part of this. Extension of this project to include media support into a ruby-based CMS is possible.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Using ROE to create multi-track Ogg files===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Silvia Pfeiffer ... and anyone else interested in ROE, e.g. Ralph Giles, Conrad Parker, Michael Dale, Shane Stephens&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What is it?&#039;&#039;&#039;&lt;br /&gt;
[http://trac.annodex.net/wiki/MovieDescriptionLanguage ROE] is a small XML description language for multi-track media files. It can be used for authoring multi-track media files from separate physical files on disk. It can also be used on a Web server to dynamically create multi-track media resources where the tracks are selected through the request from the client.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What is the project?&#039;&#039;&#039;&lt;br /&gt;
In this project, we only implement and experiment with the file multiplexing side of things. The ROE specification is very new and potentially incomplete, so part of the project will be to validate this specification. The other part will be to create an authoring tool that can take a ROE file, parse it, pull in all the input audio, video, text etc files and create an Ogg file with a Skeleton that contains the equivalent of ROE inside the binary file. The project will start with a focus on multiplexing vorbis audio and theora video, but also include speex, FLAC, CMML, and possibly MNG data. If this is achieved in a short time frame, the project can continue onto developing support for these multi-track files in e.g. vlc or ffmpeg. This can even extend to providing a full tool-chain from authoring captions for a video file, to creating the respective multitrack Ogg file, and finally to playing them back inside vlc where the captions are shown as overlays.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SHARE application for the Spread Open Media project===&lt;br /&gt;
&lt;br /&gt;
Mentor: Ivo Emanuel Gonçalves&amp;lt;br/&amp;gt;&lt;br /&gt;
Existing Feature Set: Spread Open Media is a community project to promote the different free formats for multimedia and otherwise.  SHARE is a pratical step to build on this community and spread more files.&lt;br /&gt;
&lt;br /&gt;
Proposed Development: SHARE is intended to be a PHP project.  We do not discard the possibility of using Rails or Python, but the current SOM server does not support these.  SHARE will be a WebJay-like clone, as in users will be able to register, vote, comment and upload their own XSPF playlists.  Basically, it is a playlist sharing application.  Using OpenID for registration and Cortado (an existing Java applet) for playback would be welcome additions.&lt;br /&gt;
&lt;br /&gt;
===Dirac support in liboggplay and liboggz===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentor:&#039;&#039;&#039; ??&lt;br /&gt;
&lt;br /&gt;
Right now [http://wiki.xiph.org/index.php/OggPlay liboggplay] only support Theora video. &lt;br /&gt;
Your aim for this project is to add support for [http://dirac.sourceforge.net/ Dirac],&lt;br /&gt;
this should be done using [http://www.diracvideo.org/ libschrodinger].&lt;br /&gt;
Doing this, you will add OggDirac support to the OggPlay Browser Plugin and the upcoming &amp;lt;video&amp;gt; tag support in Firefox.&lt;br /&gt;
&lt;br /&gt;
== Guidelines for Applying ==&lt;br /&gt;
&lt;br /&gt;
Remember that many people will apply to work on the Summer of Code.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that those of us evaluating your application do not know you, we do not know what kind of &lt;br /&gt;
experience you have, we do not know what you have done in the past and we have to pick the best people &lt;br /&gt;
suited for a particular task.&lt;br /&gt;
&lt;br /&gt;
Hence, it is very important that you tell us in your email why you should be considered to implement a &lt;br /&gt;
particular project. Please use the application template at [[Summer of Code Applications]] as a starting point.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
*[[CodingGuidelines]]&lt;br /&gt;
*[[MIT approach to design and implementation]]&lt;br /&gt;
*[[How to do a release]]&lt;br /&gt;
*[[Summer of Code 2007]]&lt;br /&gt;
*[[Summer of Code 2006]]&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Summer_of_Code_2008&amp;diff=8742</id>
		<title>Summer of Code 2008</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Summer_of_Code_2008&amp;diff=8742"/>
		<updated>2008-03-19T01:20:50Z</updated>

		<summary type="html">&lt;p&gt;Mdale: /* Current Ideas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is  our ideas page for [http://code.google.com/soc/ Google Summer of Code] projects with [http://xiph.org Xiph.org] and [http://annodex.org/ Annodex]. The two projects participate jointly this year under Xiph&#039;s name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Students&#039;&#039;&#039; please use the template at [[Summer of Code Applications]] when applying for a GSoC position.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentors&#039;&#039;&#039; please visit [[Summer of Code Mentoring]] and help us prepare our application as a mentoring organization.&lt;br /&gt;
&lt;br /&gt;
== Current Ideas ==&lt;br /&gt;
&lt;br /&gt;
We need a primary and backup mentor volunteer for any project that is to become an official proposal, but submit something and we&#039;ll see who we can round up. :)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Project ideas go here&#039;&#039;&lt;br /&gt;
* Transcode/Tag/Upload tool for Theora et al. (ideally as a firefox extension so web cms integration is easy) &#039;&#039;&#039;OggPusher&#039;&#039;&#039; details below:&lt;br /&gt;
* Improve [http://xiph.org/quicktime/ xiphqt component] support of ogg skeleton streams. (currently does not work with mod_annodex streams) &lt;br /&gt;
* Theora encoding support in GIMP&lt;br /&gt;
* Theora Java port directly (semi)automatically derived from the reference sources&lt;br /&gt;
* Optimisations for Oggenc and Co. as done by Lancer (http://homepage3.nifty.com/blacksword/) which gives around 3x more speed. If one fears quality lose, make it ./configure option. Lancers diffs only work for Windows.&lt;br /&gt;
* Speex support in IceS&lt;br /&gt;
* Better stream source gui for dvswitch&lt;br /&gt;
* Multiplexing support (so one can play audio from video files) in ogg123&lt;br /&gt;
:Isn&#039;t this already done with the vorbisfile support in 1.2.0?&lt;br /&gt;
::At first, I thought it wasn&#039;t but that&#039;s because I tested with a 2.3 GB film and it didn&#039;t work.  Smaller files work just fine, which makes me believe there&#039;s a bug somewhere that needs to be found.  Anyway, we can remove this entry.--Ivo&lt;br /&gt;
:::2.3 GB is just above what can be represented as bytes on a signed 32 bit int - clue to the bug ? --[[User:Ogg.k.ogg.k|Ogg.k.ogg.k]]&lt;br /&gt;
* XSPF support in ogg123 and oggenc (playlist creation)&lt;br /&gt;
* Initial support for OggPCM in some of our tools&lt;br /&gt;
* OggMNG tools&lt;br /&gt;
:Is this really necessary?  I mean, OggMNG seems to have gone nowhere and serve no niche.--Ivo&lt;br /&gt;
::We still keep getting asked for a format where speex and images together make up a movie.--Silvia&lt;br /&gt;
* ROE implementation for network: using ROE in a client-server negotiation to dynamically request a specific multi-track ogg file using skeleton (Silvia)&lt;br /&gt;
* create Ogg caption support for vlc using CMML&lt;br /&gt;
* ffmpeg improvements for Xiph.Org codecs:&lt;br /&gt;
** add Speex support&lt;br /&gt;
** add Ogg Skeleton support&lt;br /&gt;
** fix seeking bugs involving Ogg Theora&lt;br /&gt;
** fix bugs in Ogg Theora decoder&lt;br /&gt;
** improve ogg muxer&lt;br /&gt;
* Ogg Cutter, a GUI to cut out segments from Ogg Videos, this could be based on oggz-chop (part of oggz-tools) or done with Gstreamer (starting with [http://webcvs.freedesktop.org/gstreamer/gst-python/examples/remuxer.py?content-type=text%2Fplain&amp;amp;view=co remuxer.py]&lt;br /&gt;
&lt;br /&gt;
==Detailed Project Description==&lt;br /&gt;
&lt;br /&gt;
===Mv_Embed: Accessibility and [re]usability:===&lt;br /&gt;
&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Michael Dale, Anna (EngageMedia) &amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Existing Feature Set:&#039;&#039;&#039; [http://metavid.ucsc.edu/wiki/index.php/Mv_Embed Mv_Embed] is an existing javascript library that takes html5 &amp;lt;video&amp;gt; tag and rewrites the video tag for to support in-page ogg theora playback in contemporary browsers. MV_embed supports may browsers and plugins including: native browser support such as firefox 3 video builds, oggplay plugin for firefox2 in win, mac, linux ; VLC activX/plugin for win IE, firefox, and mac, linux firefox; mplayer &amp;amp; totem for linux; and java cortado for microsoft, sun, apple java VM for IE, firefox &amp;amp; safari. Mv_embed maps all these plugin javascript systems to a ~near~ html5 spec api enabling web application developers to take advantage of a uniform javascript API for video control and interaction without having to worry about the underling plugin systems. Mv_Embed is used as part of the metavidWiki Project (screen cast).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Proposed Development:&#039;&#039;&#039; Mv_Embed will be enhanced around two goals integration into prominent open source Content Management Systems and better accessibility of close captions and associative video metadata.&lt;br /&gt;
&lt;br /&gt;
Mv_Embed will integrate into existing CMS video extensions for quick &amp;quot;one-off&amp;quot; ogg theora support.&lt;br /&gt;
* FilmForge (Drupal)&lt;br /&gt;
* ShowInABox (Wordpress)&lt;br /&gt;
* Plumi (Plone)&lt;br /&gt;
&lt;br /&gt;
Additional server side components like transcoding to theora, generating thumbnails, and exporting metadata will also be developed. Where time / resources permit server side hooks into ffmepg2theora (for transcoding) and mplayer (for generating thumbnails) will be developed for the CMS systems as well. As OggPusher matures simple hooks will be added to the CMS&#039;s to support direct ogg theora clip uploads.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Accessibility &amp;amp; CMML&#039;&#039;&#039;&lt;br /&gt;
Accessible components of mv_embed consist of obtaining the metadata and putting it into the dom as a child of the video element. Mv_Embed will  offer a reference javascript interface for client interactions with that metadata. The metadata will be structured in Continues Media Markup Language (CMML). CMML is a part of the annodex technology set and can either be muxed into the ogg stream or be requested separately via XML. Mv_Embed will negotiate a transport method for the metadata that will work for the given plugin type.(Currently only oggplay plugin supports ogg-skeleton and exposing muxed CMML tracks in the ogg stream).&lt;br /&gt;
&lt;br /&gt;
Mv_Embed is part of [http://metavid.ucsc.edu/wiki/index.php/MetaVidWiki MetavidWiki] enables community authored transcripts and exposes these multiple layers in CMML. Proposed work on Mv_Embed will generalize these development efforts taking place in the metavid project for other CMS&#039;s and improve the usability and accessibility of these metadata layers in javascript based interfaces and mutil-plugin playback environment.&lt;br /&gt;
&lt;br /&gt;
=== Theora Java port directly (semi)automatically derived from the reference sources ===&lt;br /&gt;
&lt;br /&gt;
The current Java decoder port (jheora) is rapidly heading towards becoming obsolete. It was based on the C reference implementation during alpha development stages, which means it cannot decode advanced Theora streams using non-VP3 features. Current Theora mainline features a completely new decoder, implementing all bitstream features, and a new encoder needing these advanced decoder capabilities is expected to arrive soon. jheora, however, appears to be unmaintainable for very same reasons the original alpha decoder was dropped. To make matters worse there&#039;s a very very noticable lack of someone being at least moderately skilled in Java AND being skilled in video coding AND writing Java code with acceptable speed (video decoding should be realtime). Any conventional manual Java source port may quickly bitrot to an unmaintainable state.&lt;br /&gt;
&lt;br /&gt;
Thankfully there *are* technologies to get C code to execute in the Java Virtual Machine. The obvious idea would be to translate the actual source code to Java using an automated process, but no reliable tools exist doing this (and given the concept-clash in some areas between C and Java it&#039;s unlikely something really nice will emerge). Projects like NestedVM (http://nestedvm.ibex.org/) and Cibyl (http://spel.bth.se/index.php/Cibyl) are doing &#039;&#039;&#039;language agnostic translations to Java bytecode&#039;&#039;&#039;, using the GCC toolchain.&lt;br /&gt;
&lt;br /&gt;
In the first step the code to be ported is compiled to MIPS ELF binaries. Those are then converted to Java bytecode. This works pretty well because MIPS is pretty similar to Java bytecode and most instructions can be mapped directly.&lt;br /&gt;
&lt;br /&gt;
Crazyness? Work of mad men, living in nuclear families, fighting rampaging robots with nuclear missiles? Does this actually work? Yup, it does work, and some Xiph encoders/decoders have been successfully converted with NestedVM already (http://groups.google.com/group/nestedvm/browse_thread/thread/df96ef7337f390e4/a45fdd66534e7641?#a45fdd66534e7641) and figures provided by the Cibyl project indicate that the MIPS-to-Java approach isn&#039;t actually slower than a &amp;quot;real&amp;quot; Java port (http://spel.bth.se/index.php/Cibyl_performance) - it&#039;s sometimes faster, sometimes slower.&lt;br /&gt;
&lt;br /&gt;
The problem with NestedVM is that there appears to be no means to generate a Java interface from the converted binaries - which means that while the converted binaries work fine on Java there&#039;s no way to call the functionality of the converted code by other Java classes, which would be necessary to e.g. write a player applet.&lt;br /&gt;
&lt;br /&gt;
Cibyl, on the other hand, does provide means to generate Java interfaces, given the binary and the header files. Cibyl, however, needs to link some helper symbols into the MIPS binary, which apparently requires some tricks to work in the usual autoconf setup (http://groups.google.com/group/cibyl-devel/browse_thread/thread/584e5fc3b9bc7e2c). So for the Cibyl port to work some autoconf magic may be necessary.&lt;br /&gt;
&lt;br /&gt;
So what should this project do:&lt;br /&gt;
&lt;br /&gt;
* Create and document a working setup for doing language-agnostic Java conversions&lt;br /&gt;
* Demonstrate this for Theora&lt;br /&gt;
* Find a way to generate a Java interface in a way being automated as much as possible&lt;br /&gt;
&lt;br /&gt;
This project most likely is directly bound to progress made with either NestedVM or Cibyl. The upside of this is that any results may be directly applied to other projects, too&lt;br /&gt;
&lt;br /&gt;
--[[User:Maikmerten|Maikmerten]] 03:43, 12 March 2008 (PDT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===OggPusher===&lt;br /&gt;
&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Michael Dale ... or anyone else with more experience with firefox extensions/ffmpeg2theora ? &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Abstract:&#039;&#039;&#039; OggPusher is a proposed cross platform packaging of ffmpeg2theora as a browser extension. This exposes JavaScript hooks to web applications enabling easy client side transcodes from high quality source originals such as DV or MPEG2 and uploading into web based content management systems.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Sample Application Flow:&#039;&#039;&#039; is as follows: A user visits a oggPusher enabled web service. The firefox user is prompted to install a browser extension via firefox&#039;s .xpi extension framework. Once enabled, the web service upload interface does a call to the oggPusher to expose a &amp;quot;open file&amp;quot; dialog box on the client. The websevice access the oggPusher api to set the requested transcode bitrate and other transcode options (such as interlace, number of audio channels, resolution etc).  The client selects the high quality local file and begins transcoding to a temporary location on local disk. If there is an error in transcoding the upload is aborted and an error is exposed to web application.  Once the file is done transcoding, the web interface has the client issue a POST of the transcoded file.(if the server supports more efficient PUT than that can be used). The amount of the file that has been transcoded and the amount uploaded are exposed via javascript hooks so that web application javascript interface can update the client on upload progress.  If the the upload connection is reset a ajax request on the client can request &amp;quot;bytes upload so far&amp;quot; from the server and have oggPusher begin uploading from that point in the temporary local ogg file. A local file hash could be rechecked to insure the local file has not changed. The server can then do a simple join on the uploaded pieces, enabling reusable uploads over existing http protocol. If the server does not support resumes the file will be uploaded from the start.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Features for initial Release:&#039;&#039;&#039;&lt;br /&gt;
* A .xpi extension based on ffmpeg2theoa that supports uploading of local files of any type that ffmpeg accepts.&lt;br /&gt;
* Supports two modes of operation&lt;br /&gt;
** zero server side config where oggPusher just gives the option of uploading theora video where it finds a form file input type.&lt;br /&gt;
** server side config where the server/service hooks into oggPusher for extra functionality, like resuming transferrer and status updates integrated with the web application.&lt;br /&gt;
* A simple javascript api for controlling ffmpeg2theora encoding options. These options will be pre-demerited and javascript input will be scrubbed to avoid client side security risks.&lt;br /&gt;
* A set of javascript hooks for oggPusher that expose upload progress, encoding progress and transcoding errors.&lt;br /&gt;
* A sample server side implementation using php/html/javascript for grabbing ogg files from oggPusher.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Future Feature RoadMap:&#039;&#039;&#039;&lt;br /&gt;
Once the basic implementation has been deployed the following features will be targeted for future versions:&lt;br /&gt;
&lt;br /&gt;
* Integration with popular open source CMS&#039;s first target is mediaWiki.&lt;br /&gt;
* Hooks for connecting into &amp;quot;live&amp;quot; interfaces such as firewire digital video input or USB web cams.&lt;br /&gt;
** Extend oggfwd and server side components for in browser live streaming to web services.&lt;br /&gt;
* Extend to support ffmpeg2Dirac and future open source media codecs.&lt;br /&gt;
* Enable javascript hooks for grabbing highquality jpg or png screen grabs from the original source to be uploaded alongside the encoded video.&lt;br /&gt;
* Enable Bittorrent uploads&lt;br /&gt;
&lt;br /&gt;
===XSPF support in oggenc and ogg123 applications===&lt;br /&gt;
&lt;br /&gt;
Mentor: Ivo Emanuel Gonçalves&amp;lt;br/&amp;gt;&lt;br /&gt;
Existing Feature Set: oggenc and ogg123 are part of a toolset named vorbis-tools, where oggenc is a Vorbis encoder and ogg123 an audio player.  XSPF is a XML-based playlist format, extensible, but simple and efficient.&lt;br /&gt;
&lt;br /&gt;
Proposed Development: this project would extend those two applications (oggenc and ogg123) to support XSPF.  Namely, oggenc would be able to generate a playlist from the encoded files, and ogg123 would be able to parse a playlist for supported media for playback.  This is a C project, with the intention of using code from or actually linking to the BSD-licensed libSpiff, which is a C++ XSPF library.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===php_annodex: wrapper to libannodex or liboggz for doing media stuff===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Silvia Pfeiffer ... or anyone else with an a php background e.g. Michael Dale&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What is it?&#039;&#039;&#039;&lt;br /&gt;
Direct interaction with Ogg video and audio files from within a Web scripting language is key to providing further support to existing and new Web media applications. php_annodex can e.g. be used to extend Drupal, MediaWiki and other php-based applications with function calls to control opening, closing, seeking, playing, pausing, telling position and similar interactions with audio/video. Further, since Annodex has CMML for time-aligned annotations, hyperlinks to other places, and textual descriptions (such as captions) can be accessed and used through php_annodex.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What is the project?&#039;&#039;&#039;&lt;br /&gt;
An initial version of [http://annodex.net/software/phpannodex/index.html php_annodex exists], but it is incomplete and not up-to-date. This is in comparison with such support in python through [http://annodex.net/taxonomy_menu/1/19 pyannodex]. A GSoC student would be expected to bring the support for Xiph and Annodex technology in php_annodex up-to-date. In addition, he/she could extend this work by also implementing media support in a plugin, e.g. the Drupal module [http://annodex.net/software/phpannodex/index.html Acidfree]. php_annodex is simply a php wrapper around the C-libraries libannodex and liboggz. It may suffice to just focus on liboggz.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===ruby_annodex: wrapper to libannodex or liboggz for doing media stuff===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Silvia Pfeiffer&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What is it?&#039;&#039;&#039;&lt;br /&gt;
Direct interaction with Ogg video and audio files from within a Web scripting language is key to providing further support to existing and new Web media applications. ruby_annodex can e.g. be used to extend rails with function calls to control opening, closing, seeking, playing, pausing, telling position and similar interactions with audio/video. Further, since Annodex has CMML for time-aligned annotations, hyperlinks to other places, and textual descriptions (such as captions) can be accessed and used through ruby_annodex.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What is the project?&#039;&#039;&#039;&lt;br /&gt;
A python wrapper of similar type called [http://annodex.net/taxonomy_menu/1/19 pyannodex] exists. The ruby_annodex wrapper should provide similar functionality to ruby, in particular with a view of using it from within rails for the development of Web applications. Development of an example application in ruby on rails would be part of this. Extension of this project to include media support into a ruby-based CMS is possible.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Using ROE to create multi-track Ogg files===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Silvia Pfeiffer ... and anyone else interested in ROE, e.g. Ralph Giles, Conrad Parker, Michael Dale, Shane Stephens&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What is it?&#039;&#039;&#039;&lt;br /&gt;
[http://trac.annodex.net/wiki/MovieDescriptionLanguage ROE] is a small XML description language for multi-track media files. It can be used for authoring multi-track media files from separate physical files on disk. It can also be used on a Web server to dynamically create multi-track media resources where the tracks are selected through the request from the client.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What is the project?&#039;&#039;&#039;&lt;br /&gt;
In this project, we only implement and experiment with the file multiplexing side of things. The ROE specification is very new and potentially incomplete, so part of the project will be to validate this specification. The other part will be to create an authoring tool that can take a ROE file, parse it, pull in all the input audio, video, text etc files and create an Ogg file with a Skeleton that contains the equivalent of ROE inside the binary file. The project will start with a focus on multiplexing vorbis audio and theora video, but also include speex, FLAC, CMML, and possibly MNG data. If this is achieved in a short time frame, the project can continue onto developing support for these multi-track files in e.g. vlc or ffmpeg. This can even extend to providing a full tool-chain from authoring captions for a video file, to creating the respective multitrack Ogg file, and finally to playing them back inside vlc where the captions are shown as overlays.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SHARE application for the Spread Open Media project===&lt;br /&gt;
&lt;br /&gt;
Mentor: Ivo Emanuel Gonçalves&amp;lt;br/&amp;gt;&lt;br /&gt;
Existing Feature Set: Spread Open Media is a community project to promote the different free formats for multimedia and otherwise.  SHARE is a pratical step to build on this community and spread more files.&lt;br /&gt;
&lt;br /&gt;
Proposed Development: SHARE is intended to be a PHP project.  We do not discard the possibility of using Rails or Python, but the current SOM server does not support these.  SHARE will be a WebJay-like clone, as in users will be able to register, vote, comment and upload their own XSPF playlists.  Basically, it is a playlist sharing application.  Using OpenID for registration and Cortado (an existing Java applet) for playback would be welcome additions.&lt;br /&gt;
&lt;br /&gt;
===Dirac support in liboggplay and liboggz===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentor:&#039;&#039;&#039; ??&lt;br /&gt;
&lt;br /&gt;
Right now [http://wiki.xiph.org/index.php/OggPlay liboggplay] only support Theora video. &lt;br /&gt;
Your aim for this project is to add support for [http://dirac.sourceforge.net/ Dirac],&lt;br /&gt;
this should be done using [http://www.diracvideo.org/ libschrodinger].&lt;br /&gt;
Doing this, you will add OggDirac support to the OggPlay Browser Plugin and the upcoming &amp;lt;video&amp;gt; tag support in Firefox.&lt;br /&gt;
&lt;br /&gt;
== Guidelines for Applying ==&lt;br /&gt;
&lt;br /&gt;
Remember that many people will apply to work on the Summer of Code.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that those of us evaluating your application do not know you, we do not know what kind of &lt;br /&gt;
experience you have, we do not know what you have done in the past and we have to pick the best people &lt;br /&gt;
suited for a particular task.&lt;br /&gt;
&lt;br /&gt;
Hence, it is very important that you tell us in your email why you should be considered to implement a &lt;br /&gt;
particular project. Please use the application template at [[Summer of Code Applications]] as a starting point.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
*[[CodingGuidelines]]&lt;br /&gt;
*[[MIT approach to design and implementation]]&lt;br /&gt;
*[[How to do a release]]&lt;br /&gt;
*[[Summer of Code 2007]]&lt;br /&gt;
*[[Summer of Code 2006]]&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Summer_of_Code_Mentoring&amp;diff=8686</id>
		<title>Summer of Code Mentoring</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Summer_of_Code_Mentoring&amp;diff=8686"/>
		<updated>2008-03-11T20:59:43Z</updated>

		<summary type="html">&lt;p&gt;Mdale: /* What criteria did you use to select these individuals as mentors? Please be as specific as possible. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Xiph.Org Application as a mentoring organization ==&lt;br /&gt;
&lt;br /&gt;
We need to apply for consideration as a mentoring organization 2008 March 3-12. Google lists the following questions in their [http://code.google.com/soc/2008/faqs.html#0.1_org_apply faq]. Our work-in-progress answers are inline.&lt;br /&gt;
&lt;br /&gt;
==== Describe your organization. ====&lt;br /&gt;
&lt;br /&gt;
[http://xiph.org Xiph.Org] is an open source project and non-profit corporation dedicated to providing open and free-to-implement multimedia technology as a foundation for an interoperable, level playing field on the internet and other digital distribution networks. Over the past 8 years we have developed most of the major patent-free audio and video codecs currently in use, including Vorbis, Speex, FLAC and Theora, as well as developing the Ogg streaming format, and the Icecast streaming media server.&lt;br /&gt;
&lt;br /&gt;
This year we are also coordinating projects for the [http://annodex.org Annodex association] under our umbrella. The [http://annodex.net/ Annodex project] &lt;br /&gt;
is developing a set of open specifications and open source software to allow the creation of hyperlinked Webs of audio and video integrated with the text-based view of the current Web. Toward this goal, Annodex has done a great deal of work developing tools, browser plugins and convenience libraries to facilitate adoption of Xiph.Org&#039;s lower-level technology. As such the two projects have largely aligned goals, but focus on different levels in the stack.&lt;br /&gt;
&lt;br /&gt;
==== Why is your organization applying to participate in GSoC 2008? What do you hope to gain by participating? ====&lt;br /&gt;
&lt;br /&gt;
We believe that Xiph.Org has a wide-ranging set of projects that are both challenging and educational for the students. Furthermore, they are important/useful goals for the wider technology community, and especially users of open source software.&lt;br /&gt;
&lt;br /&gt;
We believe that Xiph&#039;s mandate to develop multimedia standards and software is an important one, but we--of course--have limited resources. We hope that the results of GSoC will include the direct benefit of new software development, but also help grow the number of active participants in a long-term manner. Most of our core developers started as students, but just as many have moved on since their student days. Attracting and retaining students is essential to the health and sustainability of our project and is an important goal for all of us.&lt;br /&gt;
&lt;br /&gt;
==== Did your organization participate in past GSoCs? If so, please summarize your involvement and the successes and challenges of your participation. ====&lt;br /&gt;
&lt;br /&gt;
Xiph.Org was invited to participate in GSoc in both 2006 and 2007, and informally mentored Annodex-related projects as well.&lt;br /&gt;
&lt;br /&gt;
In 2006, we were granted funding for 6 slots. One we weren&#039;t able to fill because our chosen students picked or were assigned to other projects. &lt;br /&gt;
&lt;br /&gt;
Two were [http://code.google.com/soc/xiph/about.html successful]. One, a [http://code.google.com/soc/xiph/appinfo.html?csaid=5F9265EEC6FA0611 hardware implementation of a Theora decoder]: this project produced HDL implementation of the major decoder components, to be used with a general purpose CPU, such as the open source LEON sparc implementation. Real time playback of SD content was demonstrated using these components in combination with the proprietary Nagios cpu design. Two, [http://code.google.com/soc/xiph/appinfo.html?csaid=213E2D30F095565D implementation of OggSkeleton support] in various tools. We have maintained contact with the two successful students since the program finished. One has continued to contribute code outside the GSoC term, continuing related work.&lt;br /&gt;
&lt;br /&gt;
The remaining three were unsuccessful through lack of necessary skills, health complications, insufficient motivation, or some combination of all of these.&lt;br /&gt;
&lt;br /&gt;
In 2007, we were given 2 project slots. One was an extension of the hardware decoder effort from last year. The other was helping to do R&amp;amp;D on Xiph&#039;s next-generation audio codec, Ghost. Both were marginally successful - the students reached the minimum goals set, but little more, and did not maintain contact with Xiph.org after the program. &lt;br /&gt;
&lt;br /&gt;
We enjoyed our participation over the last two years. It provided needed external input, energizing our project and improving our connections to the rest of the open source community. We think we&#039;ve learnt a lot about how to mentor new and upcoming contributors, and how to best screen the applications we do receive.&lt;br /&gt;
&lt;br /&gt;
==== If your organization has not previously participated in GSoC, have you applied in the past? If so, for what year(s)? ====&lt;br /&gt;
&lt;br /&gt;
We have participated previously, in 2006 and 2007.&lt;br /&gt;
&lt;br /&gt;
==== Who will your organization administrator be? Please include Google Account information. ====&lt;br /&gt;
&lt;br /&gt;
Michael Smith has volunteered to be the primary admin this year. Google account mlrsmith@gmail.com.&lt;br /&gt;
&lt;br /&gt;
==== What license(s) does your project use? ====&lt;br /&gt;
&lt;br /&gt;
In general, we use a modified-BSD style license for our libraries, to enable the widest possible uses of our formats and reference implementations.&lt;br /&gt;
&lt;br /&gt;
Our applications are generally GPL but LGPL or (GPL-compatible) modified BSD is also acceptable.&lt;br /&gt;
&lt;br /&gt;
==== What is the URL for your ideas page? ====&lt;br /&gt;
&lt;br /&gt;
http://wiki.xiph.org/index.php/Summer_of_Code&lt;br /&gt;
&lt;br /&gt;
==== What is the main development mailing list or forum for your organization? ====&lt;br /&gt;
&lt;br /&gt;
We don&#039;t have a single central mailing list for all of Xiph.Org. Instead, we have per-project mailing lists; of these the most active is vorbis-dev@xiph.org. A complete listing of our lists is available at:&lt;br /&gt;
&lt;br /&gt;
http://lists.xiph.org/mailman/listinfo/&lt;br /&gt;
&lt;br /&gt;
The primary contact of the Annodex projects is [http://lists.annodex.net/ annodex-dev@lists.annodex.net]&lt;br /&gt;
&lt;br /&gt;
==== What is the main IRC channel for your organization? ====&lt;br /&gt;
&lt;br /&gt;
Our main channel is #xiph on irc.freenode.net. We also have project channels: #vorbis, #theora, #icecast, #speex and #annodex are the major ones.&lt;br /&gt;
&lt;br /&gt;
==== Does your organization have an application template you would like to see students use? If so, please provide it now. ====&lt;br /&gt;
&lt;br /&gt;
http://wiki.xiph.org/index.php/Summer_of_Code_Applications&lt;br /&gt;
&lt;br /&gt;
==== Who will be your backup organization administrator? Please include Google Account information. ====&lt;br /&gt;
&lt;br /&gt;
Ralph Giles will be the backup admin if no one else volunteers. Google account giles@xiph.org.&lt;br /&gt;
&lt;br /&gt;
==== Who will your mentors be? Please include Google Account information. ====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Mike Smith&#039;&#039;&#039;: google account mlrsmith@gmail.com&lt;br /&gt;
* &#039;&#039;&#039;Ralph Giles&#039;&#039;&#039;: google account giles@xiph.org&lt;br /&gt;
* &#039;&#039;&#039;Silvia Pfeiffer&#039;&#039;&#039;: google account silviapfeiffer1@gmail.com&lt;br /&gt;
* &#039;&#039;&#039;Christopher Montgomery&#039;&#039;&#039;: google account xiphmont@gmail.com&lt;br /&gt;
* &#039;&#039;&#039;Timothy Terriberry&#039;&#039;&#039;: google account tterribe@vt.edu&lt;br /&gt;
* &#039;&#039;&#039;Jean-Marc Valin&#039;&#039;&#039;: google account jmvalin@gmail.com&lt;br /&gt;
* &#039;&#039;&#039;Arek Korbik&#039;&#039;&#039;: google account arkadini@gmail.com&lt;br /&gt;
* &#039;&#039;&#039;Michael Dale&#039;&#039;&#039;: google account bigmammoth@gmail.com&lt;br /&gt;
&lt;br /&gt;
==== What criteria did you use to select these individuals as mentors? Please be as specific as possible. ====&lt;br /&gt;
&lt;br /&gt;
We selected our mentors from the &#039;core&#039; developers and contributors within Xiph. Mentors were selected based on how well they know the code area they&#039;re volunteering to mentor, how long they&#039;ve been part of Xiph, how well they interact with others (particularly in terms of building community around our projects).&lt;br /&gt;
&lt;br /&gt;
The majority of the mentors we&#039;ve selected are core developers on the various Xiph.Org sub-projects that they&#039;ve volunteered to mentor for. They have been contributing to Xiph.Org for at least several years, and have shown a persistent interest both in the software we develop, and in helping to create a community around it. We have also made sure that each mentor has sufficient time available to adequately mentor their student(s).&lt;br /&gt;
&lt;br /&gt;
Mike Smith has been involved with Xiph.Org and multimedia development since 2000 and remains one of our most involved core members. He helped write major portions of the vorbis-tools suite and the icecast streaming media server. He currently works as a developer at Fluendo.com on the GStreamer multimedia framework, flumotion (a streaming media server), and other multimedia software. &lt;br /&gt;
&lt;br /&gt;
Ralph Giles has been involved with Xiph.Org and multimedia development since 2000. He has contributed to tool development and the Theora video codec. He handles much of the coordination and administrative work for Xiph.Org. He mentored the successful &amp;quot;Hardware implementation of Theora decoding&amp;quot; project in GSoC 2006 and acted as an administrator.&lt;br /&gt;
&lt;br /&gt;
Silvia Pfeiffer is the founder of the Annodex project and president of the Annodex Association. She is the principle author of most of the Annodex specifications, RFC 3533 and  RFC 3534 describing the Ogg media format, and is heavily involved as an organizer in both the Xiph and Annodex projects. &lt;br /&gt;
Most recently she organized the [http://www.annodex.org/events/foms2007/ FOMS] developer summit and media recording for [http://lca2007.linux.org.au/ LCA 2007]. She helped mentor the successful &amp;quot;OggSkeleton support&amp;quot; project in GSoC 2006 and acted as an administrator during the application process.&lt;br /&gt;
&lt;br /&gt;
Christopher &amp;quot;Monty&amp;quot; Montgomery is the founder of Xiph.org, architect and lead developer of the Ogg Vorbis general purpose audio compression format. He has been doing open source development under the Xiph name since 1999. His current work focuses on development of a next-generation audio codec. He helped mentor a project related to this in GSoC 2006.&lt;br /&gt;
&lt;br /&gt;
Timothy Terriberry is the author of the Theora video codec specification and the author of the theora-exp implementation. He has been an active contributor since 2003. He mentored a Theora-related project in GSoC 2006.&lt;br /&gt;
&lt;br /&gt;
Jan is the author of the very widely used [http://v2v.cc/~j/ffmpeg2theora/ ffmpeg2theora] transcoding tool, and maintainer of the [http://v2v.cc v2v.cc] syndication website. He has been a project contributor since 2002.&lt;br /&gt;
&lt;br /&gt;
Conrad Parker is the author of the [http://www.annodex.net/software/liboggz/html/ liboggz] and [http://www.annodex.net/software/libfishsound/html/ libfishsound] convenience libraries and the [http://www.metadecks.org/software/sweep/ sweep] audio editor. He is heavily involved in the Annodex project and mentored the successful &amp;quot;OggSkeleton support&amp;quot; project in GSoC 2006.&lt;br /&gt;
&lt;br /&gt;
Jean-Marc Valin is the architect and lead developer of the Speex voice codec. He has been involved in Xiph.Org since 2002. He mentored an audio codec research project in GSoC 2006.&lt;br /&gt;
&lt;br /&gt;
Arek Korbik is the author of the [http://xiph.org/quicktime/ Xiph QuickTime Components]. He has been a project contributor since 2005.&lt;br /&gt;
&lt;br /&gt;
Michael Dale is the author of the [http://metavid.org MetaVidWiki] project which implements many of the annodex and xiph technologies as an extension to mediaWiki.&lt;br /&gt;
&lt;br /&gt;
==== What is your plan for dealing with disappearing students? ====&lt;br /&gt;
&lt;br /&gt;
Our first goal will be to provide necessary support from the community such that our students do not want to suddenly vanish. We want our students to become real members of the community, with ongoing contributions. That said, we&#039;re well aware of the possibility of a student disappearing.&lt;br /&gt;
&lt;br /&gt;
We intend to be reasonably strict with requiring students to keep in touch - whilst we&#039;re quite happy for them to be absent for a while if they let us know in advance, we will intend to get at least twice-weekly updates from each student. &lt;br /&gt;
&lt;br /&gt;
The mentors will have primary responsibility for their students, but the admins (Mike Smith and Ralph Giles) are also going to ensure that the mentors are indeed keeping track of what their students are up to. We&#039;ll ask our students to provide means for us to get in touch beyond email, where possible - phone, etc - in case we need to get in touch urgently.&lt;br /&gt;
&lt;br /&gt;
==== What is your plan for dealing with disappearing mentors? ====&lt;br /&gt;
&lt;br /&gt;
Our mentors are all people who are major contributors to the Xiph projects - and have generally been contributing for many years. So, we think it&#039;s pretty unlikely that a mentor will disappear. However, we do have more mentors available than we expect to eventually have students (based on past years), so we&#039;re well able to take up the slack if a mentor becomes unavailable for any reason.&lt;br /&gt;
&lt;br /&gt;
Our admins will ensure that the mentors are keeping up with the students appropriately, and should it be absolutely necessary, we will either find another appropriate mentor, or the admins (Mike and Ralph) will take over mentoring the students directly.&lt;br /&gt;
&lt;br /&gt;
==== What steps will you take to encourage students to interact with your project&#039;s community before, during and after the program? ====&lt;br /&gt;
&lt;br /&gt;
Xiph.Org conducts much of its development discussion and community-building on our IRC channels. We&#039;ll ask that the students be present there while they&#039;re working, where adequate network access makes that possible. We hope to make them feel that they&#039;re an important part of our community; that their contributions are really making a difference towards the goals of Xiph. &lt;br /&gt;
&lt;br /&gt;
We intend to be open to their contributions - whilst we&#039;re aware that initially their work may not be of a quality sufficient to go into our core codebase immediately, we&#039;ll give them write access to our repository to work on a branch. We&#039;ll ask them to be open in discussing and designing their contributions on IRC and our mailing lists. Our application template welcomes them to come and ask us questions when they&#039;re trying to write up their application. We hope that some, or even all, of the students will continue to be part of the Xiph community after SoC concludes. For those students who have not previously contributed to open source software, we&#039;ll teach them about how important community building is for the ongoing health of such projects.&lt;br /&gt;
&lt;br /&gt;
==== What will you do to ensure that your accepted students stick with the project after GSoC concludes? ====&lt;br /&gt;
&lt;br /&gt;
We hope that the mentoring process and the experiences they have as part of GSoC will make the students interested in remaining part of Xiph, continuing development on the software they&#039;ve been working on, and perhaps nurturing their patches towards inclusion in an actual release.&lt;br /&gt;
&lt;br /&gt;
A very important part of GSoC is for us to make them active members of the community, in particular on the irc channels and the mailing lists. Past experience tells that once they have become part of that community, they will stick around for longer.&lt;br /&gt;
&lt;br /&gt;
We will encourage them not to consider this just &amp;quot;a summer job&amp;quot;, but as being part of a real community - and doing something that is both interesting, and useful to the wider world.&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Summer_of_Code_Mentoring&amp;diff=8685</id>
		<title>Summer of Code Mentoring</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Summer_of_Code_Mentoring&amp;diff=8685"/>
		<updated>2008-03-11T20:59:31Z</updated>

		<summary type="html">&lt;p&gt;Mdale: /* What criteria did you use to select these individuals as mentors? Please be as specific as possible. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Xiph.Org Application as a mentoring organization ==&lt;br /&gt;
&lt;br /&gt;
We need to apply for consideration as a mentoring organization 2008 March 3-12. Google lists the following questions in their [http://code.google.com/soc/2008/faqs.html#0.1_org_apply faq]. Our work-in-progress answers are inline.&lt;br /&gt;
&lt;br /&gt;
==== Describe your organization. ====&lt;br /&gt;
&lt;br /&gt;
[http://xiph.org Xiph.Org] is an open source project and non-profit corporation dedicated to providing open and free-to-implement multimedia technology as a foundation for an interoperable, level playing field on the internet and other digital distribution networks. Over the past 8 years we have developed most of the major patent-free audio and video codecs currently in use, including Vorbis, Speex, FLAC and Theora, as well as developing the Ogg streaming format, and the Icecast streaming media server.&lt;br /&gt;
&lt;br /&gt;
This year we are also coordinating projects for the [http://annodex.org Annodex association] under our umbrella. The [http://annodex.net/ Annodex project] &lt;br /&gt;
is developing a set of open specifications and open source software to allow the creation of hyperlinked Webs of audio and video integrated with the text-based view of the current Web. Toward this goal, Annodex has done a great deal of work developing tools, browser plugins and convenience libraries to facilitate adoption of Xiph.Org&#039;s lower-level technology. As such the two projects have largely aligned goals, but focus on different levels in the stack.&lt;br /&gt;
&lt;br /&gt;
==== Why is your organization applying to participate in GSoC 2008? What do you hope to gain by participating? ====&lt;br /&gt;
&lt;br /&gt;
We believe that Xiph.Org has a wide-ranging set of projects that are both challenging and educational for the students. Furthermore, they are important/useful goals for the wider technology community, and especially users of open source software.&lt;br /&gt;
&lt;br /&gt;
We believe that Xiph&#039;s mandate to develop multimedia standards and software is an important one, but we--of course--have limited resources. We hope that the results of GSoC will include the direct benefit of new software development, but also help grow the number of active participants in a long-term manner. Most of our core developers started as students, but just as many have moved on since their student days. Attracting and retaining students is essential to the health and sustainability of our project and is an important goal for all of us.&lt;br /&gt;
&lt;br /&gt;
==== Did your organization participate in past GSoCs? If so, please summarize your involvement and the successes and challenges of your participation. ====&lt;br /&gt;
&lt;br /&gt;
Xiph.Org was invited to participate in GSoc in both 2006 and 2007, and informally mentored Annodex-related projects as well.&lt;br /&gt;
&lt;br /&gt;
In 2006, we were granted funding for 6 slots. One we weren&#039;t able to fill because our chosen students picked or were assigned to other projects. &lt;br /&gt;
&lt;br /&gt;
Two were [http://code.google.com/soc/xiph/about.html successful]. One, a [http://code.google.com/soc/xiph/appinfo.html?csaid=5F9265EEC6FA0611 hardware implementation of a Theora decoder]: this project produced HDL implementation of the major decoder components, to be used with a general purpose CPU, such as the open source LEON sparc implementation. Real time playback of SD content was demonstrated using these components in combination with the proprietary Nagios cpu design. Two, [http://code.google.com/soc/xiph/appinfo.html?csaid=213E2D30F095565D implementation of OggSkeleton support] in various tools. We have maintained contact with the two successful students since the program finished. One has continued to contribute code outside the GSoC term, continuing related work.&lt;br /&gt;
&lt;br /&gt;
The remaining three were unsuccessful through lack of necessary skills, health complications, insufficient motivation, or some combination of all of these.&lt;br /&gt;
&lt;br /&gt;
In 2007, we were given 2 project slots. One was an extension of the hardware decoder effort from last year. The other was helping to do R&amp;amp;D on Xiph&#039;s next-generation audio codec, Ghost. Both were marginally successful - the students reached the minimum goals set, but little more, and did not maintain contact with Xiph.org after the program. &lt;br /&gt;
&lt;br /&gt;
We enjoyed our participation over the last two years. It provided needed external input, energizing our project and improving our connections to the rest of the open source community. We think we&#039;ve learnt a lot about how to mentor new and upcoming contributors, and how to best screen the applications we do receive.&lt;br /&gt;
&lt;br /&gt;
==== If your organization has not previously participated in GSoC, have you applied in the past? If so, for what year(s)? ====&lt;br /&gt;
&lt;br /&gt;
We have participated previously, in 2006 and 2007.&lt;br /&gt;
&lt;br /&gt;
==== Who will your organization administrator be? Please include Google Account information. ====&lt;br /&gt;
&lt;br /&gt;
Michael Smith has volunteered to be the primary admin this year. Google account mlrsmith@gmail.com.&lt;br /&gt;
&lt;br /&gt;
==== What license(s) does your project use? ====&lt;br /&gt;
&lt;br /&gt;
In general, we use a modified-BSD style license for our libraries, to enable the widest possible uses of our formats and reference implementations.&lt;br /&gt;
&lt;br /&gt;
Our applications are generally GPL but LGPL or (GPL-compatible) modified BSD is also acceptable.&lt;br /&gt;
&lt;br /&gt;
==== What is the URL for your ideas page? ====&lt;br /&gt;
&lt;br /&gt;
http://wiki.xiph.org/index.php/Summer_of_Code&lt;br /&gt;
&lt;br /&gt;
==== What is the main development mailing list or forum for your organization? ====&lt;br /&gt;
&lt;br /&gt;
We don&#039;t have a single central mailing list for all of Xiph.Org. Instead, we have per-project mailing lists; of these the most active is vorbis-dev@xiph.org. A complete listing of our lists is available at:&lt;br /&gt;
&lt;br /&gt;
http://lists.xiph.org/mailman/listinfo/&lt;br /&gt;
&lt;br /&gt;
The primary contact of the Annodex projects is [http://lists.annodex.net/ annodex-dev@lists.annodex.net]&lt;br /&gt;
&lt;br /&gt;
==== What is the main IRC channel for your organization? ====&lt;br /&gt;
&lt;br /&gt;
Our main channel is #xiph on irc.freenode.net. We also have project channels: #vorbis, #theora, #icecast, #speex and #annodex are the major ones.&lt;br /&gt;
&lt;br /&gt;
==== Does your organization have an application template you would like to see students use? If so, please provide it now. ====&lt;br /&gt;
&lt;br /&gt;
http://wiki.xiph.org/index.php/Summer_of_Code_Applications&lt;br /&gt;
&lt;br /&gt;
==== Who will be your backup organization administrator? Please include Google Account information. ====&lt;br /&gt;
&lt;br /&gt;
Ralph Giles will be the backup admin if no one else volunteers. Google account giles@xiph.org.&lt;br /&gt;
&lt;br /&gt;
==== Who will your mentors be? Please include Google Account information. ====&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Mike Smith&#039;&#039;&#039;: google account mlrsmith@gmail.com&lt;br /&gt;
* &#039;&#039;&#039;Ralph Giles&#039;&#039;&#039;: google account giles@xiph.org&lt;br /&gt;
* &#039;&#039;&#039;Silvia Pfeiffer&#039;&#039;&#039;: google account silviapfeiffer1@gmail.com&lt;br /&gt;
* &#039;&#039;&#039;Christopher Montgomery&#039;&#039;&#039;: google account xiphmont@gmail.com&lt;br /&gt;
* &#039;&#039;&#039;Timothy Terriberry&#039;&#039;&#039;: google account tterribe@vt.edu&lt;br /&gt;
* &#039;&#039;&#039;Jean-Marc Valin&#039;&#039;&#039;: google account jmvalin@gmail.com&lt;br /&gt;
* &#039;&#039;&#039;Arek Korbik&#039;&#039;&#039;: google account arkadini@gmail.com&lt;br /&gt;
* &#039;&#039;&#039;Michael Dale&#039;&#039;&#039;: google account bigmammoth@gmail.com&lt;br /&gt;
&lt;br /&gt;
==== What criteria did you use to select these individuals as mentors? Please be as specific as possible. ====&lt;br /&gt;
&lt;br /&gt;
We selected our mentors from the &#039;core&#039; developers and contributors within Xiph. Mentors were selected based on how well they know the code area they&#039;re volunteering to mentor, how long they&#039;ve been part of Xiph, how well they interact with others (particularly in terms of building community around our projects).&lt;br /&gt;
&lt;br /&gt;
The majority of the mentors we&#039;ve selected are core developers on the various Xiph.Org sub-projects that they&#039;ve volunteered to mentor for. They have been contributing to Xiph.Org for at least several years, and have shown a persistent interest both in the software we develop, and in helping to create a community around it. We have also made sure that each mentor has sufficient time available to adequately mentor their student(s).&lt;br /&gt;
&lt;br /&gt;
Mike Smith has been involved with Xiph.Org and multimedia development since 2000 and remains one of our most involved core members. He helped write major portions of the vorbis-tools suite and the icecast streaming media server. He currently works as a developer at Fluendo.com on the GStreamer multimedia framework, flumotion (a streaming media server), and other multimedia software. &lt;br /&gt;
&lt;br /&gt;
Ralph Giles has been involved with Xiph.Org and multimedia development since 2000. He has contributed to tool development and the Theora video codec. He handles much of the coordination and administrative work for Xiph.Org. He mentored the successful &amp;quot;Hardware implementation of Theora decoding&amp;quot; project in GSoC 2006 and acted as an administrator.&lt;br /&gt;
&lt;br /&gt;
Silvia Pfeiffer is the founder of the Annodex project and president of the Annodex Association. She is the principle author of most of the Annodex specifications, RFC 3533 and  RFC 3534 describing the Ogg media format, and is heavily involved as an organizer in both the Xiph and Annodex projects. &lt;br /&gt;
Most recently she organized the [http://www.annodex.org/events/foms2007/ FOMS] developer summit and media recording for [http://lca2007.linux.org.au/ LCA 2007]. She helped mentor the successful &amp;quot;OggSkeleton support&amp;quot; project in GSoC 2006 and acted as an administrator during the application process.&lt;br /&gt;
&lt;br /&gt;
Christopher &amp;quot;Monty&amp;quot; Montgomery is the founder of Xiph.org, architect and lead developer of the Ogg Vorbis general purpose audio compression format. He has been doing open source development under the Xiph name since 1999. His current work focuses on development of a next-generation audio codec. He helped mentor a project related to this in GSoC 2006.&lt;br /&gt;
&lt;br /&gt;
Timothy Terriberry is the author of the Theora video codec specification and the author of the theora-exp implementation. He has been an active contributor since 2003. He mentored a Theora-related project in GSoC 2006.&lt;br /&gt;
&lt;br /&gt;
Jan is the author of the very widely used [http://v2v.cc/~j/ffmpeg2theora/ ffmpeg2theora] transcoding tool, and maintainer of the [http://v2v.cc v2v.cc] syndication website. He has been a project contributor since 2002.&lt;br /&gt;
&lt;br /&gt;
Conrad Parker is the author of the [http://www.annodex.net/software/liboggz/html/ liboggz] and [http://www.annodex.net/software/libfishsound/html/ libfishsound] convenience libraries and the [http://www.metadecks.org/software/sweep/ sweep] audio editor. He is heavily involved in the Annodex project and mentored the successful &amp;quot;OggSkeleton support&amp;quot; project in GSoC 2006.&lt;br /&gt;
&lt;br /&gt;
Jean-Marc Valin is the architect and lead developer of the Speex voice codec. He has been involved in Xiph.Org since 2002. He mentored an audio codec research project in GSoC 2006.&lt;br /&gt;
&lt;br /&gt;
Arek Korbik is the author of the [http://xiph.org/quicktime/ Xiph QuickTime Components]. He has been a project contributor since 2005.&lt;br /&gt;
&lt;br /&gt;
Michael Dale is the author of the [[http://metavid.org MetaVidWiki] project which implements many of the annodex and xiph technologies as an extension to mediaWiki.&lt;br /&gt;
&lt;br /&gt;
==== What is your plan for dealing with disappearing students? ====&lt;br /&gt;
&lt;br /&gt;
Our first goal will be to provide necessary support from the community such that our students do not want to suddenly vanish. We want our students to become real members of the community, with ongoing contributions. That said, we&#039;re well aware of the possibility of a student disappearing.&lt;br /&gt;
&lt;br /&gt;
We intend to be reasonably strict with requiring students to keep in touch - whilst we&#039;re quite happy for them to be absent for a while if they let us know in advance, we will intend to get at least twice-weekly updates from each student. &lt;br /&gt;
&lt;br /&gt;
The mentors will have primary responsibility for their students, but the admins (Mike Smith and Ralph Giles) are also going to ensure that the mentors are indeed keeping track of what their students are up to. We&#039;ll ask our students to provide means for us to get in touch beyond email, where possible - phone, etc - in case we need to get in touch urgently.&lt;br /&gt;
&lt;br /&gt;
==== What is your plan for dealing with disappearing mentors? ====&lt;br /&gt;
&lt;br /&gt;
Our mentors are all people who are major contributors to the Xiph projects - and have generally been contributing for many years. So, we think it&#039;s pretty unlikely that a mentor will disappear. However, we do have more mentors available than we expect to eventually have students (based on past years), so we&#039;re well able to take up the slack if a mentor becomes unavailable for any reason.&lt;br /&gt;
&lt;br /&gt;
Our admins will ensure that the mentors are keeping up with the students appropriately, and should it be absolutely necessary, we will either find another appropriate mentor, or the admins (Mike and Ralph) will take over mentoring the students directly.&lt;br /&gt;
&lt;br /&gt;
==== What steps will you take to encourage students to interact with your project&#039;s community before, during and after the program? ====&lt;br /&gt;
&lt;br /&gt;
Xiph.Org conducts much of its development discussion and community-building on our IRC channels. We&#039;ll ask that the students be present there while they&#039;re working, where adequate network access makes that possible. We hope to make them feel that they&#039;re an important part of our community; that their contributions are really making a difference towards the goals of Xiph. &lt;br /&gt;
&lt;br /&gt;
We intend to be open to their contributions - whilst we&#039;re aware that initially their work may not be of a quality sufficient to go into our core codebase immediately, we&#039;ll give them write access to our repository to work on a branch. We&#039;ll ask them to be open in discussing and designing their contributions on IRC and our mailing lists. Our application template welcomes them to come and ask us questions when they&#039;re trying to write up their application. We hope that some, or even all, of the students will continue to be part of the Xiph community after SoC concludes. For those students who have not previously contributed to open source software, we&#039;ll teach them about how important community building is for the ongoing health of such projects.&lt;br /&gt;
&lt;br /&gt;
==== What will you do to ensure that your accepted students stick with the project after GSoC concludes? ====&lt;br /&gt;
&lt;br /&gt;
We hope that the mentoring process and the experiences they have as part of GSoC will make the students interested in remaining part of Xiph, continuing development on the software they&#039;ve been working on, and perhaps nurturing their patches towards inclusion in an actual release.&lt;br /&gt;
&lt;br /&gt;
A very important part of GSoC is for us to make them active members of the community, in particular on the irc channels and the mailing lists. Past experience tells that once they have become part of that community, they will stick around for longer.&lt;br /&gt;
&lt;br /&gt;
We will encourage them not to consider this just &amp;quot;a summer job&amp;quot;, but as being part of a real community - and doing something that is both interesting, and useful to the wider world.&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Summer_of_Code_2008&amp;diff=8684</id>
		<title>Summer of Code 2008</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Summer_of_Code_2008&amp;diff=8684"/>
		<updated>2008-03-11T20:56:09Z</updated>

		<summary type="html">&lt;p&gt;Mdale: /* Current Ideas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is  our ideas page for [http://code.google.com/soc/ Google Summer of Code] projects with [http://xiph.org Xiph.org] and [http://annodex.org/ Annodex]. The two projects participate jointly this year under Xiph&#039;s name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Students&#039;&#039;&#039; please use the template at [[Summer of Code Applications]] when applying for a GSoC position.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentors&#039;&#039;&#039; please visit [[Summer of Code Mentoring]] and help us prepare our application as a mentoring organization.&lt;br /&gt;
&lt;br /&gt;
== Current Ideas ==&lt;br /&gt;
&lt;br /&gt;
We need a primary and backup mentor volunteer for any project that is to become an official proposal, but submit something and we&#039;ll see who we can round up. :)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Project ideas go here&#039;&#039;&lt;br /&gt;
* Transcode/Tag/Upload tool for Theora et al. (ideally as a firefox extension so web cms integration is easy) &#039;&#039;&#039;OggPusher&#039;&#039;&#039; details below:&lt;br /&gt;
* Theora encoding support in GIMP&lt;br /&gt;
* Speex support in IceS&lt;br /&gt;
* Better stream source gui for dvswitch&lt;br /&gt;
* Multiplexing support (so one can play audio from video files) in ogg123&lt;br /&gt;
:Isn&#039;t this already done with the vorbisfile support in 1.2.0?&lt;br /&gt;
::At first, I thought it wasn&#039;t but that&#039;s because I tested with a 2.3 GB film and it didn&#039;t work.  Smaller files work just fine, which makes me believe there&#039;s a bug somewhere that needs to be found.  Anyway, we can remove this entry.--Ivo&lt;br /&gt;
:::2.3 GB is just above what can be represented as bytes on a signed 32 bit int - clue to the bug ? --[[User:Ogg.k.ogg.k|Ogg.k.ogg.k]]&lt;br /&gt;
* XSPF support in ogg123 and oggenc (playlist creation)&lt;br /&gt;
* Initial support for OggPCM in some of our tools&lt;br /&gt;
* OggMNG tools&lt;br /&gt;
:Is this really necessary?  I mean, OggMNG seems to have gone nowhere and serve no niche.--Ivo&lt;br /&gt;
* php_annodex: wrapper to libannodex or liboggz for doing media stuff (Silvia)&lt;br /&gt;
* ruby_annodex: wrapper to libannodex or liboggz for doing media stuff (Silvia)&lt;br /&gt;
* ROE implementation for files: using ROE as the input format to a generic multi-track ogg authoring tool using skeleton (Silvia)&lt;br /&gt;
* ROE implementation for network: using ROE in a client-server negotiation to dynamically request a specific multi-track ogg file using skeleton (Silvia)&lt;br /&gt;
* create Ogg caption support for vlc using CMML (Silvia)&lt;br /&gt;
* ffmpeg improvements for Xiph.Org codecs:&lt;br /&gt;
** add Speex support&lt;br /&gt;
** add Ogg Skeleton support&lt;br /&gt;
** fix seeking bugs involving Ogg Theora&lt;br /&gt;
&lt;br /&gt;
==Detailed Project Description==&lt;br /&gt;
&lt;br /&gt;
===Mv_Embed: Accessibility and [re]usability:===&lt;br /&gt;
&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Michael Dale, Anna (EngageMedia) &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Existing Feature Set:&#039;&#039;&#039; [http://metavid.ucsc.edu/wiki/index.php/Mv_Embed Mv_Embed] is an existing javascript library that takes html5 &amp;lt;video&amp;gt; tag and rewrites the video tag for to support in-page ogg theora playback in contemporary browsers. MV_embed supports may browsers and plugins including: native browser support such as firefox 3 video builds, oggplay plugin for firefox2 in win, mac, linux ; VLC activX/plugin for win IE, firefox, and mac, linux firefox; mplayer &amp;amp; totem for linux; and java cortado for microsoft, sun, apple java VM for IE, firefox &amp;amp; safari. Mv_embed maps all these plugin javascript systems to a ~near~ html5 spec api enabling web application developers to take advantage of a uniform javascript API for video control and interaction without having to worry about the underling plugin systems. Mv_Embed is used as part of the metavidWiki Project (screen cast).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Proposed Development:&#039;&#039;&#039; Mv_Embed will be enhanced around two goals integration into prominent open source Content Management Systems and better accessibility of close captions and associative video metadata.&lt;br /&gt;
&lt;br /&gt;
Mv_Embed will integrate into existing CMS video extensions for quick &amp;quot;one-off&amp;quot; ogg theora support.&lt;br /&gt;
* FilmForge (Drupal)&lt;br /&gt;
* ShowInABox (Wordpress)&lt;br /&gt;
* Plumi (Plone)&lt;br /&gt;
&lt;br /&gt;
Additional server side components like transcoding to theora, generating thumbnails, and exporting metadata will also be developed. Where time / resources permit server side hooks into ffmepg2theora (for transcoding) and mplayer (for generating thumbnails) will be developed for the CMS systems as well. As OggPusher matures simple hooks will be added to the CMS&#039;s to support direct ogg theora clip uploads.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Accessibility &amp;amp; CMML&#039;&#039;&#039;&lt;br /&gt;
Accessible components of mv_embed consist of obtaining the metadata and putting it into the dom as a child of the video element. Mv_Embed will  offer a reference javascript interface for client interactions with that metadata. The metadata will be structured in Continues Media Markup Language (CMML). CMML is a part of the annodex technology set and can either be muxed into the ogg stream or be requested separately via XML. Mv_Embed will negotiate a transport method for the metadata that will work for the given plugin type.(Currently only oggplay plugin supports ogg-skeleton and exposing muxed CMML tracks in the ogg stream).&lt;br /&gt;
&lt;br /&gt;
Mv_Embed is part of [http://metavid.ucsc.edu/wiki/index.php/MetaVidWiki MetavidWiki] enables community authored transcripts and exposes these multiple layers in CMML. Proposed work on Mv_Embed will generalize these development efforts taking place in the metavid project for other CMS&#039;s and improve the usability and accessibility of these metadata layers in javascript based interfaces and mutil-plugin playback environment.&lt;br /&gt;
&lt;br /&gt;
===OggPusher===&lt;br /&gt;
&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Michael Dale ... or anyone else with more experience with firefox extensions/ffmpeg2theora ? &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Abstract:&#039;&#039;&#039; OggPusher is a proposed cross platform packaging of ffmpeg2theora as a browser extension. This exposes JavaScript hooks to web applications enabling easy client side transcodes from high quality source originals such as DV or MPEG2 and uploading into web based content management systems.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Sample Application Flow:&#039;&#039;&#039; is as follows: A user visits a oggPusher enabled web service. The firefox user is prompted to install a browser extension via firefox&#039;s .xpi extension framework. Once enabled, the web service upload interface does a call to the oggPusher to expose a &amp;quot;open file&amp;quot; dialog box on the client. The websevice access the oggPusher api to set the requested transcode bitrate and other transcode options (such as interlace, number of audio channels, resolution etc).  The client selects the high quality local file and begins transcoding to a temporary location on local disk. If there is an error in transcoding the upload is aborted and an error is exposed to web application.  Once the file is done transcoding, the web interface has the client issue a POST of the transcoded file.(if the server supports more efficient PUT than that can be used). The amount of the file that has been transcoded and the amount uploaded are exposed via javascript hooks so that web application javascript interface can update the client on upload progress.  If the the upload connection is reset a ajax request on the client can request &amp;quot;bytes upload so far&amp;quot; from the server and have oggPusher begin uploading from that point in the temporary local ogg file. A local file hash could be rechecked to insure the local file has not changed. The server can then do a simple join on the uploaded pieces, enabling reusable uploads over existing http protocol. If the server does not support resumes the file will be uploaded from the start.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Features for initial Release:&#039;&#039;&#039;&lt;br /&gt;
* A .xpi extension based on ffmpeg2theoa that supports uploading of local files of any type that ffmpeg accepts.&lt;br /&gt;
* Supports two modes of operation&lt;br /&gt;
** zero server side config where oggPusher just gives the option of uploading theora video where it finds a form file input type.&lt;br /&gt;
** server side config where the server/service hooks into oggPusher for extra functionality, like resuming transferrer and status updates integrated with the web application.&lt;br /&gt;
* A simple javascript api for controlling ffmpeg2theora encoding options. These options will be pre-demerited and javascript input will be scrubbed to avoid client side security risks.&lt;br /&gt;
* A set of javascript hooks for oggPusher that expose upload progress, encoding progress and transcoding errors.&lt;br /&gt;
* A sample server side implementation using php/html/javascript for grabbing ogg files from oggPusher.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Future Feature RoadMap:&#039;&#039;&#039;&lt;br /&gt;
Once the basic implementation has been deployed the following features will be targeted for future versions:&lt;br /&gt;
&lt;br /&gt;
* Integration with popular open source CMS&#039;s first target is mediaWiki.&lt;br /&gt;
* Hooks for connecting into &amp;quot;live&amp;quot; interfaces such as firewire digital video input or USB web cams.&lt;br /&gt;
** Extend oggfwd and server side components for in browser live streaming to web services.&lt;br /&gt;
* Extend to support ffmpeg2Dirac and future open source media codecs.&lt;br /&gt;
* Enable javascript hooks for grabbing highquality jpg or png screen grabs from the original source to be uploaded alongside the encoded video.&lt;br /&gt;
* Enable Bittorrent uploads&lt;br /&gt;
&lt;br /&gt;
== Guidelines for Applying ==&lt;br /&gt;
&lt;br /&gt;
Remember that many people will apply to work on the Summer of Code.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that those of us evaluating your application do not know you, we do not know what kind of &lt;br /&gt;
experience you have, we do not know what you have done in the past and we have to pick the best people &lt;br /&gt;
suited for a particular task.&lt;br /&gt;
&lt;br /&gt;
Hence, it is very important that you tell us in your email why you should be considered to implement a &lt;br /&gt;
particular project. Please use the application template at [[Summer of Code Applications]] as a starting point.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
*[[CodingGuidelines]]&lt;br /&gt;
*[[MIT approach to design and implementation]]&lt;br /&gt;
*[[How to do a release]]&lt;br /&gt;
*[[Summer of Code 2007]]&lt;br /&gt;
*[[Summer of Code 2006]]&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Summer_of_Code_2008&amp;diff=8661</id>
		<title>Summer of Code 2008</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Summer_of_Code_2008&amp;diff=8661"/>
		<updated>2008-03-04T19:07:03Z</updated>

		<summary type="html">&lt;p&gt;Mdale: /* Mv_Embed: Accessibility and [re]usability: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is  our ideas page for [http://code.google.com/soc/ Google Summer of Code] projects with [http://xiph.org Xiph.org] and [http://annodex.org/ Annodex]. The two projects participate jointly this year under Xiph&#039;s name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Students&#039;&#039;&#039; please use the template at [[Summer of Code Applications]] when applying for a GSoC position.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentors&#039;&#039;&#039; please visit [[Summer of Code Mentoring]] and help us prepare our application as a mentoring organization.&lt;br /&gt;
&lt;br /&gt;
== Current Ideas ==&lt;br /&gt;
&lt;br /&gt;
We need a primary and backup mentor volunteer for any project that is to become an official proposal, but submit something and we&#039;ll see who we can round up. :)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Project ideas go here&#039;&#039;&lt;br /&gt;
* Transcode/Tag/Upload tool for Theora et al. (ideally as a firefox extension so web cms integration is easy)&lt;br /&gt;
* Theora encoding support in GIMP&lt;br /&gt;
* Speex support in IceS&lt;br /&gt;
* Better stream source gui for dvswitch&lt;br /&gt;
* Multiplexing support (so one can play audio from video files)&lt;br /&gt;
 - Isn&#039;t this already done with the vorbisfile support in 1.2.0?&lt;br /&gt;
* XSPF support in ogg123, other players&lt;br /&gt;
* Initial support for OggPCM in some of our tools&lt;br /&gt;
* OggMNG tools&lt;br /&gt;
&lt;br /&gt;
==Detailed Project Description==&lt;br /&gt;
&lt;br /&gt;
===Mv_Embed: Accessibility and [re]usability:===&lt;br /&gt;
&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Michael Dale, Anna (EngageMedia) &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Existing Feature Set:&#039;&#039;&#039; [http://metavid.ucsc.edu/wiki/index.php/Mv_Embed Mv_Embed] is an existing javascript library that takes html5 &amp;lt;video&amp;gt; tag and rewrites the video tag for to support in-page ogg theora playback in contemporary browsers. MV_embed supports may browsers and plugins including: native browser support such as firefox 3 video builds, oggplay plugin for firefox2 in win, mac, linux ; VLC activX/plugin for win IE, firefox, and mac, linux firefox; mplayer &amp;amp; totem for linux; and java cortado for microsoft, sun, apple java VM for IE, firefox &amp;amp; safari. Mv_embed maps all these plugin javascript systems to a ~near~ html5 spec api enabling web application developers to take advantage of a uniform javascript API for video control and interaction without having to worry about the underling plugin systems. Mv_Embed is used as part of the metavidWiki Project (screen cast).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Proposed Development:&#039;&#039;&#039; Mv_Embed will be enhanced around two goals integration into prominent open source Content Management Systems and better accessibility of close captions and associative video metadata.&lt;br /&gt;
&lt;br /&gt;
Mv_Embed will integrate into existing CMS video extensions for quick &amp;quot;one-off&amp;quot; ogg theora support.&lt;br /&gt;
* FilmForge (Drupal)&lt;br /&gt;
* ShowInABox (Wordpress)&lt;br /&gt;
* Plumi (Plone)&lt;br /&gt;
&lt;br /&gt;
Additional server side components like transcoding to theora, generating thumbnails, and exporting metadata will also be developed. Where time / resources permit server side hooks into ffmepg2theora (for transcoding) and mplayer (for generating thumbnails) will be developed for the CMS systems as well. As OggPusher matures simple hooks will be added to the CMS&#039;s to support direct ogg theora clip uploads.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Accessibility &amp;amp; CMML&#039;&#039;&#039;&lt;br /&gt;
Accessible components of mv_embed consist of obtaining the metadata and putting it into the dom as a child of the video element. Mv_Embed will  offer a reference javascript interface for client interactions with that metadata. The metadata will be structured in Continues Media Markup Language (CMML). CMML is a part of the annodex technology set and can either be muxed into the ogg stream or be requested separately via XML. Mv_Embed will negotiate a transport method for the metadata that will work for the given plugin type.(Currently only oggplay plugin supports ogg-skeleton and exposing muxed CMML tracks in the ogg stream).&lt;br /&gt;
&lt;br /&gt;
Mv_Embed is part of [http://metavid.ucsc.edu/wiki/index.php/MetaVidWiki MetavidWiki] enables community authored transcripts and exposes these multiple layers in CMML. Proposed work on Mv_Embed will generalize these development efforts taking place in the metavid project for other CMS&#039;s and improve the usability and accessibility of these metadata layers in javascript based interfaces and mutil-plugin playback environment.&lt;br /&gt;
&lt;br /&gt;
===OggPusher===&lt;br /&gt;
&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Michael Dale ... or anyone else with more experience with firefox extensions/ffmpeg2theora ? &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Abstract:&#039;&#039;&#039; OggPusher is a proposed cross platform packaging of ffmpeg2theora as a browser extension. This exposes JavaScript hooks to web applications enabling easy client side transcodes from high quality source originals such as DV or MPEG2 and uploading into web based content management systems.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Sample Application Flow:&#039;&#039;&#039; is as follows: A user visits a oggPusher enabled web service. The firefox user is prompted to install a browser extension via firefox&#039;s .xpi extension framework. Once enabled, the web service upload interface does a call to the oggPusher to expose a &amp;quot;open file&amp;quot; dialog box on the client. The websevice access the oggPusher api to set the requested transcode bitrate and other transcode options (such as interlace, number of audio channels, resolution etc).  The client selects the high quality local file and begins transcoding to a temporary location on local disk. If there is an error in transcoding the upload is aborted and an error is exposed to web application.  Once the file is done transcoding, the web interface has the client issue a POST of the transcoded file.(if the server supports more efficient PUT than that can be used). The amount of the file that has been transcoded and the amount uploaded are exposed via javascript hooks so that web application javascript interface can update the client on upload progress.  If the the upload connection is reset a ajax request on the client can request &amp;quot;bytes upload so far&amp;quot; from the server and have oggPusher begin uploading from that point in the temporary local ogg file. A local file hash could be rechecked to insure the local file has not changed. The server can then do a simple join on the uploaded pieces, enabling reusable uploads over existing http protocol. If the server does not support resumes the file will be uploaded from the start.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Features for initial Release:&#039;&#039;&#039;&lt;br /&gt;
* A .xpi extension based on ffmpeg2theoa that supports uploading of local files of any type that ffmpeg accepts.&lt;br /&gt;
* Supports two modes of operation&lt;br /&gt;
** zero server side config where oggPusher just gives the option of uploading theora video where it finds a form file input type.&lt;br /&gt;
** server side config where the server/service hooks into oggPusher for extra functionality, like resuming transferrer and status updates integrated with the web application.&lt;br /&gt;
* A simple javascript api for controlling ffmpeg2theora encoding options. These options will be pre-demerited and javascript input will be scrubbed to avoid client side security risks.&lt;br /&gt;
* A set of javascript hooks for oggPusher that expose upload progress, encoding progress and transcoding errors.&lt;br /&gt;
* A sample server side implementation using php/html/javascript for grabbing ogg files from oggPusher.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Future Feature RoadMap:&#039;&#039;&#039;&lt;br /&gt;
Once the basic implementation has been deployed the following features will be targeted for future versions:&lt;br /&gt;
&lt;br /&gt;
* Integration with popular open source CMS&#039;s first target is mediaWiki.&lt;br /&gt;
* Hooks for connecting into &amp;quot;live&amp;quot; interfaces such as firewire digital video input or USB web cams.&lt;br /&gt;
** Extend oggfwd and server side components for in browser live streaming to web services.&lt;br /&gt;
* Extend to support ffmpeg2Dirac and future open source media codecs.&lt;br /&gt;
* Enable javascript hooks for grabbing highquality jpg or png screen grabs from the original source to be uploaded alongside the encoded video.&lt;br /&gt;
* Enable Bittorrent uploads&lt;br /&gt;
&lt;br /&gt;
== Guidelines for Applying ==&lt;br /&gt;
&lt;br /&gt;
Remember that many people will apply to work on the Summer of Code.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that those of us evaluating your application do not know you, we do not know what kind of &lt;br /&gt;
experience you have, we do not know what you have done in the past and we have to pick the best people &lt;br /&gt;
suited for a particular task.&lt;br /&gt;
&lt;br /&gt;
Hence, it is very important that you tell us in your email why you should be considered to implement a &lt;br /&gt;
particular project. Please use the application template at [[Summer of Code Applications]] as a starting point.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
*[[CodingGuidelines]]&lt;br /&gt;
*[[MIT approach to design and implementation]]&lt;br /&gt;
*[[How to do a release]]&lt;br /&gt;
*[[Summer of Code 2007]]&lt;br /&gt;
*[[Summer of Code 2006]]&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Summer_of_Code_2008&amp;diff=8660</id>
		<title>Summer of Code 2008</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Summer_of_Code_2008&amp;diff=8660"/>
		<updated>2008-03-04T18:59:07Z</updated>

		<summary type="html">&lt;p&gt;Mdale: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is  our ideas page for [http://code.google.com/soc/ Google Summer of Code] projects with [http://xiph.org Xiph.org] and [http://annodex.org/ Annodex]. The two projects participate jointly this year under Xiph&#039;s name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Students&#039;&#039;&#039; please use the template at [[Summer of Code Applications]] when applying for a GSoC position.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentors&#039;&#039;&#039; please visit [[Summer of Code Mentoring]] and help us prepare our application as a mentoring organization.&lt;br /&gt;
&lt;br /&gt;
== Current Ideas ==&lt;br /&gt;
&lt;br /&gt;
We need a primary and backup mentor volunteer for any project that is to become an official proposal, but submit something and we&#039;ll see who we can round up. :)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Project ideas go here&#039;&#039;&lt;br /&gt;
* Transcode/Tag/Upload tool for Theora et al. (ideally as a firefox extension so web cms integration is easy)&lt;br /&gt;
* Theora encoding support in GIMP&lt;br /&gt;
* Speex support in IceS&lt;br /&gt;
* Better stream source gui for dvswitch&lt;br /&gt;
* Multiplexing support (so one can play audio from video files)&lt;br /&gt;
 - Isn&#039;t this already done with the vorbisfile support in 1.2.0?&lt;br /&gt;
* XSPF support in ogg123, other players&lt;br /&gt;
* Initial support for OggPCM in some of our tools&lt;br /&gt;
* OggMNG tools&lt;br /&gt;
&lt;br /&gt;
==Detailed Project Description==&lt;br /&gt;
&lt;br /&gt;
===Mv_Embed: Accessibility and [re]usability:===&lt;br /&gt;
&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Michael Dale&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Existing Feature Set:&#039;&#039;&#039; [http://metavid.ucsc.edu/wiki/index.php/Mv_Embed Mv_Embed] is an existing javascript library that takes html5 &amp;lt;video&amp;gt; tag and rewrites the video tag for to support in-page ogg theora playback in contemporary browsers. MV_embed supports may browsers and plugins including: native browser support such as firefox 3 video builds, oggplay plugin for firefox2 in win, mac, linux ; VLC activX/plugin for win IE, firefox, and mac, linux firefox; mplayer &amp;amp; totem for linux; and java cortado for microsoft, sun, apple java VM for IE, firefox &amp;amp; safari. Mv_embed maps all these plugin javascript systems to a ~near~ html5 spec api enabling web application developers to take advantage of a uniform javascript API for video control and interaction without having to worry about the underling plugin systems. Mv_Embed is used as part of the metavidWiki Project (screen cast).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Proposed Development:&#039;&#039;&#039; Mv_Embed will be enhanced around two goals integration into prominent open source Content Management Systems and better accessibility of close captions and associative video metadata.&lt;br /&gt;
&lt;br /&gt;
Mv_Embed will integrate into existing CMS video extensions for quick &amp;quot;one-off&amp;quot; ogg theora support.&lt;br /&gt;
* FilmForge (Drupal)&lt;br /&gt;
* ShowInABox (Wordpress)&lt;br /&gt;
* Plumi (Plone)&lt;br /&gt;
&lt;br /&gt;
Additional server side components like transcoding to theora, generating thumbnails, and exporting metadata will also be developed. Where time / resources permit server side hooks into ffmepg2theora (for transcoding) and mplayer (for generating thumbnails) will be developed for the CMS systems as well. As OggPusher matures simple hooks will be added to the CMS&#039;s to support direct ogg theora clip uploads.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Accessibility &amp;amp; CMML&#039;&#039;&#039;&lt;br /&gt;
Accessible components of mv_embed consist of obtaining the metadata and putting it into the dom as a child of the video element. Mv_Embed will  offer a reference javascript interface for client interactions with that metadata. The metadata will be structured in Continues Media Markup Language (CMML). CMML is a part of the annodex technology set and can either be muxed into the ogg stream or be requested separately via XML. Mv_Embed will negotiate a transport method for the metadata that will work for the given plugin type.(Currently only oggplay plugin supports ogg-skeleton and exposing muxed CMML tracks in the ogg stream).&lt;br /&gt;
&lt;br /&gt;
Mv_Embed is part of [http://metavid.ucsc.edu/wiki/index.php/MetaVidWiki MetavidWiki] enables community authored transcripts and exposes these multiple layers in CMML. Proposed work on Mv_Embed will generalize these development efforts taking place in the metavid project for other CMS&#039;s and improve the usability and accessibility of these metadata layers in javascript based interfaces and mutil-plugin playback environment.&lt;br /&gt;
&lt;br /&gt;
===OggPusher===&lt;br /&gt;
&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Michael Dale ... or anyone else with more experience with firefox extensions/ffmpeg2theora ? &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Abstract:&#039;&#039;&#039; OggPusher is a proposed cross platform packaging of ffmpeg2theora as a browser extension. This exposes JavaScript hooks to web applications enabling easy client side transcodes from high quality source originals such as DV or MPEG2 and uploading into web based content management systems.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Sample Application Flow:&#039;&#039;&#039; is as follows: A user visits a oggPusher enabled web service. The firefox user is prompted to install a browser extension via firefox&#039;s .xpi extension framework. Once enabled, the web service upload interface does a call to the oggPusher to expose a &amp;quot;open file&amp;quot; dialog box on the client. The websevice access the oggPusher api to set the requested transcode bitrate and other transcode options (such as interlace, number of audio channels, resolution etc).  The client selects the high quality local file and begins transcoding to a temporary location on local disk. If there is an error in transcoding the upload is aborted and an error is exposed to web application.  Once the file is done transcoding, the web interface has the client issue a POST of the transcoded file.(if the server supports more efficient PUT than that can be used). The amount of the file that has been transcoded and the amount uploaded are exposed via javascript hooks so that web application javascript interface can update the client on upload progress.  If the the upload connection is reset a ajax request on the client can request &amp;quot;bytes upload so far&amp;quot; from the server and have oggPusher begin uploading from that point in the temporary local ogg file. A local file hash could be rechecked to insure the local file has not changed. The server can then do a simple join on the uploaded pieces, enabling reusable uploads over existing http protocol. If the server does not support resumes the file will be uploaded from the start.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Features for initial Release:&#039;&#039;&#039;&lt;br /&gt;
* A .xpi extension based on ffmpeg2theoa that supports uploading of local files of any type that ffmpeg accepts.&lt;br /&gt;
* Supports two modes of operation&lt;br /&gt;
** zero server side config where oggPusher just gives the option of uploading theora video where it finds a form file input type.&lt;br /&gt;
** server side config where the server/service hooks into oggPusher for extra functionality, like resuming transferrer and status updates integrated with the web application.&lt;br /&gt;
* A simple javascript api for controlling ffmpeg2theora encoding options. These options will be pre-demerited and javascript input will be scrubbed to avoid client side security risks.&lt;br /&gt;
* A set of javascript hooks for oggPusher that expose upload progress, encoding progress and transcoding errors.&lt;br /&gt;
* A sample server side implementation using php/html/javascript for grabbing ogg files from oggPusher.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Future Feature RoadMap:&#039;&#039;&#039;&lt;br /&gt;
Once the basic implementation has been deployed the following features will be targeted for future versions:&lt;br /&gt;
&lt;br /&gt;
* Integration with popular open source CMS&#039;s first target is mediaWiki.&lt;br /&gt;
* Hooks for connecting into &amp;quot;live&amp;quot; interfaces such as firewire digital video input or USB web cams.&lt;br /&gt;
** Extend oggfwd and server side components for in browser live streaming to web services.&lt;br /&gt;
* Extend to support ffmpeg2Dirac and future open source media codecs.&lt;br /&gt;
* Enable javascript hooks for grabbing highquality jpg or png screen grabs from the original source to be uploaded alongside the encoded video.&lt;br /&gt;
* Enable Bittorrent uploads&lt;br /&gt;
&lt;br /&gt;
== Guidelines for Applying ==&lt;br /&gt;
&lt;br /&gt;
Remember that many people will apply to work on the Summer of Code.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that those of us evaluating your application do not know you, we do not know what kind of &lt;br /&gt;
experience you have, we do not know what you have done in the past and we have to pick the best people &lt;br /&gt;
suited for a particular task.&lt;br /&gt;
&lt;br /&gt;
Hence, it is very important that you tell us in your email why you should be considered to implement a &lt;br /&gt;
particular project. Please use the application template at [[Summer of Code Applications]] as a starting point.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
*[[CodingGuidelines]]&lt;br /&gt;
*[[MIT approach to design and implementation]]&lt;br /&gt;
*[[How to do a release]]&lt;br /&gt;
*[[Summer of Code 2007]]&lt;br /&gt;
*[[Summer of Code 2006]]&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Summer_of_Code_2008&amp;diff=8659</id>
		<title>Summer of Code 2008</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Summer_of_Code_2008&amp;diff=8659"/>
		<updated>2008-03-04T18:58:44Z</updated>

		<summary type="html">&lt;p&gt;Mdale: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is  our ideas page for [http://code.google.com/soc/ Google Summer of Code] projects with [http://xiph.org Xiph.org] and [http://annodex.org/ Annodex]. The two projects participate jointly this year under Xiph&#039;s name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Students&#039;&#039;&#039; please use the template at [[Summer of Code Applications]] when applying for a GSoC position.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentors&#039;&#039;&#039; please visit [[Summer of Code Mentoring]] and help us prepare our application as a mentoring organization.&lt;br /&gt;
&lt;br /&gt;
== Current Ideas ==&lt;br /&gt;
&lt;br /&gt;
We need a primary and backup mentor volunteer for any project that is to become an official proposal, but submit something and we&#039;ll see who we can round up. :)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Project ideas go here&#039;&#039;&lt;br /&gt;
* Transcode/Tag/Upload tool for Theora et al. (ideally as a firefox extension so web cms integration is easy)&lt;br /&gt;
* Theora encoding support in GIMP&lt;br /&gt;
* Speex support in IceS&lt;br /&gt;
* Better stream source gui for dvswitch&lt;br /&gt;
* Multiplexing support (so one can play audio from video files)&lt;br /&gt;
 - Isn&#039;t this already done with the vorbisfile support in 1.2.0?&lt;br /&gt;
* XSPF support in ogg123, other players&lt;br /&gt;
* Initial support for OggPCM in some of our tools&lt;br /&gt;
* OggMNG tools&lt;br /&gt;
&lt;br /&gt;
==Detailed Project Description==&lt;br /&gt;
&lt;br /&gt;
===Mv_Embed: Accessibility and [re]usability:===&lt;br /&gt;
&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Michael Dale&lt;br /&gt;
&#039;&#039;&#039;Existing Feature Set:&#039;&#039;&#039; [http://metavid.ucsc.edu/wiki/index.php/Mv_Embed Mv_Embed] is an existing javascript library that takes html5 &amp;lt;video&amp;gt; tag and rewrites the video tag for to support in-page ogg theora playback in contemporary browsers. MV_embed supports may browsers and plugins including: native browser support such as firefox 3 video builds, oggplay plugin for firefox2 in win, mac, linux ; VLC activX/plugin for win IE, firefox, and mac, linux firefox; mplayer &amp;amp; totem for linux; and java cortado for microsoft, sun, apple java VM for IE, firefox &amp;amp; safari. Mv_embed maps all these plugin javascript systems to a ~near~ html5 spec api enabling web application developers to take advantage of a uniform javascript API for video control and interaction without having to worry about the underling plugin systems. Mv_Embed is used as part of the metavidWiki Project (screen cast).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Proposed Development:&#039;&#039;&#039; Mv_Embed will be enhanced around two goals integration into prominent open source Content Management Systems and better accessibility of close captions and associative video metadata.&lt;br /&gt;
&lt;br /&gt;
Mv_Embed will integrate into existing CMS video extensions for quick &amp;quot;one-off&amp;quot; ogg theora support.&lt;br /&gt;
* FilmForge (Drupal)&lt;br /&gt;
* ShowInABox (Wordpress)&lt;br /&gt;
* Plumi (Plone)&lt;br /&gt;
&lt;br /&gt;
Additional server side components like transcoding to theora, generating thumbnails, and exporting metadata will also be developed. Where time / resources permit server side hooks into ffmepg2theora (for transcoding) and mplayer (for generating thumbnails) will be developed for the CMS systems as well. As OggPusher matures simple hooks will be added to the CMS&#039;s to support direct ogg theora clip uploads.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Accessibility &amp;amp; CMML&#039;&#039;&#039;&lt;br /&gt;
Accessible components of mv_embed consist of obtaining the metadata and putting it into the dom as a child of the video element. Mv_Embed will  offer a reference javascript interface for client interactions with that metadata. The metadata will be structured in Continues Media Markup Language (CMML). CMML is a part of the annodex technology set and can either be muxed into the ogg stream or be requested separately via XML. Mv_Embed will negotiate a transport method for the metadata that will work for the given plugin type.(Currently only oggplay plugin supports ogg-skeleton and exposing muxed CMML tracks in the ogg stream).&lt;br /&gt;
&lt;br /&gt;
Mv_Embed is part of [http://metavid.ucsc.edu/wiki/index.php/MetaVidWiki MetavidWiki] enables community authored transcripts and exposes these multiple layers in CMML. Proposed work on Mv_Embed will generalize these development efforts taking place in the metavid project for other CMS&#039;s and improve the usability and accessibility of these metadata layers in javascript based interfaces and mutil-plugin playback environment.&lt;br /&gt;
&lt;br /&gt;
===OggPusher===&lt;br /&gt;
&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Michael Dale ... or anyone else with more experience with firefox extensions/ffmpeg2theora ? &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Abstract:&#039;&#039;&#039; OggPusher is a proposed cross platform packaging of ffmpeg2theora as a browser extension. This exposes JavaScript hooks to web applications enabling easy client side transcodes from high quality source originals such as DV or MPEG2 and uploading into web based content management systems.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Sample Application Flow:&#039;&#039;&#039; is as follows: A user visits a oggPusher enabled web service. The firefox user is prompted to install a browser extension via firefox&#039;s .xpi extension framework. Once enabled, the web service upload interface does a call to the oggPusher to expose a &amp;quot;open file&amp;quot; dialog box on the client. The websevice access the oggPusher api to set the requested transcode bitrate and other transcode options (such as interlace, number of audio channels, resolution etc).  The client selects the high quality local file and begins transcoding to a temporary location on local disk. If there is an error in transcoding the upload is aborted and an error is exposed to web application.  Once the file is done transcoding, the web interface has the client issue a POST of the transcoded file.(if the server supports more efficient PUT than that can be used). The amount of the file that has been transcoded and the amount uploaded are exposed via javascript hooks so that web application javascript interface can update the client on upload progress.  If the the upload connection is reset a ajax request on the client can request &amp;quot;bytes upload so far&amp;quot; from the server and have oggPusher begin uploading from that point in the temporary local ogg file. A local file hash could be rechecked to insure the local file has not changed. The server can then do a simple join on the uploaded pieces, enabling reusable uploads over existing http protocol. If the server does not support resumes the file will be uploaded from the start.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Features for initial Release:&#039;&#039;&#039;&lt;br /&gt;
* A .xpi extension based on ffmpeg2theoa that supports uploading of local files of any type that ffmpeg accepts.&lt;br /&gt;
* Supports two modes of operation&lt;br /&gt;
** zero server side config where oggPusher just gives the option of uploading theora video where it finds a form file input type.&lt;br /&gt;
** server side config where the server/service hooks into oggPusher for extra functionality, like resuming transferrer and status updates integrated with the web application.&lt;br /&gt;
* A simple javascript api for controlling ffmpeg2theora encoding options. These options will be pre-demerited and javascript input will be scrubbed to avoid client side security risks.&lt;br /&gt;
* A set of javascript hooks for oggPusher that expose upload progress, encoding progress and transcoding errors.&lt;br /&gt;
* A sample server side implementation using php/html/javascript for grabbing ogg files from oggPusher.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Future Feature RoadMap:&#039;&#039;&#039;&lt;br /&gt;
Once the basic implementation has been deployed the following features will be targeted for future versions:&lt;br /&gt;
&lt;br /&gt;
* Integration with popular open source CMS&#039;s first target is mediaWiki.&lt;br /&gt;
* Hooks for connecting into &amp;quot;live&amp;quot; interfaces such as firewire digital video input or USB web cams.&lt;br /&gt;
** Extend oggfwd and server side components for in browser live streaming to web services.&lt;br /&gt;
* Extend to support ffmpeg2Dirac and future open source media codecs.&lt;br /&gt;
* Enable javascript hooks for grabbing highquality jpg or png screen grabs from the original source to be uploaded alongside the encoded video.&lt;br /&gt;
* Enable Bittorrent uploads&lt;br /&gt;
&lt;br /&gt;
== Guidelines for Applying ==&lt;br /&gt;
&lt;br /&gt;
Remember that many people will apply to work on the Summer of Code.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that those of us evaluating your application do not know you, we do not know what kind of &lt;br /&gt;
experience you have, we do not know what you have done in the past and we have to pick the best people &lt;br /&gt;
suited for a particular task.&lt;br /&gt;
&lt;br /&gt;
Hence, it is very important that you tell us in your email why you should be considered to implement a &lt;br /&gt;
particular project. Please use the application template at [[Summer of Code Applications]] as a starting point.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
*[[CodingGuidelines]]&lt;br /&gt;
*[[MIT approach to design and implementation]]&lt;br /&gt;
*[[How to do a release]]&lt;br /&gt;
*[[Summer of Code 2007]]&lt;br /&gt;
*[[Summer of Code 2006]]&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Summer_of_Code_2008&amp;diff=8658</id>
		<title>Summer of Code 2008</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Summer_of_Code_2008&amp;diff=8658"/>
		<updated>2008-03-04T18:57:58Z</updated>

		<summary type="html">&lt;p&gt;Mdale: added mv_embed and oggPusher&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is  our ideas page for [http://code.google.com/soc/ Google Summer of Code] projects with [http://xiph.org Xiph.org] and [http://annodex.org/ Annodex]. The two projects participate jointly this year under Xiph&#039;s name.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Students&#039;&#039;&#039; please use the template at [[Summer of Code Applications]] when applying for a GSoC position.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentors&#039;&#039;&#039; please visit [[Summer of Code Mentoring]] and help us prepare our application as a mentoring organization.&lt;br /&gt;
&lt;br /&gt;
== Current Ideas ==&lt;br /&gt;
&lt;br /&gt;
We need a primary and backup mentor volunteer for any project that is to become an official proposal, but submit something and we&#039;ll see who we can round up. :)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Project ideas go here&#039;&#039;&lt;br /&gt;
* Transcode/Tag/Upload tool for Theora et al. (ideally as a firefox extension so web cms integration is easy)&lt;br /&gt;
* Theora encoding support in GIMP&lt;br /&gt;
* Speex support in IceS&lt;br /&gt;
* Better stream source gui for dvswitch&lt;br /&gt;
* Multiplexing support (so one can play audio from video files)&lt;br /&gt;
 - Isn&#039;t this already done with the vorbisfile support in 1.2.0?&lt;br /&gt;
* XSPF support in ogg123, other players&lt;br /&gt;
* Initial support for OggPCM in some of our tools&lt;br /&gt;
* OggMNG tools&lt;br /&gt;
&lt;br /&gt;
==Detailed Project Description==&lt;br /&gt;
&lt;br /&gt;
===Mv_Embed: Accessibility and [re]usability:===&lt;br /&gt;
&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Michael Dale&lt;br /&gt;
&#039;&#039;&#039;Existing Feature Set:&#039;&#039;&#039; [http://metavid.ucsc.edu/wiki/index.php/Mv_Embed Mv_Embed] is an existing javascript library that takes html5 &amp;lt;video&amp;gt; tag and rewrites the video tag for to support in-page ogg theora playback in contemporary browsers. MV_embed supports may browsers and plugins including: native browser support such as firefox 3 video builds, oggplay plugin for firefox2 in win, mac, linux ; VLC activX/plugin for win IE, firefox, and mac, linux firefox; mplayer &amp;amp; totem for linux; and java cortado for microsoft, sun, apple java VM for IE, firefox &amp;amp; safari. Mv_embed maps all these plugin javascript systems to a ~near~ html5 spec api enabling web application developers to take advantage of a uniform javascript API for video control and interaction without having to worry about the underling plugin systems. Mv_Embed is used as part of the metavidWiki Project (screen cast).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Proposed Development:&#039;&#039;&#039; Mv_Embed will be enhanced around two goals integration into prominent open source Content Management Systems and better accessibility of close captions and associative video metadata.&lt;br /&gt;
&lt;br /&gt;
Mv_Embed will integrate into existing CMS video extensions for quick &amp;quot;one-off&amp;quot; ogg theora support.&lt;br /&gt;
* FilmForge (Drupal)&lt;br /&gt;
* ShowInABox (Wordpress)&lt;br /&gt;
* Plumi (Plone)&lt;br /&gt;
&lt;br /&gt;
Additional server side components like transcoding to theora, generating thumbnails, and exporting metadata will also be developed. Where time / resources permit server side hooks into ffmepg2theora (for transcoding) and mplayer (for generating thumbnails) will be developed for the CMS systems as well. As OggPusher matures simple hooks will be added to the CMS&#039;s to support direct ogg theora clip uploads.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Accessibility &amp;amp; CMML&#039;&#039;&#039;&lt;br /&gt;
Accessible components of mv_embed consist of obtaining the metadata and putting it into the dom as a child of the video element. Mv_Embed will  offer a reference javascript interface for client interactions with that metadata. The metadata will be structured in Continues Media Markup Language (CMML). CMML is a part of the annodex technology set and can either be muxed into the ogg stream or be requested separately via XML. Mv_Embed will negotiate a transport method for the metadata that will work for the given plugin type.(Currently only oggplay plugin supports ogg-skeleton and exposing muxed CMML tracks in the ogg stream).&lt;br /&gt;
&lt;br /&gt;
Mv_Embed is part of [http://metavid.ucsc.edu/wiki/index.php/MetaVidWiki MetavidWiki] enables community authored transcripts and exposes these multiple layers in CMML. Proposed work on Mv_Embed will generalize these development efforts taking place in the metavid project for other CMS&#039;s and improve the usability and accessibility of these metadata layers in javascript based interfaces and mutil-plugin playback environment.&lt;br /&gt;
&lt;br /&gt;
==OggPusher==&lt;br /&gt;
&#039;&#039;&#039;Mentor:&#039;&#039;&#039; Michael Dale ... or anyone else with more experience with firefox extensions/ffmpeg2theora ? &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Abstract:&#039;&#039;&#039; OggPusher is a proposed cross platform packaging of ffmpeg2theora as a browser extension. This exposes JavaScript hooks to web applications enabling easy client side transcodes from high quality source originals such as DV or MPEG2 and uploading into web based content management systems.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Sample Application Flow:&#039;&#039;&#039; is as follows: A user visits a oggPusher enabled web service. The firefox user is prompted to install a browser extension via firefox&#039;s .xpi extension framework. Once enabled, the web service upload interface does a call to the oggPusher to expose a &amp;quot;open file&amp;quot; dialog box on the client. The websevice access the oggPusher api to set the requested transcode bitrate and other transcode options (such as interlace, number of audio channels, resolution etc).  The client selects the high quality local file and begins transcoding to a temporary location on local disk. If there is an error in transcoding the upload is aborted and an error is exposed to web application.  Once the file is done transcoding, the web interface has the client issue a POST of the transcoded file.(if the server supports more efficient PUT than that can be used). The amount of the file that has been transcoded and the amount uploaded are exposed via javascript hooks so that web application javascript interface can update the client on upload progress.  If the the upload connection is reset a ajax request on the client can request &amp;quot;bytes upload so far&amp;quot; from the server and have oggPusher begin uploading from that point in the temporary local ogg file. A local file hash could be rechecked to insure the local file has not changed. The server can then do a simple join on the uploaded pieces, enabling reusable uploads over existing http protocol. If the server does not support resumes the file will be uploaded from the start.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Features for initial Release:&#039;&#039;&#039;&lt;br /&gt;
* A .xpi extension based on ffmpeg2theoa that supports uploading of local files of any type that ffmpeg accepts.&lt;br /&gt;
* Supports two modes of operation&lt;br /&gt;
** zero server side config where oggPusher just gives the option of uploading theora video where it finds a form file input type.&lt;br /&gt;
** server side config where the server/service hooks into oggPusher for extra functionality, like resuming transferrer and status updates integrated with the web application.&lt;br /&gt;
* A simple javascript api for controlling ffmpeg2theora encoding options. These options will be pre-demerited and javascript input will be scrubbed to avoid client side security risks.&lt;br /&gt;
* A set of javascript hooks for oggPusher that expose upload progress, encoding progress and transcoding errors.&lt;br /&gt;
* A sample server side implementation using php/html/javascript for grabbing ogg files from oggPusher.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Future Feature RoadMap:&#039;&#039;&#039;&lt;br /&gt;
Once the basic implementation has been deployed the following features will be targeted for future versions:&lt;br /&gt;
&lt;br /&gt;
* Integration with popular open source CMS&#039;s first target is mediaWiki.&lt;br /&gt;
* Hooks for connecting into &amp;quot;live&amp;quot; interfaces such as firewire digital video input or USB web cams.&lt;br /&gt;
** Extend oggfwd and server side components for in browser live streaming to web services.&lt;br /&gt;
* Extend to support ffmpeg2Dirac and future open source media codecs.&lt;br /&gt;
* Enable javascript hooks for grabbing highquality jpg or png screen grabs from the original source to be uploaded alongside the encoded video.&lt;br /&gt;
* Enable Bittorrent uploads&lt;br /&gt;
&lt;br /&gt;
== Guidelines for Applying ==&lt;br /&gt;
&lt;br /&gt;
Remember that many people will apply to work on the Summer of Code.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that those of us evaluating your application do not know you, we do not know what kind of &lt;br /&gt;
experience you have, we do not know what you have done in the past and we have to pick the best people &lt;br /&gt;
suited for a particular task.&lt;br /&gt;
&lt;br /&gt;
Hence, it is very important that you tell us in your email why you should be considered to implement a &lt;br /&gt;
particular project. Please use the application template at [[Summer of Code Applications]] as a starting point.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
*[[CodingGuidelines]]&lt;br /&gt;
*[[MIT approach to design and implementation]]&lt;br /&gt;
*[[How to do a release]]&lt;br /&gt;
*[[Summer of Code 2007]]&lt;br /&gt;
*[[Summer of Code 2006]]&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=OggPlayJavascriptAPI&amp;diff=7420</id>
		<title>OggPlayJavascriptAPI</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=OggPlayJavascriptAPI&amp;diff=7420"/>
		<updated>2007-09-14T18:59:43Z</updated>

		<summary type="html">&lt;p&gt;Mdale: /* insertMovieBefore */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This is a &#039;&#039;&#039;draft API&#039;&#039;&#039; for the OggPlay Firefox plugin.&lt;br /&gt;
&lt;br /&gt;
We want the OggPlay plugin to support both a simple individual movie mode, and a more fully-featured playlist mode.  All of the functions supported in individual movie mode are still useful in playlist mode; however additional functions also become useful.&lt;br /&gt;
&lt;br /&gt;
Note that the amount of available information for an internet-cast Ogg stream depends upon the type of server providing that stream.  In particular, an Apache server with [http://www.annodex.net/software/mod_annodex/index.html mod_annodex] installed provides the following information that is not available for live-streamed or raw file-streamed movies:&lt;br /&gt;
* length of the movie&lt;br /&gt;
* [[CMML]] annotations for the entire movie in advance&lt;br /&gt;
&lt;br /&gt;
Furthermore, mod_annodex provides remote seeking functionality across the entire movie.  Hence, OggPlay allows arbitrary seeking on mod_annodex supported movies.  On the other hand, raw streams and live streams are only seekable within the region that has already been buffered by the player.&lt;br /&gt;
&lt;br /&gt;
== Individual movies ==&lt;br /&gt;
&lt;br /&gt;
=== OggPlayState ===&lt;br /&gt;
&lt;br /&gt;
 enum OggPlayState { PAUSED = 0; PLAYING = 1; FINISHED = 2 };&lt;br /&gt;
&lt;br /&gt;
These are fairly self-evident: the plugin begins in PAUSED or PLAYING state depending on the settings provided through the params tags, and changes to FINISHED state when the movie finishes playback.&lt;br /&gt;
&lt;br /&gt;
=== getCurrentState ===&lt;br /&gt;
&lt;br /&gt;
To retrieve the state:&lt;br /&gt;
&lt;br /&gt;
 int &amp;lt;- getCurrentState()&lt;br /&gt;
&lt;br /&gt;
=== pause ===&lt;br /&gt;
&lt;br /&gt;
 pause()&lt;br /&gt;
&lt;br /&gt;
This function will convert the PLAYING or FINISHED states to PAUSED.&lt;br /&gt;
&lt;br /&gt;
=== play ===&lt;br /&gt;
&lt;br /&gt;
 play()&lt;br /&gt;
&lt;br /&gt;
This function will convert the PAUSED state to PLAYING or FINISHED depending upon the current position within the movie.&lt;br /&gt;
&lt;br /&gt;
=== restart ===&lt;br /&gt;
&lt;br /&gt;
 restart()&lt;br /&gt;
&lt;br /&gt;
This function will convert any state to PLAYING, and start the movie again from the beginning&lt;br /&gt;
&lt;br /&gt;
=== getCurrentMovie ===&lt;br /&gt;
&lt;br /&gt;
To retrieve the currently playing (or just played, or about to play) movie:&lt;br /&gt;
&lt;br /&gt;
 string URL &amp;lt;- getCurrentMovie()&lt;br /&gt;
&lt;br /&gt;
=== setCurrentMovie ===&lt;br /&gt;
&lt;br /&gt;
To set a new movie:&lt;br /&gt;
&lt;br /&gt;
 setCurrentMovie(string URL)&lt;br /&gt;
&lt;br /&gt;
This will automatically begin playing at the beginning if the state is PLAYING or FINISHED, but will remain paused ready to play at the beginning if the state is PAUSED.&lt;br /&gt;
&lt;br /&gt;
=== getPlayPosition ===&lt;br /&gt;
&lt;br /&gt;
To get the current play position (in milliseconds) from the movie:&lt;br /&gt;
&lt;br /&gt;
 int milliseconds &amp;lt;- getPlayPosition()&lt;br /&gt;
&lt;br /&gt;
=== setPlayPosition ===&lt;br /&gt;
&lt;br /&gt;
To set the current play position (in milliseconds):&lt;br /&gt;
&lt;br /&gt;
 boolean success &amp;lt;- setPlayPosition(int milliseconds)&lt;br /&gt;
&lt;br /&gt;
Note that if you set a position past the end of the movie then the result will be a play position at the end of the movie, and the player in FINISHED mode.&lt;br /&gt;
&lt;br /&gt;
Note also that certain servers (e.g. plain Ogg files, no mod-annodex installed, etc.) will prevent seeking from being able to occur past the buffered portion of the file; in this case, false will be returned and the play position will be updated as far forward as possible.&lt;br /&gt;
&lt;br /&gt;
=== registerCMMLCallback ===&lt;br /&gt;
&lt;br /&gt;
To have the plugin call a javascript method as each CMML annotation is encountered (i.e. as movie playback reaches the point where the annotation needs to be inserted):&lt;br /&gt;
&lt;br /&gt;
 registerCMMLCallback(function callback(string))&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;See [[#Callback_functions|Callback functions]] for details on setting up a Javascript callback function.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Use null if you want to deregister the callback without setting a new one.&lt;br /&gt;
&lt;br /&gt;
=== retrieveAnnotations ===&lt;br /&gt;
&lt;br /&gt;
To retrieve all of the CMML annotations for a movie:&lt;br /&gt;
&lt;br /&gt;
 boolean success &amp;lt;- retrieveAnnotations(function callback(string))&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;See [[#Callback_functions|Callback functions]] for details on setting up a Javascript callback function.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is an asynchronous call; the plugin will create a new http connection to retrieve the annotations. The callback function will be invoked with the annotation string after the annotations have been retrieved.&lt;br /&gt;
&lt;br /&gt;
This function will return false if a previous attempt at retrieving annotations is still being processed.&lt;br /&gt;
&lt;br /&gt;
Note that this won&#039;t return all annotations from some servers, e.g. if mod-annodex is not installed.  In this case, you will still be able to retrieve CMML as each annotation is encountered using registerCMMLCallback.&lt;br /&gt;
&lt;br /&gt;
=== registerEndPlayCallback ===&lt;br /&gt;
&lt;br /&gt;
To have the plugin call a javascript method when the movie finishes:&lt;br /&gt;
&lt;br /&gt;
 registerEndPlayCallback(function callback(void))&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;See [[#Callback_functions|Callback functions]] for details on setting up a Javascript callback function.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Use null if you want to deregister the callback without setting a new one.&lt;br /&gt;
&lt;br /&gt;
=== setVolume ===&lt;br /&gt;
&lt;br /&gt;
 setVolume(float volume)&lt;br /&gt;
&lt;br /&gt;
Use this function to set the playback volume.  A value of 0.0 is equivalent to muting; a value of 1.0 is maximum volume.&lt;br /&gt;
&lt;br /&gt;
=== getVolume ===&lt;br /&gt;
&lt;br /&gt;
 float volume &amp;lt;- getVolume()&lt;br /&gt;
&lt;br /&gt;
Use this function to retrieve the current playback volume.&lt;br /&gt;
&lt;br /&gt;
=== getWindowWidth ===&lt;br /&gt;
&lt;br /&gt;
 int width &amp;lt;- getWindowWidth()&lt;br /&gt;
&lt;br /&gt;
Use this function to retrieve the width of the window in pixels (The width is determined by the Firefox render model)&lt;br /&gt;
&lt;br /&gt;
=== getWindowHeight ===&lt;br /&gt;
&lt;br /&gt;
 int height &amp;lt;- getWindowHeight()&lt;br /&gt;
&lt;br /&gt;
Use this function to retrieve the height of the window in pixels (The height is determined by the Firefox render model)&lt;br /&gt;
&lt;br /&gt;
=== getBufferedTime ===&lt;br /&gt;
&lt;br /&gt;
 int milliseconds &amp;lt;- getBufferedTime()&lt;br /&gt;
&lt;br /&gt;
Use this function to determine how many milliseconds of the current movie are buffered for display.  Note that this is the amount downloaded past the currently playing point, not just the amount decoded past the currently playing point.&lt;br /&gt;
&lt;br /&gt;
=== getMovieLength ===&lt;br /&gt;
&lt;br /&gt;
 int milliseconds &amp;lt;- getMovieLength()&lt;br /&gt;
&lt;br /&gt;
Use this function to determine how long in milliseconds a movie is.  Note that this value will not be available for some movies, depending on the server.  If no value is available, then this function will return a length of -1.&lt;br /&gt;
&lt;br /&gt;
=== getVersionString ===&lt;br /&gt;
&lt;br /&gt;
To retrieve a human-readable version string:&lt;br /&gt;
&lt;br /&gt;
 string version &amp;lt;- getVersionString()&lt;br /&gt;
&lt;br /&gt;
This string will be of the format:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;liboggplay (a.b) Annodex Media Plugin (API x.y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Where a.b is the liboggplay version, and x.y is the API version.  Once accepted, this API will be version 1.0.  Minor changes of the API can add functions but not modify existing functions.&lt;br /&gt;
&lt;br /&gt;
=== getPluginVersion ===&lt;br /&gt;
&lt;br /&gt;
To retrieve a version string for the plugin alone (&amp;quot;a.b&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
 string version &amp;lt;- getPluginVersion()&lt;br /&gt;
&lt;br /&gt;
=== getAPIVersion ===&lt;br /&gt;
&lt;br /&gt;
To retrieve a version string for the Javascript interface alone (&amp;quot;x.y&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
 string version &amp;lt;- getAPIVersion()&lt;br /&gt;
&lt;br /&gt;
== Playlists ==&lt;br /&gt;
&lt;br /&gt;
If you wish to use playlists instead of individual movies, then the above function calls still exist, with the following caveats:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;getCurrentState&amp;lt;/tt&amp;gt; will not return FINISHED until the last movie in the playlist has completed playback&lt;br /&gt;
* &amp;lt;tt&amp;gt;getCurrentMovie&amp;lt;/tt&amp;gt; retrieves the currently playing movie - i.e. the movie at the current playlist position&lt;br /&gt;
* &amp;lt;tt&amp;gt;setCurrentMovie&amp;lt;/tt&amp;gt; sets the currently playing movie (and playback will begin from the beginning of the newly set movie, not the beginning of the playlist)&lt;br /&gt;
* &amp;lt;tt&amp;gt;retrieveAnnotations&amp;lt;/tt&amp;gt; will retrieve the annotations for the current movie only&lt;br /&gt;
* &amp;lt;tt&amp;gt;registerEndPlayCallback&amp;lt;/tt&amp;gt; will call back at the end of the playlist (i.e. at the end of the last movie) only.  Use &amp;lt;tt&amp;gt;registerPlaylistCallback&amp;lt;/tt&amp;gt; to receive notifications per movie.&lt;br /&gt;
* &amp;lt;tt&amp;gt;getMovieLength&amp;lt;/tt&amp;gt; will retrieve the movie length for the current movie only.  Use &amp;lt;tt&amp;gt;getMovieLengthAt&amp;lt;/tt&amp;gt; to retrieve the length for movies in the playlist that are not currently playing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The plugin does not actually recognise separate &amp;quot;single movie&amp;quot; and &amp;quot;playlist&amp;quot; modes - instead, single movies are actually just playlists with length 1.  The interface has been arranged so that the functions above &amp;quot;just work&amp;quot; for what looks like a single movie mode, but are also useful when multiple movies are inserted into the playlist.&lt;br /&gt;
&lt;br /&gt;
The following additional functions are also available for manipulation of the playlist.  These functions are also available when there is only one movie in the playlist, but don&#039;t provide much in the way of useful features.&lt;br /&gt;
&lt;br /&gt;
=== freezePlaylistProgression ===&lt;br /&gt;
&lt;br /&gt;
 freezePlaylistProgression()&lt;br /&gt;
&lt;br /&gt;
This function does not stop the current movie from playing, but does prevent the plugin from progressing to the next movie in the playlist.  Use this and unfreezePlayPosition for &amp;quot;atomic&amp;quot; operations on the playlist.&lt;br /&gt;
&lt;br /&gt;
=== unfreezePlaylistProgression ===&lt;br /&gt;
&lt;br /&gt;
 unfreezePlaylistProgression()&lt;br /&gt;
&lt;br /&gt;
See documentation for freezePlaylistProgression.&lt;br /&gt;
&lt;br /&gt;
=== registerPlaylistCallback ===&lt;br /&gt;
&lt;br /&gt;
 registerPlaylistCallback(function callback(void))&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;See [[#Callback_functions|Callback functions]] for details on setting up a Javascript callback function.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Use this function to register a javascript function that will get called by the plugin at the end of each movie in the playlist - i.e. when the playlist changes tracks. The last track does &#039;&#039;&#039;not&#039;&#039;&#039; trigger a call; the end play callback, if registered, will be invoked instead.&lt;br /&gt;
&lt;br /&gt;
=== getPlaylistLength ===&lt;br /&gt;
&lt;br /&gt;
To retrieve the length of the playlist:&lt;br /&gt;
&lt;br /&gt;
 int length &amp;lt;- getPlaylistLength()&lt;br /&gt;
&lt;br /&gt;
=== getCurrentPlaylistPosition ===&lt;br /&gt;
&lt;br /&gt;
To retrieve the position in the playlist of the current movie:&lt;br /&gt;
&lt;br /&gt;
 int position &amp;lt;- getCurrentPlaylistPosition()&lt;br /&gt;
&lt;br /&gt;
=== getMovieAt ===&lt;br /&gt;
&lt;br /&gt;
To get the url of the movie at the specified position (0 is the first position):&lt;br /&gt;
&lt;br /&gt;
 string url &amp;lt;- getMovieAt(int position)&lt;br /&gt;
&lt;br /&gt;
This function will return null if the position points to a slot outside the bounds of the playlist.&lt;br /&gt;
&lt;br /&gt;
Remember that &amp;lt;tt&amp;gt;getCurrentMovie&amp;lt;/tt&amp;gt; can be used to retrieve the movie at the current position.&lt;br /&gt;
&lt;br /&gt;
=== setMovieAt ===&lt;br /&gt;
&lt;br /&gt;
To set the url of the movie at the specified position (0 is the first position):&lt;br /&gt;
&lt;br /&gt;
 boolean success &amp;lt;- setMovieAt(int position, string url)&lt;br /&gt;
&lt;br /&gt;
This function will return false if the position points to a slot outside the bounds of the playlist.&lt;br /&gt;
&lt;br /&gt;
Remember that &amp;lt;tt&amp;gt;setCurrentMovie&amp;lt;/tt&amp;gt; can be used to change the currently playing movie.&lt;br /&gt;
&lt;br /&gt;
=== appendMovie ===&lt;br /&gt;
&lt;br /&gt;
To append a movie to the end of the playlist:&lt;br /&gt;
&lt;br /&gt;
 appendMovie(string url)&lt;br /&gt;
&lt;br /&gt;
=== insertMovieBefore ===&lt;br /&gt;
 &#039;&#039;&#039;suggested alteration&#039;&#039;&#039; have it be insertMovieBefore(string url, [pos])&lt;br /&gt;
 so that the pos is optional and if missing just inserts before the current clip in the playlist &lt;br /&gt;
&lt;br /&gt;
To insert a movie before a specified position in the playlist:&lt;br /&gt;
&lt;br /&gt;
 boolean success &amp;lt;- insertMovieBefore(int position, string url)&lt;br /&gt;
&lt;br /&gt;
This function will return false if the position points to a slot outside the bounds of the playlist.&lt;br /&gt;
&lt;br /&gt;
=== removeMovieAt ===&lt;br /&gt;
&lt;br /&gt;
To remove a movie from the playlist:&lt;br /&gt;
&lt;br /&gt;
 boolean success &amp;lt;- removeMovieAt(int position)&lt;br /&gt;
&lt;br /&gt;
This function will return false if the position points to a slot outside the bounds of the playlist.&lt;br /&gt;
&lt;br /&gt;
=== playMovieAt ===&lt;br /&gt;
&lt;br /&gt;
To start playing a movie at a specified position in the playlist:&lt;br /&gt;
&lt;br /&gt;
 boolean success &amp;lt;- playMovieAt(int position)&lt;br /&gt;
&lt;br /&gt;
This function will return false if the position points to a slot outside the bounds of the playlist.&lt;br /&gt;
&lt;br /&gt;
=== playlistNext ===&lt;br /&gt;
&lt;br /&gt;
To start playing the next movie in the playlist:&lt;br /&gt;
&lt;br /&gt;
 boolean success &amp;lt;- playlistNext()&lt;br /&gt;
&lt;br /&gt;
This function will return false if the the current movie is the last one in the playlist.&lt;br /&gt;
&lt;br /&gt;
=== playlistPrev ===&lt;br /&gt;
&lt;br /&gt;
To start playing the previous movie in the playlist:&lt;br /&gt;
&lt;br /&gt;
 boolean success &amp;lt;- playlistPrev()&lt;br /&gt;
&lt;br /&gt;
This function will return false if the the current movie is the first one in the playlist.&lt;br /&gt;
&lt;br /&gt;
=== retrieveAnnotationsAt ===&lt;br /&gt;
&lt;br /&gt;
To retrieve all of the CMML annotations for a movie at a specified position in the playlist:&lt;br /&gt;
&lt;br /&gt;
 boolean success &amp;lt;- retrieveAnnotationsAt(int position, function callback(string))&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;See [[#Callback_functions|Callback functions]] for details on setting up a Javascript callback function.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
As per retrieveAnnotations, this function is an asynchronous call and will not return any annotations if the server does not support out-of-band annotation retrieval.&lt;br /&gt;
&lt;br /&gt;
This function will return false if a previous attempt at retrieving annotations is still being processed, or if the position points to a slot outside the bounds of the playlist.&lt;br /&gt;
&lt;br /&gt;
=== getMovieLengthAt ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This is currently unimplemented.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 int milliseconds &amp;lt;- getMovieLengthAt(int position)&lt;br /&gt;
&lt;br /&gt;
This function retrieves the length of the movie at the specified position in the playlist.  The function will return -1 if the movie length can not be determined.&lt;br /&gt;
&lt;br /&gt;
== Callback functions ==&lt;br /&gt;
&lt;br /&gt;
Since Javascript functions are not first-class objects, you can&#039;t pass one directly to the plugin as a callback. You need to wrap your callback in an anonymous object with a single member, &#039;call&#039;:&lt;br /&gt;
&lt;br /&gt;
 // Use this form for callbacks with a string argument, shown as &#039;&#039;function callback(string)&#039;&#039;:&lt;br /&gt;
 plugin.registerCMMLCallback(&lt;br /&gt;
   {&lt;br /&gt;
     call: function(s) { yourCMLLCallback(s); }&lt;br /&gt;
   }&lt;br /&gt;
 );&lt;br /&gt;
 &lt;br /&gt;
 // Use this form for callbacks with no arguments, shown as &#039;&#039;function callback(void)&#039;&#039;:&lt;br /&gt;
 plugin.registerEndPlayCallback(&lt;br /&gt;
   {&lt;br /&gt;
     call: function() { yourEndPlayCallback(); }&lt;br /&gt;
   }&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
Technically, you can inline your callback handling code directly in the &#039;call&#039; function, but it&#039;s much cleaner to just redirect to a stand-alone function for each callback, as shown above.&lt;br /&gt;
&lt;br /&gt;
Deregistering a callback is quite simple:&lt;br /&gt;
&lt;br /&gt;
 plugin.registerPlaylistCallback(null);&lt;br /&gt;
&lt;br /&gt;
= Suggested modifications =&lt;br /&gt;
==Individual Movies==&lt;br /&gt;
== states ==&lt;br /&gt;
 add state LOADING and NULL or uninitialized state &lt;br /&gt;
&lt;br /&gt;
== play ==&lt;br /&gt;
  function play()&lt;br /&gt;
if current state is NULL set state to LOADING else if already in loading state than a second call to play will force playback of what is available. &lt;br /&gt;
&lt;br /&gt;
when a user hits play internally we store a separate state that reports as LOADING but is really LOAD_TO_PLAY state which uses download rate control to predict when we should switch into playing mode. ie if the clip&#039;s duration is 60 seconds and after one second we have buffered 10 seconds of the clip we can safely immediately switch to play mode. In a different instance if after 10 seconds we have downloaded 5 seconds of the clip we should wait until we have buffered 40 seconds as it will take around 40 seconds to download the last 20 seconds of video. &lt;br /&gt;
&lt;br /&gt;
if the clip is a LIVE stream then it will begin playback after a few seconds have been buffered. Controllable by:&lt;br /&gt;
  setLiveBuffer(ms) sets the amount of the clip to buffer for a live stream.&lt;br /&gt;
&lt;br /&gt;
== load ==&lt;br /&gt;
  function load() //possible options include NOCACHE (to load from server even if its cached locally) &lt;br /&gt;
a function to begin loading the current clip without playing it back. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== getBufferedTime ==&lt;br /&gt;
Its unclear if get Buffered time gives you the milliseconds buffered from the beaning of the clip, but thats what it should do. To enable the display of a progress bar for the full clip. Ie getBufferedTime / getDuration&lt;br /&gt;
&lt;br /&gt;
if playing back a live stream it could report amount buffered ahead of current playback point&lt;br /&gt;
&lt;br /&gt;
==playlist==&lt;br /&gt;
&lt;br /&gt;
=== loadMovieAt ===&lt;br /&gt;
to start downloading/buffering a clip later in playlist&lt;br /&gt;
&lt;br /&gt;
=== getBufferedTimeAt === &lt;br /&gt;
to get the amount Buffered for a clip in the playlist.&lt;br /&gt;
&lt;br /&gt;
==Applications Preferences ==&lt;br /&gt;
How much disk space to use to store cached clips. Used for syncing and fast page reload on browser back. Also would be ideal if it looked for &#039;&#039;&#039;response headers&#039;&#039;&#039; that invalidate the cache. default 100megs or maybe use firefox preferences... It should uses last accessed first out cacheting. &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
* another point of comparison: [http://mplayerplug-in.cvs.sourceforge.net/mplayerplug-in/mplayerplug-in/DOCS/tech/javascript.txt?view=markup] (e.g. getDuration)&lt;br /&gt;
&lt;br /&gt;
* suggestion: Include audio capture (and Speex encoding) in the API&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=OggPlayJavascriptAPI&amp;diff=7101</id>
		<title>OggPlayJavascriptAPI</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=OggPlayJavascriptAPI&amp;diff=7101"/>
		<updated>2007-07-14T16:52:04Z</updated>

		<summary type="html">&lt;p&gt;Mdale: /* getDuration */ getMovieLength&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This is a &#039;&#039;&#039;draft API&#039;&#039;&#039; for the OggPlay Firefox plugin.&lt;br /&gt;
&lt;br /&gt;
We want the OggPlay plugin to support both a simple individual movie mode, and a more fully-featured playlist mode.  All of the functions supported in individual movie mode are still useful in playlist mode; however additional functions also become useful.&lt;br /&gt;
&lt;br /&gt;
Note that the amount of available information for an internet-cast Ogg stream depends upon the type of server providing that stream.  In particular, an Apache server with [http://www.annodex.net/software/mod_annodex/index.html mod_annodex] installed provides the following information that is not available for live-streamed or raw file-streamed movies:&lt;br /&gt;
* length of the movie&lt;br /&gt;
* [[CMML]] annotations for the entire movie in advance&lt;br /&gt;
&lt;br /&gt;
Furthermore, mod_annodex provides remote seeking functionality across the entire movie.  Hence, OggPlay allows arbitrary seeking on mod_annodex supported movies.  On the other hand, raw streams and live streams are only seekable within the region that has already been buffered by the player.&lt;br /&gt;
&lt;br /&gt;
== Individual movies ==&lt;br /&gt;
&lt;br /&gt;
=== OggPlayState ===&lt;br /&gt;
&lt;br /&gt;
 enum OggPlayState { PAUSED = 0; PLAYING = 1; FINISHED = 2 };&lt;br /&gt;
&lt;br /&gt;
These are fairly self-evident: the plugin begins in PAUSED or PLAYING state depending on the settings provided through the params tags, and changes to FINISHED state when the movie finishes playback.&lt;br /&gt;
&lt;br /&gt;
=== getCurrentState ===&lt;br /&gt;
&lt;br /&gt;
To retrieve the state:&lt;br /&gt;
&lt;br /&gt;
 int &amp;lt;- getCurrentState()&lt;br /&gt;
&lt;br /&gt;
=== pause ===&lt;br /&gt;
&lt;br /&gt;
 pause()&lt;br /&gt;
&lt;br /&gt;
This function will convert the PLAYING or FINISHED states to PAUSED.&lt;br /&gt;
&lt;br /&gt;
=== play ===&lt;br /&gt;
&lt;br /&gt;
 play()&lt;br /&gt;
&lt;br /&gt;
This function will convert the PAUSED state to PLAYING or FINISHED depending upon the current position within the movie.&lt;br /&gt;
&lt;br /&gt;
=== restart ===&lt;br /&gt;
&lt;br /&gt;
 restart()&lt;br /&gt;
&lt;br /&gt;
This function will convert any state to PLAYING, and start the movie again from the beginning&lt;br /&gt;
&lt;br /&gt;
=== getCurrentMovie ===&lt;br /&gt;
&lt;br /&gt;
To retrieve the currently playing (or just played, or about to play) movie:&lt;br /&gt;
&lt;br /&gt;
 string URL &amp;lt;- getCurrentMovie()&lt;br /&gt;
&lt;br /&gt;
=== setCurrentMovie ===&lt;br /&gt;
&lt;br /&gt;
To set a new movie:&lt;br /&gt;
&lt;br /&gt;
 setCurrentMovie(string URL)&lt;br /&gt;
&lt;br /&gt;
This will automatically begin playing at the beginning if the state is PLAYING or FINISHED, but will remain paused ready to play at the beginning if the state is PAUSED.&lt;br /&gt;
&lt;br /&gt;
=== getPlayPosition ===&lt;br /&gt;
&lt;br /&gt;
To get the current play position (in milliseconds) from the movie:&lt;br /&gt;
&lt;br /&gt;
 int milliseconds &amp;lt;- getPlayPosition()&lt;br /&gt;
&lt;br /&gt;
=== setPlayPosition ===&lt;br /&gt;
&lt;br /&gt;
To set the current play position (in milliseconds):&lt;br /&gt;
&lt;br /&gt;
 boolean success &amp;lt;- setPlayPosition(int milliseconds)&lt;br /&gt;
&lt;br /&gt;
Note that if you set a position past the end of the movie then the result will be a play position at the end of the movie, and the player in FINISHED mode.&lt;br /&gt;
&lt;br /&gt;
Note also that certain servers (e.g. plain Ogg files, no mod-annodex installed, etc.) will prevent seeking from being able to occur past the buffered portion of the file; in this case, false will be returned and the play position will be updated as far forward as possible.&lt;br /&gt;
&lt;br /&gt;
=== registerCMMLCallback ===&lt;br /&gt;
&lt;br /&gt;
To have the plugin call a javascript method as each CMML annotation is encountered (i.e. as movie playback reaches the point where the annotation needs to be inserted):&lt;br /&gt;
&lt;br /&gt;
 registerCMMLCallback(function callback(string))&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;See [[#Callback_functions|Callback functions]] for details on setting up a Javascript callback function.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Use null if you want to deregister the callback without setting a new one.&lt;br /&gt;
&lt;br /&gt;
=== retrieveAnnotations ===&lt;br /&gt;
&lt;br /&gt;
To retrieve all of the CMML annotations for a movie:&lt;br /&gt;
&lt;br /&gt;
 boolean success &amp;lt;- retrieveAnnotations(function callback(string))&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;See [[#Callback_functions|Callback functions]] for details on setting up a Javascript callback function.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is an asynchronous call; the plugin will create a new http connection to retrieve the annotations. The callback function will be invoked with the annotation string after the annotations have been retrieved.&lt;br /&gt;
&lt;br /&gt;
This function will return false if a previous attempt at retrieving annotations is still being processed.&lt;br /&gt;
&lt;br /&gt;
Note that this won&#039;t return all annotations from some servers, e.g. if mod-annodex is not installed.  In this case, you will still be able to retrieve CMML as each annotation is encountered using registerCMMLCallback.&lt;br /&gt;
&lt;br /&gt;
=== registerEndPlayCallback ===&lt;br /&gt;
&lt;br /&gt;
To have the plugin call a javascript method when the movie finishes:&lt;br /&gt;
&lt;br /&gt;
 registerEndPlayCallback(function callback(void))&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;See [[#Callback_functions|Callback functions]] for details on setting up a Javascript callback function.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Use null if you want to deregister the callback without setting a new one.&lt;br /&gt;
&lt;br /&gt;
=== setVolume ===&lt;br /&gt;
&lt;br /&gt;
 setVolume(float volume)&lt;br /&gt;
&lt;br /&gt;
Use this function to set the playback volume.  A value of 0.0 is equivalent to muting; a value of 1.0 is maximum volume.&lt;br /&gt;
&lt;br /&gt;
=== getVolume ===&lt;br /&gt;
&lt;br /&gt;
 float volume &amp;lt;- getVolume()&lt;br /&gt;
&lt;br /&gt;
Use this function to retrieve the current playback volume.&lt;br /&gt;
&lt;br /&gt;
=== getWindowWidth ===&lt;br /&gt;
&lt;br /&gt;
 int width &amp;lt;- getWindowWidth()&lt;br /&gt;
&lt;br /&gt;
Use this function to retrieve the width of the window in pixels (The width is determined by the Firefox render model)&lt;br /&gt;
&lt;br /&gt;
=== getWindowHeight ===&lt;br /&gt;
&lt;br /&gt;
 int height &amp;lt;- getWindowHeight()&lt;br /&gt;
&lt;br /&gt;
Use this function to retrieve the height of the window in pixels (The height is determined by the Firefox render model)&lt;br /&gt;
&lt;br /&gt;
=== getBufferedTime ===&lt;br /&gt;
&lt;br /&gt;
 int milliseconds &amp;lt;- getBufferedTime()&lt;br /&gt;
&lt;br /&gt;
Use this function to determine how many milliseconds of the current movie are buffered for display.  Note that this is the amount downloaded past the currently playing point, not just the amount decoded past the currently playing point.&lt;br /&gt;
&lt;br /&gt;
=== getMovieLength ===&lt;br /&gt;
&lt;br /&gt;
 int milliseconds &amp;lt;- getMovieLength()&lt;br /&gt;
&lt;br /&gt;
Use this function to determine how long in milliseconds a movie is.  Note that this value will not be available for some movies, depending on the server.  If no value is available, then this function will return a length of -1.&lt;br /&gt;
&lt;br /&gt;
=== getVersionString ===&lt;br /&gt;
&lt;br /&gt;
To retrieve a human-readable version string:&lt;br /&gt;
&lt;br /&gt;
 string version &amp;lt;- getVersionString()&lt;br /&gt;
&lt;br /&gt;
This string will be of the format:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;liboggplay (a.b) Annodex Media Plugin (API x.y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Where a.b is the liboggplay version, and x.y is the API version.  Once accepted, this API will be version 1.0.  Minor changes of the API can add functions but not modify existing functions.&lt;br /&gt;
&lt;br /&gt;
=== getPluginVersion ===&lt;br /&gt;
&lt;br /&gt;
To retrieve a version string for the plugin alone (&amp;quot;a.b&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
 string version &amp;lt;- getPluginVersion()&lt;br /&gt;
&lt;br /&gt;
=== getAPIVersion ===&lt;br /&gt;
&lt;br /&gt;
To retrieve a version string for the Javascript interface alone (&amp;quot;x.y&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
 string version &amp;lt;- getAPIVersion()&lt;br /&gt;
&lt;br /&gt;
== Playlists ==&lt;br /&gt;
&lt;br /&gt;
If you wish to use playlists instead of individual movies, then the above function calls still exist, with the following caveats:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;getCurrentState&amp;lt;/tt&amp;gt; will not return FINISHED until the last movie in the playlist has completed playback&lt;br /&gt;
* &amp;lt;tt&amp;gt;getCurrentMovie&amp;lt;/tt&amp;gt; retrieves the currently playing movie - i.e. the movie at the current playlist position&lt;br /&gt;
* &amp;lt;tt&amp;gt;setCurrentMovie&amp;lt;/tt&amp;gt; sets the currently playing movie (and playback will begin from the beginning of the newly set movie, not the beginning of the playlist)&lt;br /&gt;
* &amp;lt;tt&amp;gt;retrieveAnnotations&amp;lt;/tt&amp;gt; will retrieve the annotations for the current movie only&lt;br /&gt;
* &amp;lt;tt&amp;gt;registerEndPlayCallback&amp;lt;/tt&amp;gt; will call back at the end of the playlist (i.e. at the end of the last movie) only.  Use &amp;lt;tt&amp;gt;registerPlaylistCallback&amp;lt;/tt&amp;gt; to receive notifications per movie.&lt;br /&gt;
* &amp;lt;tt&amp;gt;getMovieLength&amp;lt;/tt&amp;gt; will retrieve the movie length for the current movie only.  Use &amp;lt;tt&amp;gt;getMovieLengthAt&amp;lt;/tt&amp;gt; to retrieve the length for movies in the playlist that are not currently playing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The plugin does not actually recognise separate &amp;quot;single movie&amp;quot; and &amp;quot;playlist&amp;quot; modes - instead, single movies are actually just playlists with length 1.  The interface has been arranged so that the functions above &amp;quot;just work&amp;quot; for what looks like a single movie mode, but are also useful when multiple movies are inserted into the playlist.&lt;br /&gt;
&lt;br /&gt;
The following additional functions are also available for manipulation of the playlist.  These functions are also available when there is only one movie in the playlist, but don&#039;t provide much in the way of useful features.&lt;br /&gt;
&lt;br /&gt;
=== freezePlaylistProgression ===&lt;br /&gt;
&lt;br /&gt;
 freezePlaylistProgression()&lt;br /&gt;
&lt;br /&gt;
This function does not stop the current movie from playing, but does prevent the plugin from progressing to the next movie in the playlist.  Use this and unfreezePlayPosition for &amp;quot;atomic&amp;quot; operations on the playlist.&lt;br /&gt;
&lt;br /&gt;
=== unfreezePlaylistProgression ===&lt;br /&gt;
&lt;br /&gt;
 unfreezePlaylistProgression()&lt;br /&gt;
&lt;br /&gt;
See documentation for freezePlaylistProgression.&lt;br /&gt;
&lt;br /&gt;
=== registerPlaylistCallback ===&lt;br /&gt;
&lt;br /&gt;
 registerPlaylistCallback(function callback(void))&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;See [[#Callback_functions|Callback functions]] for details on setting up a Javascript callback function.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Use this function to register a javascript function that will get called by the plugin at the end of each movie in the playlist - i.e. when the playlist changes tracks. The last track does &#039;&#039;&#039;not&#039;&#039;&#039; trigger a call; the end play callback, if registered, will be invoked instead.&lt;br /&gt;
&lt;br /&gt;
=== getPlaylistLength ===&lt;br /&gt;
&lt;br /&gt;
To retrieve the length of the playlist:&lt;br /&gt;
&lt;br /&gt;
 int length &amp;lt;- getPlaylistLength()&lt;br /&gt;
&lt;br /&gt;
=== getCurrentPlaylistPosition ===&lt;br /&gt;
&lt;br /&gt;
To retrieve the position in the playlist of the current movie:&lt;br /&gt;
&lt;br /&gt;
 int position &amp;lt;- getCurrentPlaylistPosition()&lt;br /&gt;
&lt;br /&gt;
=== getMovieAt ===&lt;br /&gt;
&lt;br /&gt;
To get the url of the movie at the specified position (0 is the first position):&lt;br /&gt;
&lt;br /&gt;
 string url &amp;lt;- getMovieAt(int position)&lt;br /&gt;
&lt;br /&gt;
This function will return null if the position points to a slot outside the bounds of the playlist.&lt;br /&gt;
&lt;br /&gt;
Remember that &amp;lt;tt&amp;gt;getCurrentMovie&amp;lt;/tt&amp;gt; can be used to retrieve the movie at the current position.&lt;br /&gt;
&lt;br /&gt;
=== setMovieAt ===&lt;br /&gt;
&lt;br /&gt;
To set the url of the movie at the specified position (0 is the first position):&lt;br /&gt;
&lt;br /&gt;
 boolean success &amp;lt;- setMovieAt(int position, string url)&lt;br /&gt;
&lt;br /&gt;
This function will return false if the position points to a slot outside the bounds of the playlist.&lt;br /&gt;
&lt;br /&gt;
Remember that &amp;lt;tt&amp;gt;setCurrentMovie&amp;lt;/tt&amp;gt; can be used to change the currently playing movie.&lt;br /&gt;
&lt;br /&gt;
=== appendMovie ===&lt;br /&gt;
&lt;br /&gt;
To append a movie to the end of the playlist:&lt;br /&gt;
&lt;br /&gt;
 appendMovie(string url)&lt;br /&gt;
&lt;br /&gt;
=== insertMovieBefore ===&lt;br /&gt;
&lt;br /&gt;
To insert a movie before a specified position in the playlist:&lt;br /&gt;
&lt;br /&gt;
 boolean success &amp;lt;- insertMovieBefore(int position, string url)&lt;br /&gt;
&lt;br /&gt;
This function will return false if the position points to a slot outside the bounds of the playlist.&lt;br /&gt;
&lt;br /&gt;
=== removeMovieAt ===&lt;br /&gt;
&lt;br /&gt;
To remove a movie from the playlist:&lt;br /&gt;
&lt;br /&gt;
 boolean success &amp;lt;- removeMovieAt(int position)&lt;br /&gt;
&lt;br /&gt;
This function will return false if the position points to a slot outside the bounds of the playlist.&lt;br /&gt;
&lt;br /&gt;
=== playMovieAt ===&lt;br /&gt;
&lt;br /&gt;
To start playing a movie at a specified position in the playlist:&lt;br /&gt;
&lt;br /&gt;
 boolean success &amp;lt;- playMovieAt(int position)&lt;br /&gt;
&lt;br /&gt;
This function will return false if the position points to a slot outside the bounds of the playlist.&lt;br /&gt;
&lt;br /&gt;
=== playlistNext ===&lt;br /&gt;
&lt;br /&gt;
To start playing the next movie in the playlist:&lt;br /&gt;
&lt;br /&gt;
 boolean success &amp;lt;- playlistNext()&lt;br /&gt;
&lt;br /&gt;
This function will return false if the the current movie is the last one in the playlist.&lt;br /&gt;
&lt;br /&gt;
=== playlistPrev ===&lt;br /&gt;
&lt;br /&gt;
To start playing the previous movie in the playlist:&lt;br /&gt;
&lt;br /&gt;
 boolean success &amp;lt;- playlistPrev()&lt;br /&gt;
&lt;br /&gt;
This function will return false if the the current movie is the first one in the playlist.&lt;br /&gt;
&lt;br /&gt;
=== retrieveAnnotationsAt ===&lt;br /&gt;
&lt;br /&gt;
To retrieve all of the CMML annotations for a movie at a specified position in the playlist:&lt;br /&gt;
&lt;br /&gt;
 boolean success &amp;lt;- retrieveAnnotationsAt(int position, function callback(string))&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;See [[#Callback_functions|Callback functions]] for details on setting up a Javascript callback function.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
As per retrieveAnnotations, this function is an asynchronous call and will not return any annotations if the server does not support out-of-band annotation retrieval.&lt;br /&gt;
&lt;br /&gt;
This function will return false if a previous attempt at retrieving annotations is still being processed, or if the position points to a slot outside the bounds of the playlist.&lt;br /&gt;
&lt;br /&gt;
=== getMovieLengthAt ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This is currently unimplemented.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 int milliseconds &amp;lt;- getMovieLengthAt(int position)&lt;br /&gt;
&lt;br /&gt;
This function retrieves the length of the movie at the specified position in the playlist.  The function will return -1 if the movie length can not be determined.&lt;br /&gt;
&lt;br /&gt;
== Callback functions ==&lt;br /&gt;
&lt;br /&gt;
Since Javascript functions are not first-class objects, you can&#039;t pass one directly to the plugin as a callback. You need to wrap your callback in an anonymous object with a single member, &#039;call&#039;:&lt;br /&gt;
&lt;br /&gt;
 // Use this form for callbacks with a string argument, shown as &#039;&#039;function callback(string)&#039;&#039;:&lt;br /&gt;
 plugin.registerCMMLCallback(&lt;br /&gt;
   {&lt;br /&gt;
     call: function(s) { yourCMLLCallback(s); }&lt;br /&gt;
   }&lt;br /&gt;
 );&lt;br /&gt;
 &lt;br /&gt;
 // Use this form for callbacks with no arguments, shown as &#039;&#039;function callback(void)&#039;&#039;:&lt;br /&gt;
 plugin.registerEndPlayCallback(&lt;br /&gt;
   {&lt;br /&gt;
     call: function() { yourEndPlayCallback(); }&lt;br /&gt;
   }&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
Technically, you can inline your callback handling code directly in the &#039;call&#039; function, but it&#039;s much cleaner to just redirect to a stand-alone function for each callback, as shown above.&lt;br /&gt;
&lt;br /&gt;
Deregistering a callback is quite simple:&lt;br /&gt;
&lt;br /&gt;
 plugin.registerPlaylistCallback(null);&lt;br /&gt;
&lt;br /&gt;
= Suggested modifications =&lt;br /&gt;
==Individual Movies==&lt;br /&gt;
== states ==&lt;br /&gt;
 add state LOADING and NULL or uninitialized state &lt;br /&gt;
&lt;br /&gt;
== play ==&lt;br /&gt;
  function play()&lt;br /&gt;
if current state is NULL set state to LOADING else if already in loading state than a second call to play will force playback of what is available. &lt;br /&gt;
&lt;br /&gt;
when a user hits play internally we store a separate state that reports as LOADING but is really LOAD_TO_PLAY state which uses download rate control to predict when we should switch into playing mode. ie if the clip&#039;s duration is 60 seconds and after one second we have buffered 10 seconds of the clip we can safely immediately switch to play mode. In a different instance if after 10 seconds we have downloaded 5 seconds of the clip we should wait until we have buffered 40 seconds as it will take around 40 seconds to download the last 20 seconds of video. &lt;br /&gt;
&lt;br /&gt;
if the clip is a LIVE stream then it will begin playback after a few seconds have been buffered. Controllable by:&lt;br /&gt;
  setLiveBuffer(ms) sets the amount of the clip to buffer for a live stream.&lt;br /&gt;
&lt;br /&gt;
== load ==&lt;br /&gt;
  function load() //possible options include NOCACHE (to load from server even if its cached locally) &lt;br /&gt;
a function to begin loading the current clip without playing it back. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== getBufferedTime ==&lt;br /&gt;
Its unclear if get Buffered time gives you the milliseconds buffered from the beaning of the clip, but thats what it should do. To enable the display of a progress bar for the full clip. Ie getBufferedTime / getDuration&lt;br /&gt;
&lt;br /&gt;
if playing back a live stream it could report amount buffered ahead of current playback point&lt;br /&gt;
&lt;br /&gt;
==playlist==&lt;br /&gt;
&lt;br /&gt;
=== loadMovieAt ===&lt;br /&gt;
to start downloading/buffering a clip later in playlist&lt;br /&gt;
&lt;br /&gt;
=== getBufferedTimeAt === &lt;br /&gt;
to get the amount Buffered for a clip in the playlist.&lt;br /&gt;
&lt;br /&gt;
==Applications Preferences ==&lt;br /&gt;
How much disk space to use to store cached clips. Used for syncing and fast page reload on browser back. Also would be ideal if it looked for &#039;&#039;&#039;response headers&#039;&#039;&#039; that invalidate the cache. default 100megs or maybe use firefox preferences... It should uses last accessed first out cacheting. &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
* another point of comparison: [http://mplayerplug-in.cvs.sourceforge.net/mplayerplug-in/mplayerplug-in/DOCS/tech/javascript.txt?view=markup] (e.g. getDuration)&lt;br /&gt;
&lt;br /&gt;
* suggestion: Include audio capture (and Speex encoding) in the API&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=OggPlayJavascriptAPI&amp;diff=6736</id>
		<title>OggPlayJavascriptAPI</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=OggPlayJavascriptAPI&amp;diff=6736"/>
		<updated>2007-05-18T10:36:59Z</updated>

		<summary type="html">&lt;p&gt;Mdale: /* play */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This is a &#039;&#039;&#039;draft API&#039;&#039;&#039; for the OggPlay Firefox plugin.&lt;br /&gt;
&lt;br /&gt;
We want the OggPlay plugin to support both a simple individual movie mode, and a more fully-featured playlist mode.  All of the functions supported in individual movie mode are still useful in playlist mode; however additional functions also become useful.&lt;br /&gt;
&lt;br /&gt;
Note that the amount of available information for an internet-cast Ogg stream depends upon the type of server providing that stream.  In particular, an apache server with mod-annodex installed provides the following information that is not available for live-streamed or raw file-streamed movies:&lt;br /&gt;
* length of the movie&lt;br /&gt;
* CMML annotations for the entire movie in advance&lt;br /&gt;
&lt;br /&gt;
Furthermore, mod-annodex provides remote seeking functionality across the entire movie.  Hence, Oggplay allows arbitrary seeking on mod-annodex supported movies.  On the other hand, raw streams and live streams are only seekable within the region that has already been buffered by the player.&lt;br /&gt;
&lt;br /&gt;
== Individual movies ==&lt;br /&gt;
&lt;br /&gt;
=== OggPlayState ===&lt;br /&gt;
&lt;br /&gt;
 enum OggPlayState { PAUSED = 0; PLAYING = 1; FINISHED = 2 };&lt;br /&gt;
&lt;br /&gt;
These are fairly self-evident: the plugin begins in PAUSED or PLAYING state depending on the settings provided through the params tags, and changes to FINISHED state when the movie finishes playback.&lt;br /&gt;
&lt;br /&gt;
=== getCurrentState ===&lt;br /&gt;
&lt;br /&gt;
To retrieve the state:&lt;br /&gt;
&lt;br /&gt;
 int &amp;lt;- getCurrentState()&lt;br /&gt;
&lt;br /&gt;
=== pause ===&lt;br /&gt;
&lt;br /&gt;
 pause()&lt;br /&gt;
&lt;br /&gt;
This function will convert the PLAYING or FINISHED states to PAUSED.&lt;br /&gt;
&lt;br /&gt;
=== play ===&lt;br /&gt;
&lt;br /&gt;
 play()&lt;br /&gt;
&lt;br /&gt;
This function will convert the PAUSED state to PLAYING or FINISHED depending upon the current position within the movie.&lt;br /&gt;
&lt;br /&gt;
=== restart ===&lt;br /&gt;
&lt;br /&gt;
 restart()&lt;br /&gt;
&lt;br /&gt;
This function will convert any state to PLAYING, and start the movie again from the beginning&lt;br /&gt;
&lt;br /&gt;
=== getCurrentMovie ===&lt;br /&gt;
&lt;br /&gt;
To retrieve the currently playing (or just played, or about to play) movie:&lt;br /&gt;
&lt;br /&gt;
 string URL &amp;lt;- getCurrentMovie()&lt;br /&gt;
&lt;br /&gt;
=== setCurrentMovie ===&lt;br /&gt;
&lt;br /&gt;
To set a new movie:&lt;br /&gt;
&lt;br /&gt;
 setCurrentMovie(string URL)&lt;br /&gt;
&lt;br /&gt;
This will automatically begin playing at the beginning if the state is PLAYING or FINISHED, but will remain paused ready to play at the beginning if the state is PAUSED.&lt;br /&gt;
&lt;br /&gt;
=== getPlayPosition ===&lt;br /&gt;
&lt;br /&gt;
To get the current play position (in milliseconds) from the movie:&lt;br /&gt;
&lt;br /&gt;
 int milliseconds &amp;lt;- getPlayPosition()&lt;br /&gt;
&lt;br /&gt;
=== setPlayPosition ===&lt;br /&gt;
&lt;br /&gt;
To set the current play position (in milliseconds):&lt;br /&gt;
&lt;br /&gt;
 boolean success &amp;lt;- setPlayPosition(int milliseconds)&lt;br /&gt;
&lt;br /&gt;
Note that if you set a position past the end of the movie then the result will be a play position at the end of the movie, and the player in FINISHED mode.&lt;br /&gt;
&lt;br /&gt;
Note also that certain servers (e.g. plain Ogg files, no mod-annodex installed, etc.) will prevent seeking from being able to occur past the buffered portion of the file; in this case, false will be returned and the play position will be updated as far forward as possible.&lt;br /&gt;
&lt;br /&gt;
=== registerCMMLCallback ===&lt;br /&gt;
&lt;br /&gt;
To have the plugin call a javascript method as each CMML annotation is encountered (i.e. as movie playback reaches the point where the annotation needs to be inserted):&lt;br /&gt;
&lt;br /&gt;
 registerCMMLCallback(function callback)&lt;br /&gt;
&lt;br /&gt;
Use null if you want to deregister the callback without setting a new one.&lt;br /&gt;
&lt;br /&gt;
=== retrieveAnnotations ===&lt;br /&gt;
&lt;br /&gt;
To retrieve all of the CMML annotations for a movie:&lt;br /&gt;
&lt;br /&gt;
 string CMML &amp;lt;- retrieveAnnotations()&lt;br /&gt;
&lt;br /&gt;
Note that this won&#039;t return all annotations from some servers, e.g. if mod-annodex is not installed.  In this case, you will still be able to retrieve CMML as each annotation is encountered using registerCMMLCallback.&lt;br /&gt;
&lt;br /&gt;
=== registerEndPlayCallback ===&lt;br /&gt;
&lt;br /&gt;
To have the plugin call a javascript method when the movie finishes:&lt;br /&gt;
&lt;br /&gt;
 registerEndPlayCallback(function callback)&lt;br /&gt;
&lt;br /&gt;
Use null if you want to deregister the callback without setting a new one.&lt;br /&gt;
&lt;br /&gt;
=== setVolume ===&lt;br /&gt;
&lt;br /&gt;
 setVolume(float volume)&lt;br /&gt;
&lt;br /&gt;
Use this function to set the playback volume.  A value of 0.0 is equivalent to muting; a value of 1.0 is maximum volume.&lt;br /&gt;
&lt;br /&gt;
=== getVolume ===&lt;br /&gt;
&lt;br /&gt;
 float volume &amp;lt;- getVolume()&lt;br /&gt;
&lt;br /&gt;
Use this function to retrieve the current playback volume.&lt;br /&gt;
&lt;br /&gt;
=== getWindowWidth ===&lt;br /&gt;
&lt;br /&gt;
 int width &amp;lt;- getWindowWidth()&lt;br /&gt;
&lt;br /&gt;
Use this function to retrieve the width of the window in pixels (The width is determined by the Firefox render model)&lt;br /&gt;
&lt;br /&gt;
=== getWindowHeight ===&lt;br /&gt;
&lt;br /&gt;
 int height &amp;lt;- getWindowHeight()&lt;br /&gt;
&lt;br /&gt;
Use this function to retrieve the height of the window in pixels (The height is determined by the Firefox render model)&lt;br /&gt;
&lt;br /&gt;
=== getBufferedTime ===&lt;br /&gt;
&lt;br /&gt;
 int milliseconds &amp;lt;- getBufferedTime()&lt;br /&gt;
&lt;br /&gt;
Use this function to determine how many milliseconds of the current movie are buffered for display.  Note that this is the amount downloaded past the currently playing point, not just the amount decoded past the currently playing point.&lt;br /&gt;
&lt;br /&gt;
=== getMovieLength ===&lt;br /&gt;
&lt;br /&gt;
 int milliseconds &amp;lt;- getMovieLength()&lt;br /&gt;
&lt;br /&gt;
Use this function to determine how long in milliseconds a movie is.  Note that this value will not be available for some movies, depending on the server.  If no value is available, then this function will return a length of -1.&lt;br /&gt;
&lt;br /&gt;
=== getVersionString ===&lt;br /&gt;
&lt;br /&gt;
To retrieve a version string:&lt;br /&gt;
&lt;br /&gt;
 string version &amp;lt;- getVersionString()&lt;br /&gt;
&lt;br /&gt;
This string will be of the format:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;liboggplay (a.b) Annodex Media Plugin (API x.y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Where a.b is the liboggplay version, and x.y is the API version.  Once accepted, this API will be version 1.0.  Minor changes of the API can add functions but not modify existing functions.&lt;br /&gt;
&lt;br /&gt;
== Playlists ==&lt;br /&gt;
&lt;br /&gt;
If you wish to use playlists instead of individual movies, then the above function calls still exist, with the following caveats:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;getCurrentState&amp;lt;/tt&amp;gt; will not return FINISHED until the last movie in the playlist has completed playback&lt;br /&gt;
* &amp;lt;tt&amp;gt;restart&amp;lt;/tt&amp;gt; will start from the beginning of the playlist, not the beginning of the current movie&lt;br /&gt;
* &amp;lt;tt&amp;gt;getCurrentMovie&amp;lt;/tt&amp;gt; retrieves the currently playing movie - i.e. the movie at the current playlist position&lt;br /&gt;
* &amp;lt;tt&amp;gt;setCurrentMovie&amp;lt;/tt&amp;gt; sets the currently playing movie (and playback will begin from the beginning of the newly set movie, not the beginning of the playlist)&lt;br /&gt;
* &amp;lt;tt&amp;gt;getPlayPosition&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;setPlayPosition&amp;lt;/tt&amp;gt; operate on the playlist as a whole - i.e. if a playlist consists of a 5 second, a 7 second and a 4 second movie, then setPlayPosition(6000) will start playing from 1 second into the 2nd movie.  In situations where the size of movies not yet encountered can not be determined (e.g. if mod-annodex is not installed on the server), then false will be returned if &amp;lt;tt&amp;gt;setPlayPosition&amp;lt;/tt&amp;gt; requests a position past the furthest encountered position, and the furthest encountered position will be set.&lt;br /&gt;
* &amp;lt;tt&amp;gt;retrieveAnnotations&amp;lt;/tt&amp;gt; will retrieve the annotations for the current movie only&lt;br /&gt;
* &amp;lt;tt&amp;gt;registerEODCallback&amp;lt;/tt&amp;gt; will call back at the end of the playlist (i.e. at the end of the last movie) only.  Use &amp;lt;tt&amp;gt;registerPlaylistCallback&amp;lt;/tt&amp;gt; to recieve notifications per movie.&lt;br /&gt;
* &amp;lt;tt&amp;gt;getMovieLength&amp;lt;/tt&amp;gt; will retrieve the movie length for the current movie only.  Use &amp;lt;tt&amp;gt;getMovieLengthAt&amp;lt;/tt&amp;gt; to retrieve he movie length for movies in the playlist that are not currently playing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The plugin does not actually recognise separate &amp;quot;single movie&amp;quot; and &amp;quot;playlist&amp;quot; modes - instead, single movies are actually just playlists with length 1.  The interface has been arranged so that the functions above &amp;quot;just work&amp;quot; for what looks like a single movie mode, but are also useful when multiple movies are inserted into the playlist.&lt;br /&gt;
&lt;br /&gt;
The following additional functions are also available for manipulation of the playlist.  These functions are also available when there is only one movie in the playlist, but don&#039;t provide much in the way of useful features.&lt;br /&gt;
&lt;br /&gt;
=== freezePlaylistProgression ===&lt;br /&gt;
&lt;br /&gt;
 freezePlaylistProgression()&lt;br /&gt;
&lt;br /&gt;
This function does not stop the current movie from playing, but does prevent the plugin from progressing to the next movie in the playlist.  Use this and unfreezePlayPosition for &amp;quot;atomic&amp;quot; operations on the playlist.&lt;br /&gt;
&lt;br /&gt;
=== unfreezePlaylistProgression ===&lt;br /&gt;
&lt;br /&gt;
 unfreezePlaylistProgression()&lt;br /&gt;
&lt;br /&gt;
See documentation for freezePlaylistProgression.&lt;br /&gt;
&lt;br /&gt;
=== registerPlaylistCallback ===&lt;br /&gt;
&lt;br /&gt;
 registerPlaylistCallback(function callback)&lt;br /&gt;
&lt;br /&gt;
Use this function to register a javascript function that will get called by the plugin at the end of each movie in the playlist - i.e. when the playlist changes tracks.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; the last track will also trigger a call.  In the following circumstance&lt;br /&gt;
&lt;br /&gt;
 // there are 3 movies in the playlist&lt;br /&gt;
 registerPlaylistCallback(callbackA)&lt;br /&gt;
 registerEODCallback(callbackB)&lt;br /&gt;
&lt;br /&gt;
Then &amp;lt;tt&amp;gt;callbackA&amp;lt;/tt&amp;gt; will be called 3 times, and &amp;lt;tt&amp;gt;callbackB&amp;lt;/tt&amp;gt; will be called once&lt;br /&gt;
&lt;br /&gt;
=== getPlaylistLength ===&lt;br /&gt;
&lt;br /&gt;
To retrieve the length of the playlist:&lt;br /&gt;
&lt;br /&gt;
 int length &amp;lt;- getPlaylistLength()&lt;br /&gt;
&lt;br /&gt;
=== getCurrentPlaylistPosition ===&lt;br /&gt;
&lt;br /&gt;
To retrieve the position in the playlist of the current movie:&lt;br /&gt;
&lt;br /&gt;
 int position &amp;lt;- getCurrentPlaylistPosition()&lt;br /&gt;
&lt;br /&gt;
=== getMovieAt ===&lt;br /&gt;
&lt;br /&gt;
To get the url of the movie at the specified position (0 is the first position):&lt;br /&gt;
&lt;br /&gt;
 string url &amp;lt;- getMovieAt(int position)&lt;br /&gt;
&lt;br /&gt;
This function will return null if the position points to a slot outside the bounds of the playlist.&lt;br /&gt;
&lt;br /&gt;
Remember that &amp;lt;tt&amp;gt;getCurrentMovie&amp;lt;/tt&amp;gt; can be used to retrieve the movie at the current position.&lt;br /&gt;
&lt;br /&gt;
=== setMovieAt ===&lt;br /&gt;
&lt;br /&gt;
To set the url of the movie at the specified position (0 is the first position):&lt;br /&gt;
&lt;br /&gt;
 boolean success &amp;lt;- setMovieAt(int position, string url)&lt;br /&gt;
&lt;br /&gt;
This function will return false if the position points to a slot outside the bounds of the playlist.&lt;br /&gt;
&lt;br /&gt;
Remember that &amp;lt;tt&amp;gt;setCurrentMovie&amp;lt;/tt&amp;gt; can be used to change the currently playing movie.&lt;br /&gt;
&lt;br /&gt;
=== appendMovie ===&lt;br /&gt;
&lt;br /&gt;
To append a movie to the end of the playlist:&lt;br /&gt;
&lt;br /&gt;
 appendMovie(string url)&lt;br /&gt;
&lt;br /&gt;
=== insertMovieBefore ===&lt;br /&gt;
&lt;br /&gt;
To insert a movie before a specified position in the playlist:&lt;br /&gt;
&lt;br /&gt;
 boolean success &amp;lt;- insertMovieBefore(int position, string url)&lt;br /&gt;
&lt;br /&gt;
This function will return false if the position points to a slot outside the bounds of the playlist.&lt;br /&gt;
&lt;br /&gt;
=== getPlayPositionWithinMovie ===&lt;br /&gt;
&lt;br /&gt;
 int milliseconds &amp;lt;- getPlayPositionWithinMovie()&lt;br /&gt;
&lt;br /&gt;
This function retrieves the play position in milliseconds relative to the beginning of the current movie.&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;tt&amp;gt;getPlayPosition&amp;lt;/tt&amp;gt; to retrieve the play position relative to the beginning of the playlist.&lt;br /&gt;
&lt;br /&gt;
=== setPlayPositionWithinMovie ===&lt;br /&gt;
&lt;br /&gt;
 boolean success &amp;lt;- setPlayPositionWithinMovie(int milliseconds)&lt;br /&gt;
&lt;br /&gt;
This function sets the play position in milliseconds relative to the beginning of the current movie.&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;tt&amp;gt;setPlayPosition&amp;lt;/tt&amp;gt; to set the play position relative to the beginning of the playlist.&lt;br /&gt;
&lt;br /&gt;
=== retrieveAnnotationsAt ===&lt;br /&gt;
&lt;br /&gt;
 string CMML &amp;lt;- retrieveAnnotationsAt(int position)&lt;br /&gt;
&lt;br /&gt;
This function retrieves the CMML annotations from the movie at the specified position in the playlist.  The function will return an empty string in the following cases:&lt;br /&gt;
&lt;br /&gt;
* the movie at this position has no annotation&lt;br /&gt;
* the movie at this position is being served from a server that does not support out-of-band annotation retrieval&lt;br /&gt;
* the position is not a valid position (i.e. is outside the bounds of the playlist)&lt;br /&gt;
&lt;br /&gt;
=== getMovieLengthAt ===&lt;br /&gt;
&lt;br /&gt;
 int milliseconds &amp;lt;- getMovieLengthAt(int position)&lt;br /&gt;
&lt;br /&gt;
This function retrieves the length of the movie at the specified position in the playlist.  The function will return -1 if the movie length can not be determined.&lt;br /&gt;
&lt;br /&gt;
= Suggested modifications =&lt;br /&gt;
==Individual Movies==&lt;br /&gt;
== states ==&lt;br /&gt;
 add state LOADING and NULL or uninitialized state &lt;br /&gt;
&lt;br /&gt;
== play ==&lt;br /&gt;
  function play()&lt;br /&gt;
if current state is NULL set state to LOADING else if already in loading state than a second call to play will force playback of what is available. &lt;br /&gt;
&lt;br /&gt;
when a user hits play internally we store a separate state that reports as LOADING but is really LOAD_TO_PLAY state which uses download rate control to predict when we should switch into playing mode. ie if the clip&#039;s duration is 60 seconds and after one second we have buffered 10 seconds of the clip we can safely immediately switch to play mode. In diffrent instance if after 10 seconds we have downloaded 5 seconds of the clip we should wait until we have buffered 40 seconds as it will take around 40 seconds to download the last 20 seconds of video. &lt;br /&gt;
&lt;br /&gt;
if the clip is a LIVE stream then it will begin playback after a few seconds have been buffered. Controllable by:&lt;br /&gt;
  setLiveBuffer(ms) sets the amount of the clip to buffer for a live stream.&lt;br /&gt;
&lt;br /&gt;
== load ==&lt;br /&gt;
  function load() //possible options include NOCACHE (to load from server even if its cached locally) &lt;br /&gt;
a function to begin loading the current clip without playing it back. &lt;br /&gt;
&lt;br /&gt;
== getDuration ==&lt;br /&gt;
  get the clips duration &lt;br /&gt;
 &lt;br /&gt;
== getBufferedTime ==&lt;br /&gt;
Its unclear if get Buffered time gives you the milliseconds buffered from the beaning of the clip, but thats what it should do. To enable the display of a progress bar for the full clip. Ie getBufferedTime / getDuration&lt;br /&gt;
&lt;br /&gt;
if playing back a live stream it could report amount buffered ahead of current playback point&lt;br /&gt;
&lt;br /&gt;
==playlist==&lt;br /&gt;
&lt;br /&gt;
=== loadMovieAt ===&lt;br /&gt;
to start downloading/buffering a clip later in playlist&lt;br /&gt;
&lt;br /&gt;
=== getBufferedTimeAt === &lt;br /&gt;
to get the amount Buffered for a clip in the playlist.&lt;br /&gt;
&lt;br /&gt;
==Applications Preferences ==&lt;br /&gt;
How much disk space to use to store cached clips. Used for syncing and fast page reload on browser back. Also would be ideal if it looked for &#039;&#039;&#039;response headers&#039;&#039;&#039; that invalidate the cache. default 100megs or maybe use firefox preferences... It should uses last accessed first out cacheting. &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
* another point of comparison: [http://mplayerplug-in.cvs.sourceforge.net/mplayerplug-in/mplayerplug-in/DOCS/tech/javascript.txt?view=markup] (e.g. getDuration)&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=OggPlayJavascriptAPI&amp;diff=6735</id>
		<title>OggPlayJavascriptAPI</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=OggPlayJavascriptAPI&amp;diff=6735"/>
		<updated>2007-05-18T10:32:47Z</updated>

		<summary type="html">&lt;p&gt;Mdale: /* getBufferedTimeAt */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This is a &#039;&#039;&#039;draft API&#039;&#039;&#039; for the OggPlay Firefox plugin.&lt;br /&gt;
&lt;br /&gt;
We want the OggPlay plugin to support both a simple individual movie mode, and a more fully-featured playlist mode.  All of the functions supported in individual movie mode are still useful in playlist mode; however additional functions also become useful.&lt;br /&gt;
&lt;br /&gt;
Note that the amount of available information for an internet-cast Ogg stream depends upon the type of server providing that stream.  In particular, an apache server with mod-annodex installed provides the following information that is not available for live-streamed or raw file-streamed movies:&lt;br /&gt;
* length of the movie&lt;br /&gt;
* CMML annotations for the entire movie in advance&lt;br /&gt;
&lt;br /&gt;
Furthermore, mod-annodex provides remote seeking functionality across the entire movie.  Hence, Oggplay allows arbitrary seeking on mod-annodex supported movies.  On the other hand, raw streams and live streams are only seekable within the region that has already been buffered by the player.&lt;br /&gt;
&lt;br /&gt;
== Individual movies ==&lt;br /&gt;
&lt;br /&gt;
=== OggPlayState ===&lt;br /&gt;
&lt;br /&gt;
 enum OggPlayState { PAUSED = 0; PLAYING = 1; FINISHED = 2 };&lt;br /&gt;
&lt;br /&gt;
These are fairly self-evident: the plugin begins in PAUSED or PLAYING state depending on the settings provided through the params tags, and changes to FINISHED state when the movie finishes playback.&lt;br /&gt;
&lt;br /&gt;
=== getCurrentState ===&lt;br /&gt;
&lt;br /&gt;
To retrieve the state:&lt;br /&gt;
&lt;br /&gt;
 int &amp;lt;- getCurrentState()&lt;br /&gt;
&lt;br /&gt;
=== pause ===&lt;br /&gt;
&lt;br /&gt;
 pause()&lt;br /&gt;
&lt;br /&gt;
This function will convert the PLAYING or FINISHED states to PAUSED.&lt;br /&gt;
&lt;br /&gt;
=== play ===&lt;br /&gt;
&lt;br /&gt;
 play()&lt;br /&gt;
&lt;br /&gt;
This function will convert the PAUSED state to PLAYING or FINISHED depending upon the current position within the movie.&lt;br /&gt;
&lt;br /&gt;
=== restart ===&lt;br /&gt;
&lt;br /&gt;
 restart()&lt;br /&gt;
&lt;br /&gt;
This function will convert any state to PLAYING, and start the movie again from the beginning&lt;br /&gt;
&lt;br /&gt;
=== getCurrentMovie ===&lt;br /&gt;
&lt;br /&gt;
To retrieve the currently playing (or just played, or about to play) movie:&lt;br /&gt;
&lt;br /&gt;
 string URL &amp;lt;- getCurrentMovie()&lt;br /&gt;
&lt;br /&gt;
=== setCurrentMovie ===&lt;br /&gt;
&lt;br /&gt;
To set a new movie:&lt;br /&gt;
&lt;br /&gt;
 setCurrentMovie(string URL)&lt;br /&gt;
&lt;br /&gt;
This will automatically begin playing at the beginning if the state is PLAYING or FINISHED, but will remain paused ready to play at the beginning if the state is PAUSED.&lt;br /&gt;
&lt;br /&gt;
=== getPlayPosition ===&lt;br /&gt;
&lt;br /&gt;
To get the current play position (in milliseconds) from the movie:&lt;br /&gt;
&lt;br /&gt;
 int milliseconds &amp;lt;- getPlayPosition()&lt;br /&gt;
&lt;br /&gt;
=== setPlayPosition ===&lt;br /&gt;
&lt;br /&gt;
To set the current play position (in milliseconds):&lt;br /&gt;
&lt;br /&gt;
 boolean success &amp;lt;- setPlayPosition(int milliseconds)&lt;br /&gt;
&lt;br /&gt;
Note that if you set a position past the end of the movie then the result will be a play position at the end of the movie, and the player in FINISHED mode.&lt;br /&gt;
&lt;br /&gt;
Note also that certain servers (e.g. plain Ogg files, no mod-annodex installed, etc.) will prevent seeking from being able to occur past the buffered portion of the file; in this case, false will be returned and the play position will be updated as far forward as possible.&lt;br /&gt;
&lt;br /&gt;
=== registerCMMLCallback ===&lt;br /&gt;
&lt;br /&gt;
To have the plugin call a javascript method as each CMML annotation is encountered (i.e. as movie playback reaches the point where the annotation needs to be inserted):&lt;br /&gt;
&lt;br /&gt;
 registerCMMLCallback(function callback)&lt;br /&gt;
&lt;br /&gt;
Use null if you want to deregister the callback without setting a new one.&lt;br /&gt;
&lt;br /&gt;
=== retrieveAnnotations ===&lt;br /&gt;
&lt;br /&gt;
To retrieve all of the CMML annotations for a movie:&lt;br /&gt;
&lt;br /&gt;
 string CMML &amp;lt;- retrieveAnnotations()&lt;br /&gt;
&lt;br /&gt;
Note that this won&#039;t return all annotations from some servers, e.g. if mod-annodex is not installed.  In this case, you will still be able to retrieve CMML as each annotation is encountered using registerCMMLCallback.&lt;br /&gt;
&lt;br /&gt;
=== registerEndPlayCallback ===&lt;br /&gt;
&lt;br /&gt;
To have the plugin call a javascript method when the movie finishes:&lt;br /&gt;
&lt;br /&gt;
 registerEndPlayCallback(function callback)&lt;br /&gt;
&lt;br /&gt;
Use null if you want to deregister the callback without setting a new one.&lt;br /&gt;
&lt;br /&gt;
=== setVolume ===&lt;br /&gt;
&lt;br /&gt;
 setVolume(float volume)&lt;br /&gt;
&lt;br /&gt;
Use this function to set the playback volume.  A value of 0.0 is equivalent to muting; a value of 1.0 is maximum volume.&lt;br /&gt;
&lt;br /&gt;
=== getVolume ===&lt;br /&gt;
&lt;br /&gt;
 float volume &amp;lt;- getVolume()&lt;br /&gt;
&lt;br /&gt;
Use this function to retrieve the current playback volume.&lt;br /&gt;
&lt;br /&gt;
=== getWindowWidth ===&lt;br /&gt;
&lt;br /&gt;
 int width &amp;lt;- getWindowWidth()&lt;br /&gt;
&lt;br /&gt;
Use this function to retrieve the width of the window in pixels (The width is determined by the Firefox render model)&lt;br /&gt;
&lt;br /&gt;
=== getWindowHeight ===&lt;br /&gt;
&lt;br /&gt;
 int height &amp;lt;- getWindowHeight()&lt;br /&gt;
&lt;br /&gt;
Use this function to retrieve the height of the window in pixels (The height is determined by the Firefox render model)&lt;br /&gt;
&lt;br /&gt;
=== getBufferedTime ===&lt;br /&gt;
&lt;br /&gt;
 int milliseconds &amp;lt;- getBufferedTime()&lt;br /&gt;
&lt;br /&gt;
Use this function to determine how many milliseconds of the current movie are buffered for display.  Note that this is the amount downloaded past the currently playing point, not just the amount decoded past the currently playing point.&lt;br /&gt;
&lt;br /&gt;
=== getMovieLength ===&lt;br /&gt;
&lt;br /&gt;
 int milliseconds &amp;lt;- getMovieLength()&lt;br /&gt;
&lt;br /&gt;
Use this function to determine how long in milliseconds a movie is.  Note that this value will not be available for some movies, depending on the server.  If no value is available, then this function will return a length of -1.&lt;br /&gt;
&lt;br /&gt;
=== getVersionString ===&lt;br /&gt;
&lt;br /&gt;
To retrieve a version string:&lt;br /&gt;
&lt;br /&gt;
 string version &amp;lt;- getVersionString()&lt;br /&gt;
&lt;br /&gt;
This string will be of the format:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;liboggplay (a.b) Annodex Media Plugin (API x.y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Where a.b is the liboggplay version, and x.y is the API version.  Once accepted, this API will be version 1.0.  Minor changes of the API can add functions but not modify existing functions.&lt;br /&gt;
&lt;br /&gt;
== Playlists ==&lt;br /&gt;
&lt;br /&gt;
If you wish to use playlists instead of individual movies, then the above function calls still exist, with the following caveats:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;getCurrentState&amp;lt;/tt&amp;gt; will not return FINISHED until the last movie in the playlist has completed playback&lt;br /&gt;
* &amp;lt;tt&amp;gt;restart&amp;lt;/tt&amp;gt; will start from the beginning of the playlist, not the beginning of the current movie&lt;br /&gt;
* &amp;lt;tt&amp;gt;getCurrentMovie&amp;lt;/tt&amp;gt; retrieves the currently playing movie - i.e. the movie at the current playlist position&lt;br /&gt;
* &amp;lt;tt&amp;gt;setCurrentMovie&amp;lt;/tt&amp;gt; sets the currently playing movie (and playback will begin from the beginning of the newly set movie, not the beginning of the playlist)&lt;br /&gt;
* &amp;lt;tt&amp;gt;getPlayPosition&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;setPlayPosition&amp;lt;/tt&amp;gt; operate on the playlist as a whole - i.e. if a playlist consists of a 5 second, a 7 second and a 4 second movie, then setPlayPosition(6000) will start playing from 1 second into the 2nd movie.  In situations where the size of movies not yet encountered can not be determined (e.g. if mod-annodex is not installed on the server), then false will be returned if &amp;lt;tt&amp;gt;setPlayPosition&amp;lt;/tt&amp;gt; requests a position past the furthest encountered position, and the furthest encountered position will be set.&lt;br /&gt;
* &amp;lt;tt&amp;gt;retrieveAnnotations&amp;lt;/tt&amp;gt; will retrieve the annotations for the current movie only&lt;br /&gt;
* &amp;lt;tt&amp;gt;registerEODCallback&amp;lt;/tt&amp;gt; will call back at the end of the playlist (i.e. at the end of the last movie) only.  Use &amp;lt;tt&amp;gt;registerPlaylistCallback&amp;lt;/tt&amp;gt; to recieve notifications per movie.&lt;br /&gt;
* &amp;lt;tt&amp;gt;getMovieLength&amp;lt;/tt&amp;gt; will retrieve the movie length for the current movie only.  Use &amp;lt;tt&amp;gt;getMovieLengthAt&amp;lt;/tt&amp;gt; to retrieve he movie length for movies in the playlist that are not currently playing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The plugin does not actually recognise separate &amp;quot;single movie&amp;quot; and &amp;quot;playlist&amp;quot; modes - instead, single movies are actually just playlists with length 1.  The interface has been arranged so that the functions above &amp;quot;just work&amp;quot; for what looks like a single movie mode, but are also useful when multiple movies are inserted into the playlist.&lt;br /&gt;
&lt;br /&gt;
The following additional functions are also available for manipulation of the playlist.  These functions are also available when there is only one movie in the playlist, but don&#039;t provide much in the way of useful features.&lt;br /&gt;
&lt;br /&gt;
=== freezePlaylistProgression ===&lt;br /&gt;
&lt;br /&gt;
 freezePlaylistProgression()&lt;br /&gt;
&lt;br /&gt;
This function does not stop the current movie from playing, but does prevent the plugin from progressing to the next movie in the playlist.  Use this and unfreezePlayPosition for &amp;quot;atomic&amp;quot; operations on the playlist.&lt;br /&gt;
&lt;br /&gt;
=== unfreezePlaylistProgression ===&lt;br /&gt;
&lt;br /&gt;
 unfreezePlaylistProgression()&lt;br /&gt;
&lt;br /&gt;
See documentation for freezePlaylistProgression.&lt;br /&gt;
&lt;br /&gt;
=== registerPlaylistCallback ===&lt;br /&gt;
&lt;br /&gt;
 registerPlaylistCallback(function callback)&lt;br /&gt;
&lt;br /&gt;
Use this function to register a javascript function that will get called by the plugin at the end of each movie in the playlist - i.e. when the playlist changes tracks.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; the last track will also trigger a call.  In the following circumstance&lt;br /&gt;
&lt;br /&gt;
 // there are 3 movies in the playlist&lt;br /&gt;
 registerPlaylistCallback(callbackA)&lt;br /&gt;
 registerEODCallback(callbackB)&lt;br /&gt;
&lt;br /&gt;
Then &amp;lt;tt&amp;gt;callbackA&amp;lt;/tt&amp;gt; will be called 3 times, and &amp;lt;tt&amp;gt;callbackB&amp;lt;/tt&amp;gt; will be called once&lt;br /&gt;
&lt;br /&gt;
=== getPlaylistLength ===&lt;br /&gt;
&lt;br /&gt;
To retrieve the length of the playlist:&lt;br /&gt;
&lt;br /&gt;
 int length &amp;lt;- getPlaylistLength()&lt;br /&gt;
&lt;br /&gt;
=== getCurrentPlaylistPosition ===&lt;br /&gt;
&lt;br /&gt;
To retrieve the position in the playlist of the current movie:&lt;br /&gt;
&lt;br /&gt;
 int position &amp;lt;- getCurrentPlaylistPosition()&lt;br /&gt;
&lt;br /&gt;
=== getMovieAt ===&lt;br /&gt;
&lt;br /&gt;
To get the url of the movie at the specified position (0 is the first position):&lt;br /&gt;
&lt;br /&gt;
 string url &amp;lt;- getMovieAt(int position)&lt;br /&gt;
&lt;br /&gt;
This function will return null if the position points to a slot outside the bounds of the playlist.&lt;br /&gt;
&lt;br /&gt;
Remember that &amp;lt;tt&amp;gt;getCurrentMovie&amp;lt;/tt&amp;gt; can be used to retrieve the movie at the current position.&lt;br /&gt;
&lt;br /&gt;
=== setMovieAt ===&lt;br /&gt;
&lt;br /&gt;
To set the url of the movie at the specified position (0 is the first position):&lt;br /&gt;
&lt;br /&gt;
 boolean success &amp;lt;- setMovieAt(int position, string url)&lt;br /&gt;
&lt;br /&gt;
This function will return false if the position points to a slot outside the bounds of the playlist.&lt;br /&gt;
&lt;br /&gt;
Remember that &amp;lt;tt&amp;gt;setCurrentMovie&amp;lt;/tt&amp;gt; can be used to change the currently playing movie.&lt;br /&gt;
&lt;br /&gt;
=== appendMovie ===&lt;br /&gt;
&lt;br /&gt;
To append a movie to the end of the playlist:&lt;br /&gt;
&lt;br /&gt;
 appendMovie(string url)&lt;br /&gt;
&lt;br /&gt;
=== insertMovieBefore ===&lt;br /&gt;
&lt;br /&gt;
To insert a movie before a specified position in the playlist:&lt;br /&gt;
&lt;br /&gt;
 boolean success &amp;lt;- insertMovieBefore(int position, string url)&lt;br /&gt;
&lt;br /&gt;
This function will return false if the position points to a slot outside the bounds of the playlist.&lt;br /&gt;
&lt;br /&gt;
=== getPlayPositionWithinMovie ===&lt;br /&gt;
&lt;br /&gt;
 int milliseconds &amp;lt;- getPlayPositionWithinMovie()&lt;br /&gt;
&lt;br /&gt;
This function retrieves the play position in milliseconds relative to the beginning of the current movie.&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;tt&amp;gt;getPlayPosition&amp;lt;/tt&amp;gt; to retrieve the play position relative to the beginning of the playlist.&lt;br /&gt;
&lt;br /&gt;
=== setPlayPositionWithinMovie ===&lt;br /&gt;
&lt;br /&gt;
 boolean success &amp;lt;- setPlayPositionWithinMovie(int milliseconds)&lt;br /&gt;
&lt;br /&gt;
This function sets the play position in milliseconds relative to the beginning of the current movie.&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;tt&amp;gt;setPlayPosition&amp;lt;/tt&amp;gt; to set the play position relative to the beginning of the playlist.&lt;br /&gt;
&lt;br /&gt;
=== retrieveAnnotationsAt ===&lt;br /&gt;
&lt;br /&gt;
 string CMML &amp;lt;- retrieveAnnotationsAt(int position)&lt;br /&gt;
&lt;br /&gt;
This function retrieves the CMML annotations from the movie at the specified position in the playlist.  The function will return an empty string in the following cases:&lt;br /&gt;
&lt;br /&gt;
* the movie at this position has no annotation&lt;br /&gt;
* the movie at this position is being served from a server that does not support out-of-band annotation retrieval&lt;br /&gt;
* the position is not a valid position (i.e. is outside the bounds of the playlist)&lt;br /&gt;
&lt;br /&gt;
=== getMovieLengthAt ===&lt;br /&gt;
&lt;br /&gt;
 int milliseconds &amp;lt;- getMovieLengthAt(int position)&lt;br /&gt;
&lt;br /&gt;
This function retrieves the length of the movie at the specified position in the playlist.  The function will return -1 if the movie length can not be determined.&lt;br /&gt;
&lt;br /&gt;
= Suggested modifications =&lt;br /&gt;
==Individual Movies==&lt;br /&gt;
== states ==&lt;br /&gt;
 add state LOADING and NULL or uninitialized state &lt;br /&gt;
&lt;br /&gt;
== play ==&lt;br /&gt;
  function play()&lt;br /&gt;
if current state is NULL set state to LOADING else if already in loading state than a second call to play will force playback of what is available. &lt;br /&gt;
&lt;br /&gt;
when in a LOADING state after hitting play the plug in should use download rate control to predict when we should switch into playing mode. ie if the clip&#039;s duration is 60 seconds and after one second we have buffered 10 seconds of the clip we can safely immediately switch to play mode. If after 10 seconds we have downloaded 5 seconds of the clip we should wait until we have buffered 40 seconds as it will take around 40 seconds to download the last 20 seconds of video. &lt;br /&gt;
&lt;br /&gt;
if the clip is a LIVE stream then it will begin playback after a few seconds have been buffered. Controllable by:&lt;br /&gt;
  setLiveBuffer(ms) sets the amount of the clip to buffer for a live stream. &lt;br /&gt;
&lt;br /&gt;
== load ==&lt;br /&gt;
  function load() //possible options include NOCACHE (to load from server even if its cached locally) &lt;br /&gt;
a function to begin loading the current clip without playing it back. &lt;br /&gt;
&lt;br /&gt;
== getDuration ==&lt;br /&gt;
  get the clips duration &lt;br /&gt;
 &lt;br /&gt;
== getBufferedTime ==&lt;br /&gt;
Its unclear if get Buffered time gives you the milliseconds buffered from the beaning of the clip, but thats what it should do. To enable the display of a progress bar for the full clip. Ie getBufferedTime / getDuration&lt;br /&gt;
&lt;br /&gt;
if playing back a live stream it could report amount buffered ahead of current playback point&lt;br /&gt;
&lt;br /&gt;
==playlist==&lt;br /&gt;
&lt;br /&gt;
=== loadMovieAt ===&lt;br /&gt;
to start downloading/buffering a clip later in playlist&lt;br /&gt;
&lt;br /&gt;
=== getBufferedTimeAt === &lt;br /&gt;
to get the amount Buffered for a clip in the playlist.&lt;br /&gt;
&lt;br /&gt;
==Applications Preferences ==&lt;br /&gt;
How much disk space to use to store cached clips. Used for syncing and fast page reload on browser back. Also would be ideal if it looked for &#039;&#039;&#039;response headers&#039;&#039;&#039; that invalidate the cache. default 100megs or maybe use firefox preferences... It should uses last accessed first out cacheting. &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
* another point of comparison: [http://mplayerplug-in.cvs.sourceforge.net/mplayerplug-in/mplayerplug-in/DOCS/tech/javascript.txt?view=markup] (e.g. getDuration)&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=OggPlayJavascriptAPI&amp;diff=6734</id>
		<title>OggPlayJavascriptAPI</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=OggPlayJavascriptAPI&amp;diff=6734"/>
		<updated>2007-05-18T10:32:10Z</updated>

		<summary type="html">&lt;p&gt;Mdale: added some suggestions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This is a &#039;&#039;&#039;draft API&#039;&#039;&#039; for the OggPlay Firefox plugin.&lt;br /&gt;
&lt;br /&gt;
We want the OggPlay plugin to support both a simple individual movie mode, and a more fully-featured playlist mode.  All of the functions supported in individual movie mode are still useful in playlist mode; however additional functions also become useful.&lt;br /&gt;
&lt;br /&gt;
Note that the amount of available information for an internet-cast Ogg stream depends upon the type of server providing that stream.  In particular, an apache server with mod-annodex installed provides the following information that is not available for live-streamed or raw file-streamed movies:&lt;br /&gt;
* length of the movie&lt;br /&gt;
* CMML annotations for the entire movie in advance&lt;br /&gt;
&lt;br /&gt;
Furthermore, mod-annodex provides remote seeking functionality across the entire movie.  Hence, Oggplay allows arbitrary seeking on mod-annodex supported movies.  On the other hand, raw streams and live streams are only seekable within the region that has already been buffered by the player.&lt;br /&gt;
&lt;br /&gt;
== Individual movies ==&lt;br /&gt;
&lt;br /&gt;
=== OggPlayState ===&lt;br /&gt;
&lt;br /&gt;
 enum OggPlayState { PAUSED = 0; PLAYING = 1; FINISHED = 2 };&lt;br /&gt;
&lt;br /&gt;
These are fairly self-evident: the plugin begins in PAUSED or PLAYING state depending on the settings provided through the params tags, and changes to FINISHED state when the movie finishes playback.&lt;br /&gt;
&lt;br /&gt;
=== getCurrentState ===&lt;br /&gt;
&lt;br /&gt;
To retrieve the state:&lt;br /&gt;
&lt;br /&gt;
 int &amp;lt;- getCurrentState()&lt;br /&gt;
&lt;br /&gt;
=== pause ===&lt;br /&gt;
&lt;br /&gt;
 pause()&lt;br /&gt;
&lt;br /&gt;
This function will convert the PLAYING or FINISHED states to PAUSED.&lt;br /&gt;
&lt;br /&gt;
=== play ===&lt;br /&gt;
&lt;br /&gt;
 play()&lt;br /&gt;
&lt;br /&gt;
This function will convert the PAUSED state to PLAYING or FINISHED depending upon the current position within the movie.&lt;br /&gt;
&lt;br /&gt;
=== restart ===&lt;br /&gt;
&lt;br /&gt;
 restart()&lt;br /&gt;
&lt;br /&gt;
This function will convert any state to PLAYING, and start the movie again from the beginning&lt;br /&gt;
&lt;br /&gt;
=== getCurrentMovie ===&lt;br /&gt;
&lt;br /&gt;
To retrieve the currently playing (or just played, or about to play) movie:&lt;br /&gt;
&lt;br /&gt;
 string URL &amp;lt;- getCurrentMovie()&lt;br /&gt;
&lt;br /&gt;
=== setCurrentMovie ===&lt;br /&gt;
&lt;br /&gt;
To set a new movie:&lt;br /&gt;
&lt;br /&gt;
 setCurrentMovie(string URL)&lt;br /&gt;
&lt;br /&gt;
This will automatically begin playing at the beginning if the state is PLAYING or FINISHED, but will remain paused ready to play at the beginning if the state is PAUSED.&lt;br /&gt;
&lt;br /&gt;
=== getPlayPosition ===&lt;br /&gt;
&lt;br /&gt;
To get the current play position (in milliseconds) from the movie:&lt;br /&gt;
&lt;br /&gt;
 int milliseconds &amp;lt;- getPlayPosition()&lt;br /&gt;
&lt;br /&gt;
=== setPlayPosition ===&lt;br /&gt;
&lt;br /&gt;
To set the current play position (in milliseconds):&lt;br /&gt;
&lt;br /&gt;
 boolean success &amp;lt;- setPlayPosition(int milliseconds)&lt;br /&gt;
&lt;br /&gt;
Note that if you set a position past the end of the movie then the result will be a play position at the end of the movie, and the player in FINISHED mode.&lt;br /&gt;
&lt;br /&gt;
Note also that certain servers (e.g. plain Ogg files, no mod-annodex installed, etc.) will prevent seeking from being able to occur past the buffered portion of the file; in this case, false will be returned and the play position will be updated as far forward as possible.&lt;br /&gt;
&lt;br /&gt;
=== registerCMMLCallback ===&lt;br /&gt;
&lt;br /&gt;
To have the plugin call a javascript method as each CMML annotation is encountered (i.e. as movie playback reaches the point where the annotation needs to be inserted):&lt;br /&gt;
&lt;br /&gt;
 registerCMMLCallback(function callback)&lt;br /&gt;
&lt;br /&gt;
Use null if you want to deregister the callback without setting a new one.&lt;br /&gt;
&lt;br /&gt;
=== retrieveAnnotations ===&lt;br /&gt;
&lt;br /&gt;
To retrieve all of the CMML annotations for a movie:&lt;br /&gt;
&lt;br /&gt;
 string CMML &amp;lt;- retrieveAnnotations()&lt;br /&gt;
&lt;br /&gt;
Note that this won&#039;t return all annotations from some servers, e.g. if mod-annodex is not installed.  In this case, you will still be able to retrieve CMML as each annotation is encountered using registerCMMLCallback.&lt;br /&gt;
&lt;br /&gt;
=== registerEndPlayCallback ===&lt;br /&gt;
&lt;br /&gt;
To have the plugin call a javascript method when the movie finishes:&lt;br /&gt;
&lt;br /&gt;
 registerEndPlayCallback(function callback)&lt;br /&gt;
&lt;br /&gt;
Use null if you want to deregister the callback without setting a new one.&lt;br /&gt;
&lt;br /&gt;
=== setVolume ===&lt;br /&gt;
&lt;br /&gt;
 setVolume(float volume)&lt;br /&gt;
&lt;br /&gt;
Use this function to set the playback volume.  A value of 0.0 is equivalent to muting; a value of 1.0 is maximum volume.&lt;br /&gt;
&lt;br /&gt;
=== getVolume ===&lt;br /&gt;
&lt;br /&gt;
 float volume &amp;lt;- getVolume()&lt;br /&gt;
&lt;br /&gt;
Use this function to retrieve the current playback volume.&lt;br /&gt;
&lt;br /&gt;
=== getWindowWidth ===&lt;br /&gt;
&lt;br /&gt;
 int width &amp;lt;- getWindowWidth()&lt;br /&gt;
&lt;br /&gt;
Use this function to retrieve the width of the window in pixels (The width is determined by the Firefox render model)&lt;br /&gt;
&lt;br /&gt;
=== getWindowHeight ===&lt;br /&gt;
&lt;br /&gt;
 int height &amp;lt;- getWindowHeight()&lt;br /&gt;
&lt;br /&gt;
Use this function to retrieve the height of the window in pixels (The height is determined by the Firefox render model)&lt;br /&gt;
&lt;br /&gt;
=== getBufferedTime ===&lt;br /&gt;
&lt;br /&gt;
 int milliseconds &amp;lt;- getBufferedTime()&lt;br /&gt;
&lt;br /&gt;
Use this function to determine how many milliseconds of the current movie are buffered for display.  Note that this is the amount downloaded past the currently playing point, not just the amount decoded past the currently playing point.&lt;br /&gt;
&lt;br /&gt;
=== getMovieLength ===&lt;br /&gt;
&lt;br /&gt;
 int milliseconds &amp;lt;- getMovieLength()&lt;br /&gt;
&lt;br /&gt;
Use this function to determine how long in milliseconds a movie is.  Note that this value will not be available for some movies, depending on the server.  If no value is available, then this function will return a length of -1.&lt;br /&gt;
&lt;br /&gt;
=== getVersionString ===&lt;br /&gt;
&lt;br /&gt;
To retrieve a version string:&lt;br /&gt;
&lt;br /&gt;
 string version &amp;lt;- getVersionString()&lt;br /&gt;
&lt;br /&gt;
This string will be of the format:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;liboggplay (a.b) Annodex Media Plugin (API x.y)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Where a.b is the liboggplay version, and x.y is the API version.  Once accepted, this API will be version 1.0.  Minor changes of the API can add functions but not modify existing functions.&lt;br /&gt;
&lt;br /&gt;
== Playlists ==&lt;br /&gt;
&lt;br /&gt;
If you wish to use playlists instead of individual movies, then the above function calls still exist, with the following caveats:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;getCurrentState&amp;lt;/tt&amp;gt; will not return FINISHED until the last movie in the playlist has completed playback&lt;br /&gt;
* &amp;lt;tt&amp;gt;restart&amp;lt;/tt&amp;gt; will start from the beginning of the playlist, not the beginning of the current movie&lt;br /&gt;
* &amp;lt;tt&amp;gt;getCurrentMovie&amp;lt;/tt&amp;gt; retrieves the currently playing movie - i.e. the movie at the current playlist position&lt;br /&gt;
* &amp;lt;tt&amp;gt;setCurrentMovie&amp;lt;/tt&amp;gt; sets the currently playing movie (and playback will begin from the beginning of the newly set movie, not the beginning of the playlist)&lt;br /&gt;
* &amp;lt;tt&amp;gt;getPlayPosition&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;setPlayPosition&amp;lt;/tt&amp;gt; operate on the playlist as a whole - i.e. if a playlist consists of a 5 second, a 7 second and a 4 second movie, then setPlayPosition(6000) will start playing from 1 second into the 2nd movie.  In situations where the size of movies not yet encountered can not be determined (e.g. if mod-annodex is not installed on the server), then false will be returned if &amp;lt;tt&amp;gt;setPlayPosition&amp;lt;/tt&amp;gt; requests a position past the furthest encountered position, and the furthest encountered position will be set.&lt;br /&gt;
* &amp;lt;tt&amp;gt;retrieveAnnotations&amp;lt;/tt&amp;gt; will retrieve the annotations for the current movie only&lt;br /&gt;
* &amp;lt;tt&amp;gt;registerEODCallback&amp;lt;/tt&amp;gt; will call back at the end of the playlist (i.e. at the end of the last movie) only.  Use &amp;lt;tt&amp;gt;registerPlaylistCallback&amp;lt;/tt&amp;gt; to recieve notifications per movie.&lt;br /&gt;
* &amp;lt;tt&amp;gt;getMovieLength&amp;lt;/tt&amp;gt; will retrieve the movie length for the current movie only.  Use &amp;lt;tt&amp;gt;getMovieLengthAt&amp;lt;/tt&amp;gt; to retrieve he movie length for movies in the playlist that are not currently playing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The plugin does not actually recognise separate &amp;quot;single movie&amp;quot; and &amp;quot;playlist&amp;quot; modes - instead, single movies are actually just playlists with length 1.  The interface has been arranged so that the functions above &amp;quot;just work&amp;quot; for what looks like a single movie mode, but are also useful when multiple movies are inserted into the playlist.&lt;br /&gt;
&lt;br /&gt;
The following additional functions are also available for manipulation of the playlist.  These functions are also available when there is only one movie in the playlist, but don&#039;t provide much in the way of useful features.&lt;br /&gt;
&lt;br /&gt;
=== freezePlaylistProgression ===&lt;br /&gt;
&lt;br /&gt;
 freezePlaylistProgression()&lt;br /&gt;
&lt;br /&gt;
This function does not stop the current movie from playing, but does prevent the plugin from progressing to the next movie in the playlist.  Use this and unfreezePlayPosition for &amp;quot;atomic&amp;quot; operations on the playlist.&lt;br /&gt;
&lt;br /&gt;
=== unfreezePlaylistProgression ===&lt;br /&gt;
&lt;br /&gt;
 unfreezePlaylistProgression()&lt;br /&gt;
&lt;br /&gt;
See documentation for freezePlaylistProgression.&lt;br /&gt;
&lt;br /&gt;
=== registerPlaylistCallback ===&lt;br /&gt;
&lt;br /&gt;
 registerPlaylistCallback(function callback)&lt;br /&gt;
&lt;br /&gt;
Use this function to register a javascript function that will get called by the plugin at the end of each movie in the playlist - i.e. when the playlist changes tracks.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; the last track will also trigger a call.  In the following circumstance&lt;br /&gt;
&lt;br /&gt;
 // there are 3 movies in the playlist&lt;br /&gt;
 registerPlaylistCallback(callbackA)&lt;br /&gt;
 registerEODCallback(callbackB)&lt;br /&gt;
&lt;br /&gt;
Then &amp;lt;tt&amp;gt;callbackA&amp;lt;/tt&amp;gt; will be called 3 times, and &amp;lt;tt&amp;gt;callbackB&amp;lt;/tt&amp;gt; will be called once&lt;br /&gt;
&lt;br /&gt;
=== getPlaylistLength ===&lt;br /&gt;
&lt;br /&gt;
To retrieve the length of the playlist:&lt;br /&gt;
&lt;br /&gt;
 int length &amp;lt;- getPlaylistLength()&lt;br /&gt;
&lt;br /&gt;
=== getCurrentPlaylistPosition ===&lt;br /&gt;
&lt;br /&gt;
To retrieve the position in the playlist of the current movie:&lt;br /&gt;
&lt;br /&gt;
 int position &amp;lt;- getCurrentPlaylistPosition()&lt;br /&gt;
&lt;br /&gt;
=== getMovieAt ===&lt;br /&gt;
&lt;br /&gt;
To get the url of the movie at the specified position (0 is the first position):&lt;br /&gt;
&lt;br /&gt;
 string url &amp;lt;- getMovieAt(int position)&lt;br /&gt;
&lt;br /&gt;
This function will return null if the position points to a slot outside the bounds of the playlist.&lt;br /&gt;
&lt;br /&gt;
Remember that &amp;lt;tt&amp;gt;getCurrentMovie&amp;lt;/tt&amp;gt; can be used to retrieve the movie at the current position.&lt;br /&gt;
&lt;br /&gt;
=== setMovieAt ===&lt;br /&gt;
&lt;br /&gt;
To set the url of the movie at the specified position (0 is the first position):&lt;br /&gt;
&lt;br /&gt;
 boolean success &amp;lt;- setMovieAt(int position, string url)&lt;br /&gt;
&lt;br /&gt;
This function will return false if the position points to a slot outside the bounds of the playlist.&lt;br /&gt;
&lt;br /&gt;
Remember that &amp;lt;tt&amp;gt;setCurrentMovie&amp;lt;/tt&amp;gt; can be used to change the currently playing movie.&lt;br /&gt;
&lt;br /&gt;
=== appendMovie ===&lt;br /&gt;
&lt;br /&gt;
To append a movie to the end of the playlist:&lt;br /&gt;
&lt;br /&gt;
 appendMovie(string url)&lt;br /&gt;
&lt;br /&gt;
=== insertMovieBefore ===&lt;br /&gt;
&lt;br /&gt;
To insert a movie before a specified position in the playlist:&lt;br /&gt;
&lt;br /&gt;
 boolean success &amp;lt;- insertMovieBefore(int position, string url)&lt;br /&gt;
&lt;br /&gt;
This function will return false if the position points to a slot outside the bounds of the playlist.&lt;br /&gt;
&lt;br /&gt;
=== getPlayPositionWithinMovie ===&lt;br /&gt;
&lt;br /&gt;
 int milliseconds &amp;lt;- getPlayPositionWithinMovie()&lt;br /&gt;
&lt;br /&gt;
This function retrieves the play position in milliseconds relative to the beginning of the current movie.&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;tt&amp;gt;getPlayPosition&amp;lt;/tt&amp;gt; to retrieve the play position relative to the beginning of the playlist.&lt;br /&gt;
&lt;br /&gt;
=== setPlayPositionWithinMovie ===&lt;br /&gt;
&lt;br /&gt;
 boolean success &amp;lt;- setPlayPositionWithinMovie(int milliseconds)&lt;br /&gt;
&lt;br /&gt;
This function sets the play position in milliseconds relative to the beginning of the current movie.&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;tt&amp;gt;setPlayPosition&amp;lt;/tt&amp;gt; to set the play position relative to the beginning of the playlist.&lt;br /&gt;
&lt;br /&gt;
=== retrieveAnnotationsAt ===&lt;br /&gt;
&lt;br /&gt;
 string CMML &amp;lt;- retrieveAnnotationsAt(int position)&lt;br /&gt;
&lt;br /&gt;
This function retrieves the CMML annotations from the movie at the specified position in the playlist.  The function will return an empty string in the following cases:&lt;br /&gt;
&lt;br /&gt;
* the movie at this position has no annotation&lt;br /&gt;
* the movie at this position is being served from a server that does not support out-of-band annotation retrieval&lt;br /&gt;
* the position is not a valid position (i.e. is outside the bounds of the playlist)&lt;br /&gt;
&lt;br /&gt;
=== getMovieLengthAt ===&lt;br /&gt;
&lt;br /&gt;
 int milliseconds &amp;lt;- getMovieLengthAt(int position)&lt;br /&gt;
&lt;br /&gt;
This function retrieves the length of the movie at the specified position in the playlist.  The function will return -1 if the movie length can not be determined.&lt;br /&gt;
&lt;br /&gt;
= Suggested modifications =&lt;br /&gt;
==Individual Movies==&lt;br /&gt;
== states ==&lt;br /&gt;
 add state LOADING and NULL or uninitialized state &lt;br /&gt;
&lt;br /&gt;
== play ==&lt;br /&gt;
  function play()&lt;br /&gt;
if current state is NULL set state to LOADING else if already in loading state than a second call to play will force playback of what is available. &lt;br /&gt;
&lt;br /&gt;
when in a LOADING state after hitting play the plug in should use download rate control to predict when we should switch into playing mode. ie if the clip&#039;s duration is 60 seconds and after one second we have buffered 10 seconds of the clip we can safely immediately switch to play mode. If after 10 seconds we have downloaded 5 seconds of the clip we should wait until we have buffered 40 seconds as it will take around 40 seconds to download the last 20 seconds of video. &lt;br /&gt;
&lt;br /&gt;
if the clip is a LIVE stream then it will begin playback after a few seconds have been buffered. Controllable by:&lt;br /&gt;
  setLiveBuffer(ms) sets the amount of the clip to buffer for a live stream. &lt;br /&gt;
&lt;br /&gt;
== load ==&lt;br /&gt;
  function load() //possible options include NOCACHE (to load from server even if its cached locally) &lt;br /&gt;
a function to begin loading the current clip without playing it back. &lt;br /&gt;
&lt;br /&gt;
== getDuration ==&lt;br /&gt;
  get the clips duration &lt;br /&gt;
 &lt;br /&gt;
== getBufferedTime ==&lt;br /&gt;
Its unclear if get Buffered time gives you the milliseconds buffered from the beaning of the clip, but thats what it should do. To enable the display of a progress bar for the full clip. Ie getBufferedTime / getDuration&lt;br /&gt;
&lt;br /&gt;
if playing back a live stream it could report amount buffered ahead of current playback point&lt;br /&gt;
&lt;br /&gt;
==playlist==&lt;br /&gt;
&lt;br /&gt;
=== loadMovieAt ===&lt;br /&gt;
to start downloading/buffering a clip later in playlist&lt;br /&gt;
&lt;br /&gt;
=== getBufferedTimeAt === &lt;br /&gt;
to get the amount which a clip for a clip in the playlist. &lt;br /&gt;
&lt;br /&gt;
==Applications Preferences ==&lt;br /&gt;
How much disk space to use to store cached clips. Used for syncing and fast page reload on browser back. Also would be ideal if it looked for &#039;&#039;&#039;response headers&#039;&#039;&#039; that invalidate the cache. default 100megs or maybe use firefox preferences... It should uses last accessed first out cacheting. &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
* another point of comparison: [http://mplayerplug-in.cvs.sourceforge.net/mplayerplug-in/mplayerplug-in/DOCS/tech/javascript.txt?view=markup] (e.g. getDuration)&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=Summer_of_Code_2008&amp;diff=6461</id>
		<title>Summer of Code 2008</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=Summer_of_Code_2008&amp;diff=6461"/>
		<updated>2007-03-13T18:10:14Z</updated>

		<summary type="html">&lt;p&gt;Mdale: added CMS integration&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Current Ideas ==&lt;br /&gt;
&lt;br /&gt;
This is  our ideas page for [http://code.google.com/soc/ Google Summer of Code] projects with [http://xiph.org Xiph.org] and [http://annodex.net/ Annodex]. The two projects are participating jointly this year under Xiph&#039;s name.&lt;br /&gt;
&lt;br /&gt;
We need a primary and backup mentor volunteer for any project that is to become an official proposal, but submit something and we&#039;ll see who we can round up. :)&lt;br /&gt;
&lt;br /&gt;
note: Google Summer of Code 2007, mentoring organizations to apply between March 5 and March 12, students March 14 - March 24&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Students&#039;&#039;&#039; please use the template at [[Summer of Code Applications]] when applying for a GSoC position.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mentors&#039;&#039;&#039; for details of our mentor application and plan, please see [[Summer of Code 2007]].&lt;br /&gt;
&lt;br /&gt;
Students should also check out projects related to the [http://wiki.elphel.com/index.php?title=SoC Elphel Open Source cameras].&lt;br /&gt;
&lt;br /&gt;
=== Optimize Theora encoding/decoding speed, SSE/SSE2 ===&lt;br /&gt;
Work on MMX, SSE/SSE2 implementations of the crucial encoding and&lt;br /&gt;
decoding  elements in [http://svn.xiph.org/trunk/theora/ libtheora] and/or [http://svn.xiph.org/trunk/theora-exp theora-exp].&lt;br /&gt;
This could include porting the vp3 mmx and altivec code to the libtheora decoder, and writing sse improvements on the&lt;br /&gt;
mmx work that has already been done. The results must still build cleanly on other archs and do &lt;br /&gt;
run-time capability detection.&lt;br /&gt;
&lt;br /&gt;
You could start improving this [http://lists.xiph.org/pipermail/theora-dev/2005-August/002838.html MMX loop filter patch for theora-exp] that was never completed nor merged in current theora-exp (see all list thread).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Mentor: Ralph Giles, Timothy Terriberry, backup: Jan Gerber, Mike Smith&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Encode support in theora-exp ===&lt;br /&gt;
Implement a rate-distortion optimized encoding mode for [http://svn.xiph.org/trunk/theora-exp/ theora-exp],&lt;br /&gt;
including R-D optimzed mode decision and quantization (e.g., constant&lt;br /&gt;
lambda). Then, use the above routines to implement a medium-latency ABR&lt;br /&gt;
encoding mode (e.g., varying lambda), with a default target buffer size&lt;br /&gt;
of approximately 2 seconds.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Mentor: Timothy &amp;quot;Derf&amp;quot; Terriberry, backup: Mike Smith, Ralph Giles&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Development assistant for the &amp;quot;Ghost&amp;quot; audio codec ===&lt;br /&gt;
Designing a cutting edge perceptual codec is a very daunting task. Xiph&lt;br /&gt;
is in the research stage on a new low-latency, general purpose audio codec,&lt;br /&gt;
code-named &amp;quot;Ghost&amp;quot;. This is basically a &amp;quot;code assistant&amp;quot; position, where you&lt;br /&gt;
will be asked to implement, test, and give feedback on ideas from Christopher&lt;br /&gt;
Montgomery, designer of the Ogg Vorbis format. Be prepared to learn a lot about&lt;br /&gt;
audio coding, or apply what you already know. While there&#039;s less &amp;quot;ownership&amp;quot;&lt;br /&gt;
potential in this project proposal, it will be a great opportunity to learn&lt;br /&gt;
about compression algorithm design, practice your programming chops, and learn&lt;br /&gt;
to work in team.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Mentor: Christopher &amp;quot;Monty&amp;quot; Montgomery, backup: Jean-Marc Valin&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== OggMNG implementation ===&lt;br /&gt;
Implement the OggMNG decode support in [http://gstreamer.freedesktop.org/dev/ gstreamer] and/or [http://www.illiminable.com/ogg/ illi&#039;s dshow filters].&lt;br /&gt;
Implement encoding support in based on [http://www.advogato.org/person/company/diary.html?start=18 byzanz] or [http://live.gnome.org/Istanbul Istanbul]. Bonus points for&lt;br /&gt;
overlay support. Details on the OggMNG specifications [http://wiki.xiph.org/index.php/OggMNG here]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Mentors: Mike Smith, Ralph Giles&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Theora reference encoder quality optimization ===&lt;br /&gt;
The [http://theora.org/download.html libtheora] encoder could make more use of some features present in the spec&lt;br /&gt;
but not currently implemented in the encoder. This is a little open ended, but&lt;br /&gt;
suggestions are: quant matrix tuning, per-block qi choice, 4:2:2 and 4:4:4 chroma&lt;br /&gt;
support.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Mentor: Ralph Giles, backup: Timothy Terriberry&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Subtitle Definition ===&lt;br /&gt;
There has been a long-standing need for the introduction of subtitles into Ogg. Several means have been suggested and various implementations exist. However, there has been no standard way that is supported by Xiph at this stage.&lt;br /&gt;
&lt;br /&gt;
The [http://annodex.net/TR/draft-pfeiffer-cmml-03.html CMML] format with its time-aligned means of interleaving text into Ogg bitstreams is a platform on which we would very much like to define a standard means of including subtitles.&lt;br /&gt;
&lt;br /&gt;
In this project, a standard means of interleaving subtitles (as found on DVDs or in srt files) into Ogg will be defined using CMML.&lt;br /&gt;
&lt;br /&gt;
The project requires to make changes to the CMML definition and extend it in several ways. CMML needs to have a valid XML schema or DTD definition associated with it, so that standard XML tools will parse it. The associated documentation should then be updated and software written to put e.g. a srt file into CMML inside Ogg. If there is enough time, it would also be good to implement support for this format in a media player such as vlc or mplayer or xine.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Mentor: Silvia Pfeiffer, backup: Conrad Parker&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Theora support in ekiga ===&lt;br /&gt;
Implement support for Theora as a video codec in the [http://www.gnomemeeting.org/ ekiga] chat application.&lt;br /&gt;
Overlaps with [http://live.gnome.org/SummerOfCode2006/Ideas GNOME].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Mentor: Ralph Giles&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== MXF support in gstreamer ===&lt;br /&gt;
Implement an [http://www.digitalpreservation.gov/formats/fdd/fdd000013.shtml MXF] mux/demux for [http://gstreamer.freedesktop.org/dev/ gstreamer], with mappings for [http://xiph.org/vorbis/ Vorbis] and [http://xiph.org/theora Theora].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Mentors: Christian Schaller, Mike Smith&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Cascading Style Sheet support for CMML in GStreamer ===&lt;br /&gt;
&lt;br /&gt;
Implement support for [http://www.w3.org/Style/CSS/ Cascading Style Sheets] to add styling and positioning hints to&lt;br /&gt;
[http://annodex.net/TR/draft-pfeiffer-cmml-03.html CMML] text overlays on [http://xiph.org/theora Theora] video. Doing so allows for advanced titling features visually similar to TV-style news headlines, sports scores, and scrolling text. The advantage over conventional &amp;quot;burnt-in&amp;quot; titling is that the stylesheet-driven approach is machine-readable, allowing indexing for search and improved accessibility.&lt;br /&gt;
&lt;br /&gt;
The project involves:&lt;br /&gt;
# YUV compositing support in the [http://gstreamer.freedesktop.org/data/doc/gstreamer/0.10.1/gst-plugins-base-plugins/html/gst-plugins-base-plugins-textoverlay.html textoverlay] plugin in [http://gstreamer.freedesktop.org/dev/ gstreamer] in order to complete the low-level support for color and font attributes. Textoverlay already includes partial support for [http://developer.gnome.org/doc/API/2.0/pango/PangoMarkupFormat.html pango text], but lacks the necessary colorspace conversions. This portion of the project necessarily involves C programming.&lt;br /&gt;
# Implementation of a test application to playback video marked up with CSS titling hints. It is recommended that this portion of the project be implemented in a higher-level language for which GStreamer support and CSS parsing libraries exist, such as Python, Ruby or Haskell.&lt;br /&gt;
&lt;br /&gt;
Further work could include support for style sheets in liboggplay / Firefox, or direct support for style sheet retrieval and rendering in GStreamer (via the [http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good-plugins/html/gst-plugins-good-plugins-cmmldec.html  cmmldec] plugin and/or a new style-sheet-aware textoverlay plugin).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Mentor: Conrad Parker, backup: Mike Smith, Silvia Pfeiffer&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Hardware implementation of Theora decoding ===&lt;br /&gt;
Working on a hardware theora decoder, that can be used in embedded&lt;br /&gt;
devices, dvd players and video pods. Presumedly GPL verilog source&lt;br /&gt;
to run on an FPGA. See http://sourceforge.net/projects/elphel/ for a rough encoder implementation. This was a successful project in 2006.&lt;br /&gt;
&lt;br /&gt;
=== Intel to AT&amp;amp;T x86 assembly translation ===&lt;br /&gt;
There is a general need for cross platform projects to be able to compile the same asm accelleration code on both GCC and MSVC. Unfortunately, at least of x86, they have incompatible assembly formats. Currently people either convert one to the other by hand (a maintenance nightmare) or require an external compile/assemble step on one or the other platform.&lt;br /&gt;
&lt;br /&gt;
Start with the (unmaintained?) [http://www.niksula.hut.fi/~mtiihone/intel2gas/ intel2gas] script. Spruce it up to support all of recent MMX, SSE, SSE2, SSE3 instructions. Then implement the reverse translation. Once both are working, write some glue code so it can be easily used as part of a GNU autotools build to derive one set of source from the other at build or package time.&lt;br /&gt;
&lt;br /&gt;
=== Speex and FLAC encoders in Xiph QuickTime Components ===&lt;br /&gt;
Implement Speex and FLAC [http://developer.apple.com/documentation/MusicAudio/Reference/CoreAudio/index.html Core Audio] encoders.&lt;br /&gt;
&lt;br /&gt;
[http://xiph.org/quicktime/ XiphQT] has a Vorbis encoder component that could be used as a reference and starting point.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Mentor: Arek Korbik&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== New vocoder for Speex ===&lt;br /&gt;
Speex currently has a very low bit-rate (2.15 kbps) mode that is implemented as a trivial vocoder. This mode has four &amp;quot;reserved&amp;quot; bits per frame, which means it would be possible to transmit more information. The idea of this project would be to make use of these bits to improve the quality of the 2.15 kbps mode. Changes to both the encoder and the decoder are allowed, provided that they are compatible with older version. This means that the new bit-stream should be decodable by the old decoder with only minor loss in quality. This still leaves plenty of room for improvement. Requires signal processing knowledge.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Mentor: Jean-Marc Valin&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== New Speex VAD/VBR code ===&lt;br /&gt;
The current Speex VAD/VBR code is a quick hack, put together a long time ago. This project would consist of rewriting it to perform much better under all kinds of conditions. Requires signal processing knowledge.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Mentor: Jean-Marc Valin&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== rehuff: a tool to losslessly compress Vorbis files ===&lt;br /&gt;
Would be nice to have an updated version of &amp;quot;rehuff&amp;quot;, a tool to losslessly compress Vorbis files. There were an experimental version of it (see [http://lists.xiph.org/pipermail/vorbis-dev/2006-August/018522.html rehuff status]), but had some limits:&lt;br /&gt;
* it&#039;s not free software;&lt;br /&gt;
* it has a bug causing the rehuffed file can&#039;t correctly seek;&lt;br /&gt;
* it works only with stereo files.&lt;br /&gt;
&lt;br /&gt;
Would be nice to have an updated rehuff, without the previous limits, and with a library part that will be included in libvorbisenc, so all encoders could use it (rehuff binary, oggenc, ...).&lt;br /&gt;
&#039;&#039;Not an official Xiph.org project, only a user proposed idea.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Ogg and Annodex integration into open source web Content Management Systems ===&lt;br /&gt;
The goal of this project is to make the use of ogg theora video in existing CMSs as easy as possible. &lt;br /&gt;
The project would consist of integrating in browser playback and structured cmml metadata into existing CMSs like mediaWiki, drupal or wordpress. &lt;br /&gt;
&lt;br /&gt;
In browser playback support will be handled by vlc or java cortado plugin and then liboggplay &amp;amp; native browser decoding as that project matures. [http://metavid.ucsc.edu/wiki/index.php/Mv_embed mv_embed] may be a starting point for client plugin detection. &lt;br /&gt;
The extension package should also handle thumbnail generation via mplayer or ffmpeg, and ideally support transcodeing via shell calls to ffmpeg2theora. Meta data attributes for the video in the CMS could be exportable as CMML. (a standardized xml format for tagging continues video)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Mentor: Michael Dale&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Guidelines for Applying ==&lt;br /&gt;
&lt;br /&gt;
Remember that many people will apply to work on the Summer of Code.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that those of us evaluating your application do not know you, we do not know what kind of &lt;br /&gt;
experience you have, we do not know what you have done in the past and we have to pick the best people &lt;br /&gt;
suited for a particular task.&lt;br /&gt;
&lt;br /&gt;
Hence, it is very important that you tell us in your email why you should be considered to implement a &lt;br /&gt;
particular project. Please use the application template at [[Summer of Code Applications]] as a starting point.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
*[[CodingGuidelines]]&lt;br /&gt;
*[[MIT approach to design and implementation]]&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=List_of_Theora_videos&amp;diff=6039</id>
		<title>List of Theora videos</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=List_of_Theora_videos&amp;diff=6039"/>
		<updated>2006-12-22T10:56:39Z</updated>

		<summary type="html">&lt;p&gt;Mdale: -meta&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of sites where you can download videos encoded with [[Theora]].&lt;br /&gt;
&lt;br /&gt;
;[http://fedoraproject.org/wiki/RenderingProject/aiglx AIGLX]:Demonstration videos for AIGLX, a project that aims to enable GL-accelerated effects on a standard desktop.&lt;br /&gt;
;[http://v2v.cc/ V2V]:Video syndication network&lt;br /&gt;
;[http://metavid.org Metavid]:Ogg theroa archive of U.S House and Senate Floor Footage. &lt;br /&gt;
;[http://post.thing.net/ post.thing.net]:Media site with video torrents.&lt;br /&gt;
;[http://punkcast.com/905/ PUNKCAST#905 Richard M Stallman]:Two video clips: &#039;&#039;What&#039;s GNU?&#039;&#039; + &#039;&#039;St. IGNUcius&#039;&#039;&lt;br /&gt;
;[http://gplv3.fsf.org/av GPLv3 Conference, January 16-17 2006]:Speeches by Peter Brown, Eben Moglen and Richard Stallman.&lt;br /&gt;
;[http://www.polycrystal.org/lego/movies.html Lego Movies]:Two short movies: &#039;&#039;A New Computer&#039;&#039; and &#039;&#039;Swim&#039;&#039;.&lt;br /&gt;
;[http://revision3.com/ Revision3]:Tech TV torrents.&lt;br /&gt;
;[http://handgranat.org/The_Giver The Giver]:BitTorrent tracker with independent videos and music.&lt;br /&gt;
;[http://share.sh.cvut.cz/Theora_demos/ CTU Prague Archive]:[http://creativecommons.org/ Creative Commons] adverts + feature film &#039;&#039;[http://fourthwall.creativecommons.org/honey/ Honey]&#039;&#039;.&lt;br /&gt;
;[http://www.gnu.org/philosophy/audio/audio.html Speeches about the GNU Project&#039;s philosophy]:Featuring Richard Stallman et al.&lt;br /&gt;
;[http://www.redhat.com/en_us/USA/rhel/informationcenter/videos/ Red Hat Videos]:Videos about the GNU/Linux vendor&#039;s customers and solutions.&lt;br /&gt;
;&#039;&#039;[http://www.mininova.org/tor/234676 New Waterford Girl]&#039;&#039;:Canadian comedy from 1999. Unauthorized copy (not legal in all jurisdictions).&lt;br /&gt;
;[http://free-electrons.com/community/videos/conferences/en Free Electrons Conferences]: technical talks given at conferences about free software.&lt;br /&gt;
;[http://ulm.ccc.de/ChaosSeminar Ulm CCC Chaosseminar]: (german)&lt;br /&gt;
;[http://www.visonair.tv/ Visonair.tv]: Open Access Internet TV channel streaming in &#039;&#039;Ogg Theora&#039;&#039;&lt;br /&gt;
;[http://dyne.org/~kysucix/index.html?video 11200 undo]: A short movie about computer, religion, sex, glue and so on...&lt;br /&gt;
;[http://commons.wikimedia.org/ Wikimedia Commons]: An archive database of 644,951 media files, to which anyone can contribute&lt;br /&gt;
;[http://www.archive.org/details/VoyagetothePlanetofPrehistoricWomen Voyage to the Planet of Prehistoric Women] (1967) and [http://www.archive.org/details/TheSnowCreature The Snow Creature] (1954): Full-length public domain movies from the Internet Archive&#039;s [http://www.archive.org/details/feature_films collection].&lt;br /&gt;
;[http://video.indypgh.org Rustbelt TV]: [http://pittsburgh.indypgh.org Pittsburgh Indymedia&#039;s] TV program based on [http://radio.indypgh.org Rustbelt Radio] (audio available as ogg vorbis).&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=List_of_Theora_videos&amp;diff=6038</id>
		<title>List of Theora videos</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=List_of_Theora_videos&amp;diff=6038"/>
		<updated>2006-12-22T10:55:57Z</updated>

		<summary type="html">&lt;p&gt;Mdale: added metavid&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of sites where you can download videos encoded with [[Theora]].&lt;br /&gt;
&lt;br /&gt;
;[http://fedoraproject.org/wiki/RenderingProject/aiglx AIGLX]:Demonstration videos for AIGLX, a project that aims to enable GL-accelerated effects on a standard desktop.&lt;br /&gt;
;[http://v2v.cc/ V2V]:Video syndication network&lt;br /&gt;
;[http://metavid.org Metavid]:Ogg theroa archive of U.S House and Senate Floor Footage and meta data. &lt;br /&gt;
;[http://post.thing.net/ post.thing.net]:Media site with video torrents.&lt;br /&gt;
;[http://punkcast.com/905/ PUNKCAST#905 Richard M Stallman]:Two video clips: &#039;&#039;What&#039;s GNU?&#039;&#039; + &#039;&#039;St. IGNUcius&#039;&#039;&lt;br /&gt;
;[http://gplv3.fsf.org/av GPLv3 Conference, January 16-17 2006]:Speeches by Peter Brown, Eben Moglen and Richard Stallman.&lt;br /&gt;
;[http://www.polycrystal.org/lego/movies.html Lego Movies]:Two short movies: &#039;&#039;A New Computer&#039;&#039; and &#039;&#039;Swim&#039;&#039;.&lt;br /&gt;
;[http://revision3.com/ Revision3]:Tech TV torrents.&lt;br /&gt;
;[http://handgranat.org/The_Giver The Giver]:BitTorrent tracker with independent videos and music.&lt;br /&gt;
;[http://share.sh.cvut.cz/Theora_demos/ CTU Prague Archive]:[http://creativecommons.org/ Creative Commons] adverts + feature film &#039;&#039;[http://fourthwall.creativecommons.org/honey/ Honey]&#039;&#039;.&lt;br /&gt;
;[http://www.gnu.org/philosophy/audio/audio.html Speeches about the GNU Project&#039;s philosophy]:Featuring Richard Stallman et al.&lt;br /&gt;
;[http://www.redhat.com/en_us/USA/rhel/informationcenter/videos/ Red Hat Videos]:Videos about the GNU/Linux vendor&#039;s customers and solutions.&lt;br /&gt;
;&#039;&#039;[http://www.mininova.org/tor/234676 New Waterford Girl]&#039;&#039;:Canadian comedy from 1999. Unauthorized copy (not legal in all jurisdictions).&lt;br /&gt;
;[http://free-electrons.com/community/videos/conferences/en Free Electrons Conferences]: technical talks given at conferences about free software.&lt;br /&gt;
;[http://ulm.ccc.de/ChaosSeminar Ulm CCC Chaosseminar]: (german)&lt;br /&gt;
;[http://www.visonair.tv/ Visonair.tv]: Open Access Internet TV channel streaming in &#039;&#039;Ogg Theora&#039;&#039;&lt;br /&gt;
;[http://dyne.org/~kysucix/index.html?video 11200 undo]: A short movie about computer, religion, sex, glue and so on...&lt;br /&gt;
;[http://commons.wikimedia.org/ Wikimedia Commons]: An archive database of 644,951 media files, to which anyone can contribute&lt;br /&gt;
;[http://www.archive.org/details/VoyagetothePlanetofPrehistoricWomen Voyage to the Planet of Prehistoric Women] (1967) and [http://www.archive.org/details/TheSnowCreature The Snow Creature] (1954): Full-length public domain movies from the Internet Archive&#039;s [http://www.archive.org/details/feature_films collection].&lt;br /&gt;
;[http://video.indypgh.org Rustbelt TV]: [http://pittsburgh.indypgh.org Pittsburgh Indymedia&#039;s] TV program based on [http://radio.indypgh.org Rustbelt Radio] (audio available as ogg vorbis).&lt;/div&gt;</summary>
		<author><name>Mdale</name></author>
	</entry>
</feed>