Actionscript 3 AAC/MP4不在ActionScript 3'中工作;s NetStream

Actionscript 3 AAC/MP4不在ActionScript 3'中工作;s NetStream,actionscript-3,flash-cs3,mp4,netstream,aac,Actionscript 3,Flash Cs3,Mp4,Netstream,Aac,我试图在Flash CS3的ActionScript 3中播放远程AAC文件,目前正在使用以下代码: var-url:String=“” var connect_nc:NetConnection=new NetConnection() connect\u nc.connect(空) var stream\u ns:NetStream=新NetStream(connect\u nc) 流媒体播放(url); (这是基于:) 不会抛出错误,但不会播放声音。我在本地AAC文件和本地MP4视频中得到

我试图在Flash CS3的ActionScript 3中播放远程AAC文件,目前正在使用以下代码:


var-url:String=“”
var connect_nc:NetConnection=new NetConnection()
connect\u nc.connect(空)
var stream\u ns:NetStream=新NetStream(connect\u nc)
流媒体播放(url);

(这是基于:)

不会抛出错误,但不会播放声音。我在本地AAC文件和本地MP4视频中得到了相同的行为

如果我使用的URL或文件路径不是可流化文件,则会出现NetStream.Play.StreamNotFound错误,我猜这意味着该流是在有效URL的情况下找到的。如果我使用本地FLV,它的音频播放得很好

如果我在netStatusHandler中添加以下侦听器和跟踪(evt.info.code),我只会看到用FLV跟踪的任何代码(例如NetStream.Play.Start)。AAC或MP4不跟踪任何代码。 stream_ns.addEventListener(NetStatusEvent.NET_状态,netStatusHandler)

添加此侦听器也是如此(即,仅使用FLV跟踪onMetaData参数,而不使用其他文件类型),metaDataListener被定义为具有跟踪其参数的onMetaData方法的对象。
stream_ns.client=metaDataListener

你知道这里可能出了什么问题,或者如何诊断吗

谢谢

如本文所述,您所做的是正确的

var connect_nc:NetConnection = new NetConnection();
connect_nc.connect(null);
var stream_ns:NetStream = new NetStream(connect_nc);
stream_ns.play("RE-Sample.m4a");
但是,有关nestream的Actionscript语言参考可在此处找到:

声明:

play()方法

在不使用Flash Media Server的情况下使用此方法时,需要考虑安全问题。本地trusted或local with networking沙箱中的文件可以从远程沙箱加载和播放视频文件,但如果没有以跨域策略文件的形式获得明确许可,则无法访问远程文件的数据。另外,通过设置对象的allowNetworking参数并在包含SWF内容的HTML页面中嵌入标记,可以防止在Flash Player中运行的SWF文件使用此方法

。。。

参数 ... arguments—要播放的视频文件的位置,如URL请求对象或字符串。在Flash Player和应用程序安全沙盒之外的空中内容中,您可以播放本地视频文件,这些文件存储在与SWF文件相同的目录或子目录中;但是,您无法导航到更高级别的目录


因此,这可能是一个安全沙箱问题。

Oliver所说的很有可能是真的,因为您没有从与NetStream关联的任何事件侦听器获得任何反馈,并且您得到的是StreamNotFound响应


未连接到FMS时,StreamNotFound表示由于安全问题,您的路径错误或无法看到它。

ActionScript 3.0中的所有内容都是基于事件的(在使用回调的情况下很少有随机例外)

您需要使用info.code“NetConnection.Connect.Success”侦听NetStatusEvent,以便允许调用NetStream.play()函数

以下是一些有效的方法(我现在刚刚编写了它,并为您进行了测试):

有关更多信息,请参阅ActionScript 3.0语言参考

package
{
    import flash.display.Sprite;

    import flash.net.NetConnection;
    import flash.net.NetStream;

    import flash.events.NetStatusEvent;
    import flash.events.AsyncErrorEvent;
    import flash.events.Event;

    public class MainDocument extends Sprite
    {
        private var _connection:NetConnection=new NetConnection();
        private var _netStream:NetStream=null;

        private var _strM4AURL:String="http://a1.phobos.apple.com/us/r1000/020/Music/d4/50/94/mzm.kjjofihr.aac.p.m4a";

        //constructor
        public function MainDocument():void
        {
            this._connect();
        }

        private function _connect():void
        {
            this._connection.close();
            this._connection=new NetConnection();
            this._connection.addEventListener(NetStatusEvent.NET_STATUS, this._netStatusHandler);
            this._connection.addEventListener(AsyncErrorEvent.ASYNC_ERROR, this._asyncErrorHandler);

            this._connection.connect(null);
        }

        private function _netStatusHandler(event:NetStatusEvent):void
        {
            trace(event.info.code);
            switch (event.info.code)
            {
                case "NetConnection.Connect.Success":
                    this._requestAudio();
                    break;
            }
        }

        private function _requestAudio():void
        {
            if(this._netStream!==null)
                this._netStream.close();

            this._netStream=new NetStream(this._connection);

            this._netStream.addEventListener(NetStatusEvent.NET_STATUS, this._netStatusHandler);
            this._netStream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, this._asyncErrorHandler);

            this._netStream.checkPolicyFile=false;

            this._netStream.play(this._strM4AURL);
        }

        private function _asyncErrorHandler(event:AsyncErrorEvent):void
        {
            trace(event);
        }
    }
}