使用actionscript 3同步播放数组中的视频

时间:2014-07-08 06:24:44

标签: arrays actionscript-3 video flash-builder

我正在使用Actionscript 3.0开发AIR应用程序。该应用程序在两个独立的监视器上加载两个本机窗监视器1将播放视频,监视器2将同步播放同一视频的叠加版本(即红外)。目前,我很想知道加载视频的最佳方式。我正在考虑使用数组,但我想知道,如果我这样做,我如何链接数组以便将主要场景链接到其次要叠加视频。

到目前为止,这是我的代码。它的第一部分创建了2个原生全屏幕窗口,然后您将看到我开始在底部编码阵列的位置:

package
{

import flash.display.NativeWindow;
import flash.display.NativeWindowInitOptions;
import flash.display.NativeWindowSystemChrome;
import flash.display.Screen;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageDisplayState;
import flash.display.StageScaleMode;


public class InTheAirNet_MultiviewPlayer extends Sprite {

    public var secondWindow:NativeWindow;

    public function InTheAirNet_MultiviewPlayer() {

        // Ouput screen sizes and positions (for debugging)
        for each (var s:Screen in Screen.screens) trace(s.bounds);                

        // Make primary (default) window's stage go fullscreen
        stage.align = StageAlign.TOP_LEFT;
        stage.scaleMode = StageScaleMode.NO_SCALE;
        stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
        stage.color = 0xC02A2A; // red

        // Create fullscreen window on second monitor (check if available first)
        if (Screen.screens[1]) {

            // Second window
            var nwio:NativeWindowInitOptions = new NativeWindowInitOptions();
            nwio.systemChrome = NativeWindowSystemChrome.NONE;
            secondWindow = new NativeWindow(nwio);
            secondWindow.bounds = (Screen.screens[1] as Screen).bounds;
            secondWindow.activate();

            // Second window's stage
            secondWindow.stage.align = StageAlign.TOP_LEFT;
            secondWindow.stage.scaleMode = StageScaleMode.NO_SCALE;
            secondWindow.stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
            secondWindow.stage.color = 0x387D19; // green   
        }

    //Create array of PRIMARY scenes
        var primary:Array = ["scene1.f4v", "scene2.f4v"];

    //Create array of SECONDARY scenes for scene1
        var secondary1:Array = ["scene1A.f4v", "scene1B.f4v"];

    //Create array of SECONDARY scenes for scene2
        var secondary2:Array = ["scene2A.f4v", "scene2B.f4v"];

    }

    }

}

编辑:用户将使用键盘上的LEFT和RIGHT循环切换叠加层,并使用向上和向下循环播放场景。

2 个答案:

答案 0 :(得分:2)

为每个视频使用通用Object,将每个视频存储在一个数组中,然后将辅助视频存储在每个对象中的数组中:

var videos:Array = [
    {
         primary:'video1.mp4',
         secondary:[
             'overlay101.mp4',
             'overlay102.mp4'
         ]
    },
    {
         primary:'video2.mp4',
         secondary:[
             'overlay201.mp4',
             'overlay202.mp4'
         ]
    }
    {
         primary:'video3.mp4',
         secondary:[
             'overlay301.mp4',
             'overlay302.mp4'
         ]
    }
]

然后,当您播放视频时,您可以遍历videos数组。每个对象都有一个主视频及其关联的辅助视频。您可以更进一步,并使用该对象存储元数据或在Object数组中存储更多secondary,而不是字符串。

编辑:对第一条评论的快速回复

在面向对象编程(OOP)语言中,一切都是对象。每个单独的类,每个单独的函数,每个循环,每个变量都是一个对象。类通常扩展基类,在AS3中称为Object

Object是最基本,最基本的可用对象类型 - 它只是名称:值对的列表,有时也称为字典。所以你可以做到以下几点:

var obj:Object = {hello:'world'};
trace(obj.hello); // output 'world'
trace(obj['hello']); // output 'world'
trace(obj.hasOwnProperty('hello')); //output true (obj has a property named 'hello')

我所做的是为每个视频创建其中一个对象,然后将它们保存到数组中。所以说你想追踪primary并找出secondary中有多少视频,你会这样做:

for (var i:int = 0; i < videos.length; i++) {
    var obj:Object = videos[i];
    trace('Primary: ' + obj.primary); // for video 1, output 'video1.mp4'
    trace('Secondary Length: ' + obj.secondary.length); // for video1, output 2
}

这应该会告诉你如何访问这些值。字典/ Object是关联数据的正确方法,我提供的结构非常简单,但正是您需要的。

我们所讨论的是OOP编程的最基本的基础知识(AS3是什么)和使用点语法,用于许多语言(从AS3到JS到Java到C ++到Python)的所有方式访问存储在其他对象中的对象。在向前推进之前,你真的需要阅读OOP的基础知识。你似乎错过了基础知识,这是编写任何应用程序的关键。

答案 1 :(得分:0)

我无法完全理解您尝试做的事情,但您是否考虑过尝试for each循环?它看起来像......

prim1();

function prim1():void
{
    for each (var vid:Video in primary)
    {
        //code to play the primary video here
    }
    for each (var vid:Video in secondary1)
    {
        //code to play the secondary video here
    }
}

很抱歉,如果它不是您想要的,但我从问题中理解的是,您尝试同时播放主要和次要视频,以便他们进入同步。祝你的节目好运^^