Компонент FLVPlayback и Actionscript. Случайное воспроизведение FLV с массивами. - PullRequest
0 голосов
/ 16 августа 2011

Я подошел немного ближе к своему проекту, и мне все еще нужна помощь, пожалуйста.У меня есть 5 Flvs, которые я хочу воспроизвести в случайном порядке на этой странице www.music-puppets.com/

.fla файл, который я создал, содержит следующий код:

var files:Array = [ "Sz01Puppet.flv", "Sz02Puppet.flv", "Sz03Puppet.flv", "Sz04Puppet.flv", "Sz05Puppet.flv" ];
var shuffledFiles:Array = shuffleArray(files);
//quick test
var testTimer:Timer = new Timer(1000);
testTimer.addEventListener(TimerEvent.TIMER,updateFile);
testTimer.start();

function updateFile(event:TimerEvent):void{
if(shuffledFiles.length == 0) shuffledFiles = shuffleArray(files); //all files played, repeat process
trace('play file',shuffledFiles[0]);
shuffledFiles.shift();
}
function shuffleArray(source:Array,clone:Boolean = true):Array {
var output:Array = [];
var input:Array = clone ? [].concat(source) : source; //clone ? preserve orignal items by making a copy for shuffling, or not
while(input.length) output.push(input.splice(int(Math.random() * input.length-1),1) [0]);
return output;

}

Этот скрипт работает,На выходе каждый flv указан случайным образом, а затем повторяется.Далее я хочу, чтобы этот AS Script работал с компонентом FLV.

Но как мне заставить это работать?

В моей библиотеке есть 5 flvs и компонент flvplayback.Я перетащил компонент FLVPlayback на сцену, но я могу добавить только один flv в исходный код.Как мне заставить мой рабочий код действия работать с компонентом FLVPlayback.

Здесь вы можете увидеть, как выглядит мой экран.

capture01.jpg

capture02.jpg

Было бы здорово получить отзывы:)

Ответы [ 2 ]

0 голосов
/ 17 августа 2011

Если кому-то интересно. У меня есть рабочий код:)

import flash.events.Event;
import fl.video.*;

var files:Array;
var shuffledFiles:Array;

loaderInfo.addEventListener(Event.COMPLETE,ready);
function ready(event:Event):void{
    loaderInfo.removeEventListener(Event.COMPLETE,ready);
    //swf rescale setup
    stage.align = StageAlign.TOP_LEFT;
    stage.scaleMode = StageScaleMode.NO_SCALE;
    stage.addEventListener(Event.RESIZE,stageResized);
    //get FlashVars - a string converted into an Array by spliting it on the , character
    //if the files FlashVar is setup correctly use the data, else use default values
    if(loaderInfo.parameters.files != undefined) files = loaderInfo.parameters.files.indexOf(',') > 0 ? loaderInfo.parameters.files.split(",") : [loaderInfo.parameters.files];
    else files = [ "Sz01Puppet.flv", "Sz02Puppet.flv", "Sz03Puppet.flv", "Sz04Puppet.flv", "Sz05Puppet.flv" ];
    shuffledFiles = shuffleArray(files);
    //play the 1st video
    videoPlayer.source = shuffledFiles[0];
    shuffledFiles.shift();

    //see when the video finished playing
    videoPlayer.addEventListener(VideoEvent.COMPLETE,videoFinished);
}
function videoFinished(event:VideoEvent):void{
    if(shuffledFiles.length == 0) shuffledFiles = shuffleArray(files);//all files played, repeat process
    videoPlayer.source = shuffledFiles[0];//play the first video in the random list
    videoPlayer.play();
    trace('playing',shuffledFiles[0]);

    shuffledFiles.shift();//remove the first video from the random list (e.g. [2,0,1].shift() becomes [0,1])
}
function stageResized(event:Event):void{
    videoPlayer.width = stage.stageWidth;
    videoPlayer.height = stage.stageHeight;
}
function shuffleArray(source:Array,clone:Boolean = true):Array {
    var output:Array = [];
    var input:Array = clone ? [].concat(source) : source;//clone ? preserve orignal items by making a copy for shuffling, or not
    while(input.length) output.push(input.splice(int(Math.random() * input.length-1),1)[0]);
    return output;
}
0 голосов
/ 16 августа 2011

Прежде всего вам нужно дать вашему компоненту FLVPlayback имя экземпляра с помощью панели свойств. Это позволит вам поговорить с ним из кода.

Далее вам нужно будет добавить слушателя к компоненту FLVPlayback, чтобы определить, когда заканчивается каждое видео. Предположим, вы дали ему имя экземпляра myVideo:

myVideo.addEventListener(VideoEvent.COMPLETE,onVideoComplete);

Для этого вам понадобится функция-обработчик, которая будет выглядеть аналогично функции, которую вы используете в настоящее время для каждой итерации вашего таймера:

function onVideoComplete(event:VideoEvent):void {
    if(shuffledFiles.length == 0) shuffledFiles = shuffleArray(files); //all files played, repeat process
    myVideo.source = shuffledFiles.shift(); //grab the first array item to play in the FLVPlayback component
}

Наконец, убедитесь, что ваш компонент FLVPlayback настроен на автоматическое воспроизведение нового источника, а затем назначьте первое видео для начала работы:

myVideo.autoPlay = true;
myVideo.source = shuffledFiles.shift();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...