首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用netStream appendBytes播放flv

使用netStream appendBytes播放flv
EN

Stack Overflow用户
提问于 2013-05-16 20:01:43
回答 2查看 2.5K关注 0票数 1

我知道播放FLV文件的方法有很多种,但考虑到我的项目要求,我需要使用URLStream和NetStream播放flv

下面是我正在测试的完整示例代码:

代码语言:javascript
复制
package 
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.NetStatusEvent;
    import flash.events.ProgressEvent;
    import flash.utils.ByteArray;
    import flash.net.URLRequest;
    import flash.net.URLLoader;
    import flash.net.URLLoaderDataFormat;
    import flash.net.NetStreamAppendBytesAction;
    import flash.net.NetConnection;
    import flash.net.NetStream;
    import flash.media.Video;
    import flash.net.URLStream;

    /**
     * ...
     * @author Hadi Tavakoli
     */
    public class Main extends Sprite 
    {
        private var netConnection:NetConnection;
        private var netStream:NetStream;
        private var ul:URLStream;
        private var video:Video;
        private var bytes:ByteArray = new ByteArray();
        private var _isSeek:Boolean = false;

        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }

        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point

            video = new Video();
            addChild(video);

            netConnection = new NetConnection();
            netConnection.addEventListener(NetStatusEvent.NET_STATUS, netConnectionStatusHandler);
            netConnection.connect(null);
        }

        private function netConnectionStatusHandler(ev:NetStatusEvent):void
        {
            switch(ev.info.code)
            {
                case 'NetConnection.Connect.Success':

                    ul = new URLStream();
                    ul.addEventListener(ProgressEvent.PROGRESS, onProgress);
                    ul.load(new URLRequest('01.flv'));

                break;
            }
        }

        private function onProgress(e:ProgressEvent):void
        {
            ul.readBytes(bytes, bytes.length);

            if (!netStream) 
            {
                netStream = new NetStream(netConnection);
                netStream.client = { };
                video.attachNetStream(netStream);
                netStream.play(null);
                trace("BEGIN")
                netStream.appendBytesAction(NetStreamAppendBytesAction.RESET_BEGIN);
            }
            else
            {
                if (!_isSeek)
                {
                    trace("SEEK")
                netStream.appendBytesAction(NetStreamAppendBytesAction.RESET_SEEK);
                    _isSeek = true;
                }
            }

            if (bytes.length == e.bytesTotal)
            {
                trace("END")
            netStream.appendBytesAction(NetStreamAppendBytesAction.END_SEQUENCE);
            }

            netStream.appendBytes(bytes);
            trace("-")
        }
    }
}

我不确定我是否正确使用了"appendBytes“方法?视频会显示出来,但只会播放很少的第一帧,然后视频就会停止!

在我眼里,一切似乎都很好!对于我的问题在哪里,你有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2013-06-18 03:24:55

我认为您不需要if (!_isSeek)块。它看起来像是在按顺序接收字节时将它们推入,因此永远不会有查找。看起来它将推送第一组字节,然后附加一个查找操作,并附加其余的字节。试着移除那个块,看看它是否工作。

否则,我认为这是可以的。

票数 0
EN

Stack Overflow用户

发布于 2015-05-29 19:47:28

在"ul.readBytes(bytes,bytes.length);“行中,我猜有一个bug。它对我来说也从来没有起过作用。它总是返回完整的长度(从0到可用字节)。所以它有一个巨大内存泄漏。但如果您使用的是flash player 11.4或更高版本,则可以像这样进行更改。

代码语言:javascript
复制
ul.position = bytes.length;
ul.readBytes(bytes);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16586878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档