2009-08-13 9 views
4

Ich habe seit Jahren nach einer Lösung gesucht, aber nichts ist schlüssig dokumentiert. Es gibt viele Shoutcast Flash Player (z. B. radio.de), also weiß ich, dass es möglich ist. Die meisten meiner Forschungsergebnisse führen jedoch dazu:So streamen Sie eine Shoutcast Radiosendung in Flash (Shoutcast Flash Player)

s = new Sound(); 
s.loadSound ("url.of.shoutcaststream:8003",true); 

Welche funktioniert für mich in FireFox, aber nicht in IE. Ich möchte keine Komponente kaufen, ich möchte wissen, wie diese Komponenten es tun, damit ich meinen eigenen benutzerdefinierten Player erstellen kann.

+0

JPlayer unterstützt: http://stackoverflow.com/questions/8786563/jplayer-and-shoutcast-configuration – trvbr

Antwort

1

Wenn es ein Stream ist, wird es wahrscheinlich durch die Klassen NetStream und NetConnection gespielt. Zum Beispiel:

package { 
    import flash.display.Sprite; 
    import flash.events.NetStatusEvent; 
    import flash.events.SecurityErrorEvent; 
    import flash.media.Video; 
    import flash.net.NetConnection; 
    import flash.net.NetStream; 
    import flash.events.Event; 

    public class NetConnectionExample extends Sprite { 
     private var streamURL:String = "url.of.shoutcaststream:8003"; 
     private var connection:NetConnection; 
     private var stream:NetStream; 

     public function NetConnectionExample() { 
      connection = new NetConnection(); 
      connection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); 
      connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); 
      connection.connect(null); 
     } 

     private function netStatusHandler(event:NetStatusEvent):void { 
      switch (event.info.code) { 
       case "NetConnection.Connect.Success": 
        connectStream(); 
        break; 
       case "NetStream.Play.StreamNotFound": 
        trace("Stream not found: " + streamURL); 
        break; 
      } 
     } 

     private function securityErrorHandler(event:SecurityErrorEvent):void { 
      trace("securityErrorHandler: " + event); 
     } 

     private function connectStream():void { 
      stream = new NetStream(connection); 
      stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); 
      stream.client = new CustomClient(); 
      stream.play(streamURL); 
     } 
    } 
} 

class CustomClient { 
    public function onMetaData(info:Object):void { 
     trace("metadata: duration=" + info.duration + " width=" + info.width + " height=" + info.height + " framerate=" + info.framerate); 
    } 
    public function onCuePoint(info:Object):void { 
     trace("cuepoint: time=" + info.time + " name=" + info.name + " type=" + info.type); 
    } 
} 
+0

Können Sie weitere Anweisungen zu diesem Code bereitstellen, um es in eine Flash SWF zu implementieren? – Jourdan

8

Sie sind fast da. Das vollständige Mantra lautet:

s = new Sound(); 
s.loadSound ("http://url.of.shoutcaststream:8003/;",true); 

Beachten Sie den abschließenden Schrägstrich und Semikolon. Shoutcast-Server (DNAS) betrachten den Benutzer einer Anfrage, um zu erkennen, was in der Antwort zurückgesendet werden soll. Wenn es ein Browser ist, dann dient es einer HTML-Seite. Wenn es kein Browser UA ist, sendet es den Stream. Trailing Semikolon (aus irgendeinem Grund nicht dokumentiert) bewirkt, dass DNAS den UA ignoriert und immer einen Stream sendet.

Es gibt keine zufriedenstellende Lösung zum Abspielen von AAC-Streams, obwohl Flash die entsprechende Ausrüstung hat, aus irgendeinem Grund ist die API für AAC völlig anders und kann nicht AAC Shoutcast abspielen.

Die NetStream-Lösung wird hier wahrscheinlich keine Lösung bieten.

Sehen Sie mein Blog für weitere Informationen:

http://www.flexiblefactory.co.uk/flexible/?p=51

3

Das Hauptproblem eines Stream-Spieler in Flash ist der Verbrauch Speicher zu tun.

Der Flash Player zeichnet den Stream im Speicher auf und vergeudet alle Computerressourcen bis zum Einfrieren, was die Benutzer sehr verärgert macht. :)

// regelmäßig sound.bytesLoaded überprüfen mit setTimeout oder setInterval, null der Sound variable

MEM_MAX = 10 * 1024 * 1024 
if(sound.bytesLoaded > MEM_MAX) 
    { reloadSound(); flash.system.System.gc(); } 
+0

Interessant ... fügt das der Wiedergabe irgendwelche Sprünge/Störungen hinzu? – gyo

1

Sie werden nicht in der Lage sein, Metadaten in Flash lesen direkt Probleme aufgrund domänenübergreif. Sie können den Audio-Stream wiedergeben, da Flash Player dies als "Inhalt" ansieht. Sie können die Metadaten jedoch nicht lesen, da Flash Player dies als "Daten" betrachtet, die einer Cross-Domain-Richtlinie unterliegen.

Sie könnten eine domänenübergreifende Richtliniendatei auf dem Shoutcast-Server hinzufügen, aber dies wird für die meisten Benutzer schwierig sein (Sie benötigen einen Webserver auf Ihrem Shoutcast-Server installieren) Shoutcast

George Gardiner http://www.commonmode.co.uk