【问题标题】:How to stream a shoutcast radio broadcast in Flash (Shoutcast Flash Player)如何在 Flash (Shoutcast Flash Player) 中流式传输广播电台广播
【发布时间】:2009-08-13 17:29:57
【问题描述】:

多年来,我一直在寻找解决方案,但没有任何最终记录。那里有许多 Shoutcast Flash 播放器(例如 radio.de),所以我知道这是可能的。然而,我的大部分研究都导致了这一点:

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

这对我在 FireFox 中有效,但在 IE 中无效。我不想购买组件,我想知道这些组件是如何做到的,以便我可以构建自己的自定义播放器。

【问题讨论】:

标签: streaming flash shoutcast


【解决方案1】:

你快到了。完整的口头禅是:

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

注意尾部的斜杠和分号。 Shoutcast 服务器 (DNAS) 查看请求的用户代理,以检测在响应中发回的内容。如果它是一个浏览器,那么它提供一个 HTML 页面。如果它不是浏览器 UA,它会发送流。尾随分号(出于某种未记录的原因)导致 DNAS 忽略 UA 并始终发送流。

播放 AAC 流没有令人满意的解决方案,虽然 Flash 有这样做的设备,但出于某种原因,AAC 的 API 完全不同,无法播放 AAC Shoutcast。

这里的 NetStream 解决方案不太可能提供解决方案。

查看我的博客了解更多信息:

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

【讨论】:

    【解决方案2】:

    在 Flash 中制作 Stream-Player 的主要问题是内存消耗。

    Flash Player 一直在内存中记录流,浪费了所有的计算机资源,直到它冻结,使用户非常生气。 :)

    // 使用 setTimeout 或 setInterval 定期检查 sound.bytesLoaded,将声音变量设为空

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

    【讨论】:

    • 有趣...这是否会在复制过程中添加任何跳跃/故障?
    【解决方案3】:

    如果是流,它可能通过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);
        }
    }
    

    【讨论】:

    • 您能否提供有关此代码的进一步说明以将其实现到 Flash SWF 中?
    【解决方案4】:

    由于跨域问题,您将无法直接在 Flash 中读取元数据。您可以播放音频流,因为 Flash 播放器将其视为“内容”,但您将无法读取元数据,因为 Flash 播放器将其视为受跨域策略约束的“数据”。

    您可以将跨域策略文件添加到 ShoutCast 服务器,但这对大多数用户来说会很困难(您需要在 ShoutCast 服务器上安装网络服务器)

    乔治·加德纳 http://www.commonmode.co.uk

    【讨论】:

      【解决方案5】:

      查看 wavestreaming.com 的播放器,它真的很容易使用。

      http://www.wavestreaming.com/servers/flash-streaming/shoutcast-player.php

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-07-19
        • 1970-01-01
        • 2019-02-15
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        • 2012-12-22
        相关资源
        最近更新 更多