Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   В одной флешке в двух окнах один и тот же flv-ролик (http://www.flasher.ru/forum/showthread.php?t=109299)

debacle 11.03.2008 23:24

В одной флешке в двух окнах один и тот же flv-ролик
 
У меня есть один flv-файл. Есть флешка на AS3, внутри которой созданы 2 объекта, которые через NetStream скачивают и проигрывают этот flv-ролик. То есть 2 NetStream'а обращаются к одному и тому же ролику.
Нужно чтобы на экране в одной флешке играло в двух окнах один и тот же ролик!!!

Фишка в том, что кэш почему-то не работает... и ролик одновременно в двух потоках не грузится... то есть второй поток начинает его грузить С НУЛЯ после того, как его скачает первый поток...
Подскажите, пожалуйста, как можно справиться с такой проблемой?

Mr. Fixit 11.03.2008 23:43

было бы прикольно если бы можно было отрисовывать видео в мувике.
А возможно ли это?

wvxvw 12.03.2008 02:08

У меня работает нормально =/ только не нужно 2 стрима. 1 и аттачить его к разным видео.

debacle 12.03.2008 09:09

Цитата:

У меня работает нормально =/ только не нужно 2 стрима. 1 и аттачить его к разным видео.
Как работает? Делаю, например, вот так вот:

Код:

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 videoURL:String = "1.flv";
        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: " + videoURL);
                    break;
            }
        }

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

        private function connectStream():void {
            var stream:NetStream = new NetStream(connection);
            stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
            stream.client = new CustomClient();
            var video1:Video = new Video();
            video1.attachNetStream(stream);
            var video2:Video = new Video();
            video2.attachNetStream(stream);
            stream.play(videoURL);
            addChild(video1);
            addChild(video2);

            video2.x = 200;
            video2.y = 200;
        }
    }
}

class CustomClient {
    public function onMetaData(info:Object):void {
    }
    public function onCuePoint(info:Object):void {
    }
}

Ну то есть, 1 стрим, аттачу его к двум видео. На экране отображается только то видео, которое было приаттачено последним (ну то есть video2). Первое не отображается!!!

terbooter 12.03.2008 12:10

У меня тоже показывает только последнее. В чем причина?
(на ас2 один стрим можно было аттачить к нескольким видео)

Пробовал ФЛВшки со звуком и без

wvxvw 12.03.2008 12:18

Код:

/**
* ...
* @author wvxvw
* @version 0.1
*/

package controller.ut {

        import flash.events.Event;
        import flash.events.NetStatusEvent;
        import flash.events.AsyncErrorEvent;
        import flash.events.EventDispatcher;
        import flash.net.NetConnection;
    import flash.net.NetStream;
       
        import controller.evt.EventList;
        import controller.evt.NCCevt;
       
        public class ULvideoconnector extends EventDispatcher {
               
                private var nc:NetConnection;
                private var url:String = '';
                private var ns:NetStream;
               
                public function ULvideoconnector() {
                        url = '';
                }
               
                public function connect(s:String) {
                        url = s;
                        nc = new NetConnection();
                        nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
                        nc.connect(null); //url
                }
               
                private function netStatusHandler(evt:NetStatusEvent):void {
                        if (evt.info.code == "NetConnection.Connect.Success") {
              ns = new NetStream(nc);
                          ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
                          ns.addEventListener(NetStatusEvent.NET_STATUS, msStatusHandler);
                          dispatchEvent(new NCCevt(EventList.VIDEO_READY, ns, url));
                          ns.play(url);
                        }
                }
                private function asyncErrorHandler(evt:AsyncErrorEvent):void { };
               
                private function msStatusHandler(evt:NetStatusEvent):void {
                        trace(evt.info.code);
                }
               
        }
       
}

import controller.evt.EventList; - Тут просто перечислены названия ивентов.
import controller.evt.NCCevt; - Это ивент содержащий ссылку на стрим, его получают сразу несколько инстансов видео.
Все вроде играет...

terbooter 12.03.2008 12:47

Интереснее знать почему приведенный пример не работает

debacle 12.03.2008 14:25

Цитата:

Все вроде играет...
хм... странно... у меня опять же играет то видео, которое приаттачено последним...
Я сделал так:
Код:

public class Main extends MovieClip
{
        public function Main()
        {
                var c : ULvideoconnector = new ULvideoconnector();
                c.addEventListener(NCCevt.VIDEO_READY, videoReadyHandler);
                c.connect("1.flv");
        }
       
        private function videoReadyHandler(event : NCCevt) : void
        {
                var video1:Video = new Video();
                var video2:Video = new Video();
                video1.attachNetStream(event.netStream);
                video2.attachNetStream(event.netStream);
                addChild(video1);
                addChild(video2);
                video1.x = 100;
                video1.y = 100;
                video2.x = 200;
                video2.y = 200;
        }
}

Может я что-то делаю не так??

wvxvw 12.03.2008 18:54

Ну, ей богу... я не знаю =( У меня чуть по-сложнее структура, но принцип точно такой же...
Может нельзя 2 объекта видео в одном родителе с одинаковыми стримами? Бред конечно... но никаких предположений больше нет... Проeкт дома, сейчас не получится потестить. Самое смешное, я даж не думал, что в этом есть проблема, как написал, так и работало %)


Часовой пояс GMT +4, время: 10:00.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.