HTML5 Audio-Einbindung per AUDIO-Tag (Stand Mai 2010)
=====================================================

1.	Ansatz
--------------

Etliche Jahre spter als es Microsoft getan hat, wurde nun Sound und Video als HTML-Tag
eingefhrt und dabei die Schnittstelle von Microsoft unntig gemacht.

Im Zuge der Verbreitung von HTML5, das Mediadaten anzeigen kann, wurde Codec (Vorschriften
zur Art der Medien) bentigt, der ebenfalls verbreitbar ist, wobei entweder keine oder
zeitweise oder immer Lizenzgebhren fllig werden.

Es gibt Browserhersteller, die haben sich der Implementation von HTML 5 angeschlossen oder
auch nicht. Zu letzteren gehrt Microsoft als Vertreter von Unternehmen, die ihre Produkte
direkt oder indirekt gegen Entgelt verwerten und Kunden an Produkte binden wollen.

Die Verbreitung von Media per HTML 5 ist nur in Form der Codecs von www.xiph.org mglich
(oga, ogv, theora).

Microsoft und andere Lizenzgeber planen, HTML 5 um den H264-Codec zu erweitern, der auf
Verwertung per Lizenzrecht basiert und zum Zweck der Verbreitung wie folgt offeriert wird:
	zeitweise von Entgelten befreit,
	Einbindung des Codes in Windows, das Payware ist (indirekte Lizenzverwertung).
Zu diesem Zweck plant Microsoft sogar, auf den eigenen Codec V1 zu verzichten, damit
der massenhaften Verbreitung von H264 (hnlich wie von DivX) wenig im Wege steht - auer
eben Ogg und Theora.

Microsoft ist z.Z. DER bekannteste Browserhersteller, der HTML-5-Media nicht untersttzt
und das schon seit einigen Jahren in Microsoft-HTML-DOM eingebaute BGSOUND-Tag nicht
erweitert. Im Gegenteil: Microsoft hat HTML-5 bereits in Elemente so eingebaut, dass das
Objekt als leere Hlle vorhanden sind, aber das Ansprechen der Hlle zu Fehlern der
Webseite fhrt, fngt man die leere Hlle nicht ab. Mit anderen Worten: Microsoft
macht sich also auch noch lustig ber HTML-5. Z.Z. ist der Internet Explorer 8 am Markt,
der HTML-5-Media fehlerhaft implementiert hat. Der Internet Explorer 9 wird  HTML-5
per H264 anbieten, wobei die Lizenzgebhr per Kauf von Windows abgedeckt wird.

Eine weitere Strecke zur Mediendarstellung per Webseite ist inzwischen das massenhaft
verbreitete Flash von Macromedia, das von Adobe geschluckt wurde und mit hochpreisigen
Produkten angepriesen wird - nur der Player nebst Codec sind kostenfrei beziehbar.
Die Flash-Verbreitung ist derart massiv, dass wie Google-Werbung Webseiten regelrecht
und aggresaiv zugemllt sind: Es soll Verwertung stattfinden. Webseiten mit abgeschalteter
Flash-Fhigkeit sind eine Ansammlung von leeren Containern, so dass die maschinelle
Erstellung der Webseite (nebst Datenbankanbindung) geringe Kosten der Entwicklung
erlauben, um Verwertung am Markt sichtbar wird. Man sieht diesen Webseiten den
sterilen Flash-Stil oft an - optimierte Uniformitt fr Verwertung.

HTML-5 mit ogg und theora erlaubt es, kostengnstig, mllfrei und individuelle Webseiten
zu gestalten, ohne sich an Hersteller, Betriebssystem und Lizenzregelungen binden zu mssen.
Diese innovativen Mglichkeiten sind schlichtweg divergent zu o.g. Auffassungen bezglich 
H264 in HTML5. Ob ein Verwertungsanbieter sich erbarmt, und HTML-5 unverndert zulsst,
ist stark zu bezweifeln - erst recht bei Microsoft und Adobe. Das zeigt auch die Entwicklung
bezglich DivX (analog die von Blu-Ray als DVD-Nachfolger: Nur die AVCHD-Variante lsst
sich kostengnstig oder mit Freeware nachbilden, nicht jedoch das eigentliche Blu-Ray).


2.	HTML-5-Media auf Basis ogg und theora (www.xiph.org)
------------------------------------------------------------

Z.Z. sind nicht alle Webbrowser aktuell bezglich HTML-5. Der Microsoft Internet Explorer 8
ist komplett veraltet: Er kennt kein HTML-5-Media, egal was Microsoft ber HTML-5 lobend
von sich gibt. Microsoft hat mit HTML-5-Standard wenig am Hut und diesmal extem kontraproduktiv,
dafr bestens sich selbst ausgrenzend.

Browser wie Opera und Firefox kennen HTML-5, wobei Firefox traditionell etwas verspielter ist.

Wenn also HTML-5-Media im Browser implementiert ist, dann z.Z. auf Basis ogg und theora (www.xiph.org).
Die HTML-Elemente <VIDEO> und <AUDIO> werden vom Browser direkt verarbeitet, ohne
	dass ein Codec installiert sein muss. Der Browser bietet einen Player an.

Der Codec-Anbieter liefert zugleich Software mit, die z.B. in Windows den Microsoft Windows Media Player
zur ogg/theora Fhigkeit verhilft, nicht jedoch aber den Internet Explorer (nur Google arbeitet gern
fr Microsoft und erweitert den Internet Explorer um Mediawiedergabefhigkeit). Der Codec erweitert auch
Freewareplayer wie Media Player Classic (http://mpc-hc.sourceforge.net/). Kommerzielle Software wird
eventuell nicht um die Abspielfhigkeit erweitert, wenn der Anbieter der kommerziellen Software das
unterbindet und nur seine Codecs offerieren will.
Unter Windows wird DirectShow benutzt.

Im Bereich Freeware gibt es wenige, aber brauchbare Tools zu Konvertierung von Medien nach
ogg bzw. theora, so dass man die Medienerstellung auch mit anderer Freeware vollziehen kann.
	z.B. OGV erstellen per FFCode (ber ffmpeg2theora) z.B. aus AVI oder mpg.
   Damit gibt es eine Adobe-Flash-Konkurrenten mehr und das als HTML-Standard.

Audio in HTML-5

	wave also vermutlich nur unkomprimierte PCM
	definitiv kein flac (getestet) obwohl flac zu Ogg gehrt
                  kein a3 (getestet)
	          kein mid (getestet)

Video
	nur Ogg Theora also OGV oder OGG oder OGA

			http://theora.org/downloads/
	    AVI

	keine komprimierten Formate wie mpg, wmv, mp4

Ogg Theora (ogv) knnen

	Opera
	Firefox
	Chrome
	Safari   kann nur H.264 codec (mp4)
	Internet Explorer kann nur Plugins wie Flash etc.

Internet Audiostreams per OGG
- - - - - - - - - - - - - - -

Streaming ist der permanente Datenfluss ber das Internet, also knnen
permanent Kosten des Datenflusses entstehen. Warnung: Es gab in der
Vergangenheit Provider, die haben Flatrate angeboten, aber bei tatschlicher
Nutzung mit hohem Transferumfang den Kunden gefeuert. Flatrate ist nicht
Flatrate, zumindest in Deutschland nicht.

Wer LiveStream fr OGG sucht, um es problemlos im Browser per HTML5 anzuhren,
der muss ausgiebig suchen.

Die Radiosender des WDR (dradio und dfunk) bieten ogg-Streaming an: Kostenlos
	das Programm live im Browser mithren. Warnung: GEZ-Gebhr fr
	Internetzugang fllig (Es reicht die reale Mglichkeit des Zuganges,
	jedoch ob auch wirklich benutzt, ist egal).

	blich ist es, den Zugang per m3u-Datei anzubieten und je nach
	Qualitt des Datenflusses. m3u-Datei ist wie eine Textdatei
	lesbar und enthlt den Internet-Link, der dem Player per
	<AUDIO>-Tag im Attribut SRC bergeben wird. Das Streamen selbst
	erledigt der Browser komplett allein, welcher dazu mit dem Internet
	kontaktiert sein muss.

Wer vermutet, dass ARD und Co. Livestreaming fr OGG anbieten, liegt komplett
	daneben: Null Angebot fr OGG-TV. ARD und Co. bentigen z.Z. ihre volle
	Konzentration und Kraft fr ein HD-Fernsehen, das bewusst nicht im 
	internationalen Standard gesendet wird (produziert schon eher).
	So gesehen ist es nicht verwunderlich, wenn ARD und Co. auch bezglich
	Nutzerfreundlichkeit auf das falsche Pferd bei Livestream gesetzt haben:
	WMA und Flash und Co.. "Begeisterte" Zuschauer von HD-TV des ARD und Co.
	haben schon mal eine Internet-Petition ausgelst, die ARD und Co.
	zur Einhaltung des internationalen Standards und Qualitt auffordert.


3. 	HTML-5-Audio
--------------------

HTML-5-Audio und HTML-5-Video wurden spartanisch implementiert: Z.B. gibt es
	keine JavaScript-Schnittstelle .stop(), dafr gibt es aber .play()
	und .src (belegt man .src mit dem Dateinamen, dann werden Daten erst per
	.play() wiedergebeben; belegt man .src mit Leerkette also "", dann wird
	ein .stop() emuliert - Man sieht: Konseqent nicht objektorientiert
	implementiert).

Audio hnelt dem Video.
	Video umfasst mehr Mglichkeiten und Eigenschaften von Audio.
	Video kann auch Audio abspielen (ohne Bild)
		Achtung: Desgin-Fehler: Ein leerer Anzeigbereich wird eventuell angezeigt,
						auch wenn Audio kein Bild haben kann.
	      bietet per rechter Maus, also per Kontextmen, Mglichkeiten der Steuerung an.
		Achtung: Es gibt ev. Browser, die zeigen Kontextmen in der Reaktion abweichend an.


HTML-Syntax- Beispiel fr Audio

<HTML>
<BODY>
<!-- Quelltext wurde mit Windows notepad.exe erstellt -->

<H3> OGA-Audio im Browser laden und sofort starten</H3>
<IMAGE ID="ersatz_fuer_poster" 
       WIDTH="300"
       HEIGHT="240"
       SRC="demo_audio.jpg"
>
<BR>
<!--	Player-Control-Leiste-hhe ist 50 Pixel -->
<!--    Player-Control-Leiste-Breite ist 300 Pixel fr Audio-Tag -->
<!--                                 ist in Breite laut width fr Video-Tag -->
<AUDIO ID="test"
       CONTROLS
 >
 mp3-Audio <A HREF"=demo.mp3">demo.mp3</A>
 <BR>
 Der Microsoft Internet Explorer erkennt Audio-Tag nicht, so dass der Link auch nicht
 <BR>
 erkannt wird, aber dafr der Text angezeigt wird.
 <BR>
 Sollte der Codec zu ogg unter Windows installiert worde sein,
 <BR>
 kann der Windows Media Player auch ogg / theora wiedergeben.
</AUDIO>
     <!-- width und height werden ignoriert -->
     <!--- Control-Leiste-Breite ist 300 Pixel fr Audio-Tag, das nichts anzeigt und ohne Dimension ist -->
     <!---                        ist in Breite laut width fr Video-Tag (nicht des Videos selbst) -->
     <!-- src muss angegeben werden, Video oder Audio -->
     <!--     auch per source-Tag kodierbar -->
     <!--      z.B.  < audio ..... > < source src="demo.ogv" type="video/ogv" > ... < / audio > -->
     <!--                 Es wird nur das Audio aus demo.ogv wiedergegeben -->
     <!-- poster wird irgnriert -->
     <!-- autobuffer optional, Laden der Mediadaten aktivieren gleichzeitig mit Laden der Webseite -->
     <!-- autoplay optional, abspielen der Mediadaten direkt nach dem Laden des Audio-Objektes in der Webseite -->
     <!-- controls optional, Playerliste unten anzeigen wobei parallel per Kontextmen auch Player-Buttons vergbar sind -->
     <!--           Playerleiste kann auch per Kontextmen ein- und ausgeblendet werden -->
     <!--       Control-Leiste ist die einzigste mglich Anzeigeform -->
     <!-- loop Wiederholung der Wiedergabe endlos -->
<SCRIPT>
 // +++++ Zeiger auf das AUDIO-Objekt holen 
 var HTML5Objekt=document.getElementById("test");

 // +++++ Audio-Datei als Source
 HTML5Objekt.src="demo.oga"; 	// src-Zuweisung startet kein play

 // +++++ zugewiesene Audio-Datei abspielen
 HTML5Objekt.play();
 
 // HTML5Objekt.stop(); 	// gibt es nicht

 // HTML5Objekt.src="";  	// das bewirkt stop
</SCRIPT>
</BODY>
</HTML>


4.	AUDIO-Tag <AUDIO> in HTML und  Javascript
-------------------------------------------------

Microsoft Internet Explorer untersttzt kein HTML-5-Media, hat aber das Objekt im DOM
teilweise als leere Hlle implmentiert. Microsoft lsst zu, dass ein AUDIO-Tag als
Objekt ohne Eigenschaften erzeugbar ist (schlichtweg Verarschung der Script-Programmierer). 
Wer also Scriptfehler vermweiden will, muss tun:

  // ----- Objekt erzeugen
  var HTML5Objekt=document.createElement("AUDIO"); // bzw. "VIDEO"
   // oder  +++++ Zeiger auf das AUDIO-Objekt holen 
   // var HTML5Objekt=document.getElementById("test");
   //    mit "test" als ID von AUDIO-Tag bzw. VIDEO-Tag
   //                      das eindeutig sein muss

  if((HTML5Objekt!=null);
  {
   // ----- Prfen ob Objekt komplett erzeugt wurde.
   //         Der Internet Explorer kann Objekt erzeugen aber nicht komplett.
   if(HTML5Objekt.src!=null)
   {if(HTML5Objekt.controls!=null)
    {if(HTML5Objekt.play!=null)
     {if(HTML5Objekt.pause!=null)
      {
	// ab hier steht fest, der Browser kennt HTML-5-Media formal
      }
     }
    }
   }
  }


4.1.	allgemeine HTML-Attribute
- - - - - - - - - - - - - - - - -

		accesskey
		class
		contenteditable
		contextmenu
		dir	
		draggable
		id
		item
		hidden
		lang
		itemprop
		spellcheck
		style
		subject
		tabindex
		title

4.2.	spezifische HTML-Attribute und/oder JavaScript-Schnitstelle
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Es ist blich, dass Javascript-Schnittstellen nicht fr alle HTML-Attribute verfgbar sind.
Es ist blich, dass nicht alle HTML-Attribute eine Javascript-Schnittstelle haben.
Es ist blich, dass Dinge aus Anwender- bzw. Programmierersicht bei der Implementierung
	eines HTML-Elementes vergessen wurden z.B. beim HTML-5-Media-Tag ein .stop().


media.xxx ist ein Platzhalter fr die Referenz auf das HTML-5-Objekt

		src oder media.src

			Url einer  media resource (video, audio)
                        berschreibt den Wert des source-tags im Video-Tag
				z.B.  <audio width ..... > 
                                         <source src="demo.ogv" type="video/ogv"> <!-- anstelle SRC-Attribut -->
                                         ... 
                              </audio >

 		autobuffer oder media.autopuffer
			boolean
			true so automatische Pufferung direkt beim Laden des HTML-Dokumentes, also
				nicht erst mit Aktivierung des Media durch User.

				Ogg-Dateien haben interne Bytes-Bereiche Seiten z.B. 4096 Bytes.
								Der Bereich ist die Puffergrsse.
			Solange nicht alle Daten gepuffert wurden, erscheint im Gleitregler der
				Position nicht der Knopf: Man kann also die Position nicht festlegen.
				Das macht auch Sinn, wenn man einen Internet-Stream gerade hrt, der
					kein Ende haben kann.
				Das Puffern besorgt der Browser.

		autoplay oder media.autoplay
			boolean 
			true  so automatischen Start der Wiedergabe
			false so User muss per Controls die Wiedergabe starten (oder per .play())


		controls oder media.controls
			boolean
			true so  Control-Leiste unten angezeigen
			wenn false so Controls nur per Kontextmen rechte Maus erreichbar:
					Dort kann man Control-Leiste auch aus- und einblenden.
					Achtung: per oncontextmenu-Event abschaltbar.
			wenn true so so Controls auch per Kontextmen rechte Maus auch erreichbar:
					Dort kann man control-Leiste auch aus- und einblenden
					Achtung: per oncontextmenu-Event abschaltbar.
     			Control-Leiste-Breite 	ist 300 Pixel fr Audio-Tag, das nichts anzeigt und ohne Dimension ist
						ist in Breite laut width fr Video-Tag (nicht des Videos selbst)

		loop oder media.loop
			boolean
			true so endlos Wiederholung aktiv


		media.currentSrc
			String der media resource, aber Leerkette wenn media.src unbelegt ist

		
		media.buffered
			true so Daten wurden gepuffert
			Solange nicht alle Daten gepuffert wurden, erscheint im Gleitregler der
				Position nicht der Knopf: Man kann also die Position nicht festlegen.
				Das macht auch Sinn, wenn man einen Internet-Stream gerade hrt, der
					kein Ende haben kann.
				Das Puffern besorgt der Browser.

		media.loadeddata		
			boolean
			true so bereits gengend Daten fr Wiedergabe verfgbar
			Solange nicht alle Daten gepuffert wurden, erscheint im Gleitregler der
				Position nicht der Knopf: Man kann also die Position nicht festlegen.
				Das macht auch Sinn, wenn man einen Internet-Stream gerade hrt, der
					kein Ende haben kann.
				Das Puffern besorgt der Browser.

		media.played
			boolean
			true so Wiedergabe aktiv
			Solange nicht alle Daten gepuffert wurden, erscheint im Gleitregler der
				Position nicht der Knopf: Man kann also die Position nicht festlegen.
				Das macht auch Sinn, wenn man einen Internet-Stream gerade hrt, der
					kein Ende haben kann.
				Das Puffern besorgt der Browser.
				
		media.paused
			boolean
			true so Wiedergabe pausiert

		media.ended
			boolean
			true so Wiedergabe ist beendet
			beachte: Loop verhindert das Ende der Wiedergabe

		media.defaultPlaybackRate [ = value ]
			Standard-Wiedergabe-Faktor: Beschleunigung der Wiedergabe
			value  lesen und schreiben
			Hinweis: User kann manuell per Gleitregler die Position verndern.
				 Man muss value nicht festlegen.

		media.playbackRate [ = value ]
			Wiedergabe-Faktor: Beschleunigung der Wiedergabe
			value  lesen und schreiben, Standard ist 1.0 float fr normale Geschwindigkeit
			Hinweis: User kann manuell per Gleitregler die Position verndern.
				 Man muss value nicht festlegen.

		media.play()
			Wiedergabe an aktueller Position im Sond starten.
			Es gibt kein .stop()
				Stop der Wiedergabe geht nur per media.src="";
				Warnung: Solle z.B. eine ogg-Datei als Internet-Stream aktiviert werden,
					  dann fliessen solange Daten, bis media.src auf "" gesetzt
					  wurde. Auch whrend Pausieren fliessen Daten, nur dass man
					  diese nicht hrt. Wer also keine Flat-Rate im
					  DSL-Internet-Zugang hat, MUSS unbedingt stoppen per
					  media.src beachten.
					 Das Fehlen der media.stop() ist eigentlich ein Designfehler
					  in HTML-5.
			Solange nicht alle Daten gepuffert wurden, erscheint im Gleitregler der
				Position nicht der Knopf: Man kann also die Position nicht festlegen.
				Das macht auch Sinn, wenn man einen Internet-Stream gerade hrt, der
					kein Ende haben kann.
				Das Puffern besorgt der Browser.

		media.pause()
			Wiedergabe an aktueller Position im Sond pausieren.
			Es gibt kein .stop()
				Stop der Wiedergabe geht nur per media.src="";
				Warnung: Solle z.B. eine ogg-Datei als Internet-Stream aktiviert werden,
					  dann fliessen solange Daten, bis media.src auf "" gesetzt
					  wurde. Auch whrend Pausieren fliessen Daten, nur dass man
					  diese nicht hrt. Wer also keine Flat-Rate im
					  DSL-Internet-Zugang hat, MUSS unbedingt stoppen per
					  media.src beachten.
					 Das Fehlen der media.stop() ist eigentlich ein Designfehler
					  in HTML-5.
			Solange nicht alle Daten gepuffert wurden, erscheint im Gleitregler der
				Position nicht der Knopf: Man kann also die Position nicht festlegen.
				Das macht auch Sinn, wenn man einen Internet-Stream gerade hrt, der
					kein Ende haben kann.
				Das Puffern besorgt der Browser.

		media.currentTime [ = value ]
			Position der Wiedergabe festlegen
			value	 lesen und schreiben
				 Wert in Sekunden als float-Wert z.B. 1.0
			Es gibt kein .stop()
				Stop der Wiedergabe geht nur per media.src="";
				Warnung: Solle z.B. eine ogg-Datei als Internet-Stream aktiviert werden,
					  dann fliessen solange Daten, bis media.src auf "" gesetzt
					  wurde. Auch whrend Pausieren fliessen Daten, nur dass man
					  diese nicht hrt. Wer also keine Flat-Rate im
					  DSL-Internet-Zugang hat, MUSS unbedingt stoppen per
					  media.src beachten.
					 Das Fehlen der media.stop() ist eigentlich ein Designfehler
					  in HTML-5.
			Solange nicht alle Daten gepuffert wurden, erscheint im Gleitregler der
				Position nicht der Knopf: Man kann also die Position nicht festlegen.
				Das macht auch Sinn, wenn man einen Internet-Stream gerade hrt, der
					kein Ende haben kann.
				Das Puffern besorgt der Browser.

		media.timeupdate
			boolean
			true so Position verndert worden z.B. weil User den Positions-Gleitregler verndert hat.
			Es gibt kein .stop()
				Stop der Wiedergabe geht nur per media.src="";
				Warnung: Solle z.B. eine ogg-Datei als Internet-Stream aktiviert werden,
					  dann fliessen solange Daten, bis media.src auf "" gesetzt
					  wurde. Auch whrend Pausieren fliessen Daten, nur dass man
					  diese nicht hrt. Wer also keine Flat-Rate im
					  DSL-Internet-Zugang hat, MUSS unbedingt stoppen per
					  media.src beachten.
					 Das Fehlen der media.stop() ist eigentlich ein Designfehler
					  in HTML-5.
			Solange nicht alle Daten gepuffert wurden, erscheint im Gleitregler der
				Position nicht der Knopf: Man kann also die Position nicht festlegen.
				Das macht auch Sinn, wenn man einen Internet-Stream gerade hrt, der
					kein Ende haben kann.
				Das Puffern besorgt der Browser.
		
		media.volume [ = value ]
			Lautstrke
			vale	lesen und schreiben
				0.0 bis 1.0 als float-Wert
					0.0 ist stumm
					1.0 ist maximal laut
				Es wird INDEX_SIZE_ERR ausgelst, wenn value ausserhalb des Wertebereiches
			Es gibt einen Gleitregler (senkrecht) zur Vernderung der Lautstrke.
			Achtung: Man prfe, ob die nderung der Laustrke auch die in der
					System-Laustrke (unter Windows im System-Lautstrke-Reglerbereich)
					verndert.

		media.muted [ = value ]
			Stummschalten ein bzw. aus
			value	boolean
				true so ein

		media.readyState
			Status der Phasen von HTML-5-Mediaobjekt (readystate ist im HTML-DOM weit verbreitet)
			Per readyState kann der Verlauf des Datenflusses nachverfolgt werden, wenn das notwendig sein sollte.
			Nachfolgen nur die englische Erklrung zu den Werten von .readyState, wobei Werte den aktuellen
				Status anzeigen. Der Wert ist entweder eine vordefinierter String oder numerisch.

		  HAVE_NOTHING 		(numeric value 0)
				No information regarding the media resource is available. 
				No data for the current playback position is available. 
				Media elements whose networkState attribute is NETWORK_EMPTY are always in the HAVE_NOTHING state.

  		  HAVE_METADATA 	(numeric value 1)
			Enough of the resource has been obtained that the duration of the resource is available. 
			In the case of a video element, the dimensions of the video are also available. 
			The API will no longer raise an exception when seeking. 
			No media data is available for the immediate current playback position.

		  HAVE_CURRENT_DATA 	(numeric value 2)
			Data for the immediate current playback position is available, but either not enough data is available 
				that the user agent could successfully advance the current playback position in the direction 
				of playback at all without immediately reverting to the HAVE_METADATA state, or there is 
				no more data to obtain in the direction of playback. 
			For example, in video this corresponds to the user agent having data from the current frame, 
				but not the next frame; and to when playback has ended.

		  HAVE_FUTURE_DATA 	(numeric value 3)
			Data for the immediate current playback position is available, as well as enough data for the user 
				agent to advance the current playback position in the direction of playback at least a little without 
				immediately reverting to the HAVE_METADATA state. 
			For example, in video this corresponds to the user agent having data for at least the current 
				frame and the next frame. 
			The user agent cannot be in this state if playback has ended, as the current playback position can never 
				advanced in this case.

		  HAVE_ENOUGH_DATA 	(numeric value 4)
			All the conditions described for the HAVE_FUTURE_DATA state are met, and, in addition, the user agent
				estimates that data is being fetched at a rate where the current playback position, if it were 
				to advance at the rate given by the defaultPlaybackRate attribute, would not overtake the 
				available data before playback reaches the end of the media resource.
			When the ready state of a media element whose networkState is not NETWORK_EMPTY changes, the user 
				agent must follow the steps given below:

					If the previous ready state was HAVE_NOTHING, and the new ready state is HAVE_METADATA
						Note: A loadedmetadata DOM event will be fired as part of the load() algorithm.

					If the previous ready state was HAVE_METADATA and the new ready state is HAVE_CURRENT_DATA or greater
						If this is the first time this occurs for this media element since the load() 
						algorithm was last invoked, the user agent must queue a task to fire a simple event 
						called loadeddata at the element.

					If the new ready state is HAVE_FUTURE_DATA or HAVE_ENOUGH_DATA, then the relevant 
						steps below must then be run also.

					If the previous ready state was HAVE_FUTURE_DATA or more, and the new ready 
						state is HAVE_CURRENT_DATA or less
						Note: A waiting DOM event can be fired, depending on the current state of playback.

					If the previous ready state was HAVE_CURRENT_DATA or less, and the new ready state is HAVE_FUTURE_DATA
						The user agent must queue a task to fire a simple event called canplay.

					If the element is potentially playing, the user agent must queue a task to fire a simple event called playing.

					If the new ready state is HAVE_ENOUGH_DATA
						If the previous ready state was HAVE_CURRENT_DATA or less, the user agent must queue a task 
						to fire a simple event called canplay, and, if the element is also potentially playing, 
						queue a task to fire a simple event called playing.

					If the autoplaying flag is true, and the paused attribute is true, and the media element has an 
						autoplay attribute specified, then the user agent may also set the paused attribute to false, 
						queue a task to fire a simple event called play, and queue a task to fire a simple event called playing.

					Note: User agents are not required to autoplay, and it is suggested that user agents honor user preferences on 
						the matter. Authors are urged to use the autoplay attribute rather than using script to force 
						the video to play, so as to allow the user to override the behavior if so desired.

					In any case, the user agent must finally queue a task to fire a simple event called canplaythrough.

					Note: It is possible for the ready state of a media element to jump between these states discontinuously. 
						For example, the state of a media element can jump straight from HAVE_METADATA to HAVE_ENOUGH_DATA 
						without passing through the HAVE_CURRENT_DATA and HAVE_FUTURE_DATA states.

