2009-08-13 20 views
4

私は何年もこのソリューションを探していましたが、結論としては何も書かれていません。そこにShoutcast Flash Playerがたくさんあるので(例えばradio.de)、それが可能であることを知っている。しかし、私の研究のほとんどは、これにつながる:Shoutcastラジオ放送をFlashでストリーミングする方法(Shoutcast Flash Player)

Firefoxではなく、IEで私の作品
s = new Sound(); 
s.loadSound ("url.of.shoutcaststream:8003",true); 

。私はコンポーネントを購入したくないので、コンポーネントがどのようにそれを行うのかを知りたいので、独自のカスタムプレーヤーを構築することができます。

+0

jPlayerはシャウトキャストをサポートしています。 http://stackoverflow.com/questions/8786563/jplayer-and-shoutcast-configuration – trvbr

答えて

1

ストリームの場合は、おそらくNetStreamNetConnectionクラスで再生されます。例:

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

このコードをFlash SWFに実装するための詳しい手順を教えてください。 – Jourdan

8

あなたはほぼあります。

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

末尾にスラッシュとセミコロンがあることに注意してください。 Shoutcastサーバー(DNAS)は、応答の返信先を検出する要求のユーザーエージェントを調べます。もしそれが仲間であれば、それはHTMLのページを提供する。ブラウザUAでない場合は、ストリームを送信します。 DNASがUAを無視し、常にストリームを送信する原因となっているセミコロン(ドキュメント化されていない理由による)があります。

AACストリームを再生するには満足な解決策はありませんが、Flashにはそのような機能が備わっていますが、何らかの理由でAACのAPIが全く異なり、AAC Shoutcastを再生できません。

ここのNetStreamソリューションでは解決策はありません。

は、より多くの情報のための私のブログを参照してください:wavestreaming.comから

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

3

Flashでストリーミングプレーヤーをやっ主な問題は、メモリ消費量です。

Flash Playerはストリームをメモリに記録し続け、すべてのコンピュータリソースが凍結して非常に怒ってしまうまで浪費します。 :)

// は、定期的にあなたが原因クロスドメインの問題に直接Flashでメタデータを読み取ることができません、のsetTimeoutかのsetIntervalでヌル音変数

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

面白い...これは再生にジャンプ/グリッチを追加しますか? – gyo

1

をsound.bytesLoadedをご確認ください。 Flash Playerがそのコンテンツを「コンテンツ」と見なすため、オーディオストリームを再生することはできますが、Flash Playerはそれをクロスドメインポリシーの対象となる「データ」とみなすため、メタデータを読み取ることができません。

あなたはShoutcastはサーバーにクロスドメインポリシーファイルを追加することができるが、これはほとんどのユーザーのために困難になります(あなたのShoutcastはサーバー上のWebサーバをインストールする必要があります)

ジョージ・ガーディナー http://www.commonmode.co.uk

関連する問題