Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Проигрывание рандомного видеоролика (http://www.flasher.ru/forum/showthread.php?t=215136)

ttt480 27.02.2018 05:18

Проигрывание рандомного видеоролика
 
Вложений: 1
Здравствуйте.
Пытаюсь объединить два кода в один - для проигрывания рандомного видеоролика.

Как заставить первый код - загружать видеофайл, по той ссылке, что вписана в файл 1.txt ?
То есть должно получиться что-то вроде строки myStream.play(new URLRequest("1.txt")); вместо строки myStream.play("video/1.mp4");

Первый код растягивает видеоролик под окно:
Код AS3:

import flash.media.SoundTransform;
 
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
 
function update(e:Event = null):void {
  myVideo.scaleX = myVideo.scaleY = 1;
  var scale:Number=Math.min(stage.stageWidth /myVideo.width,stage.stageHeight/myVideo.height);
  myVideo.scaleX = myVideo.scaleY = scale;
  myVideo.x = stage.stageWidth * 0.5 - myVideo.width * 0.5;
  myVideo.y = stage.stageHeight* 0.5 - myVideo.height * 0.5;
}
 
 
stage.addEventListener(Event.RESIZE, update);
 
 
var myVideo:Video = new Video();
  myVideo.height = 537.6;
  myVideo.width = 720.6;
  addChild(myVideo);
 
 
 
var netConnection:NetConnection = new NetConnection();
  netConnection.connect(null);
 
var myStream:NetStream = new NetStream(netConnection);
  myStream.play("video/1.mp4");
 
myStream.soundTransform = new SoundTransform(0);
 
 
myStream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, function (event:AsyncErrorEvent):void {});
myStream.addEventListener(NetStatusEvent.NET_STATUS, goAgain);
 
myVideo.attachNetStream(myStream);
 
function goAgain (event:NetStatusEvent): void
{
if(event.info.code == "NetStream.Play.Start")
          myStream.seek(20);
 
if(event.info.code == "NetStream.Play.Stop")
        myStream.seek(0);
}

Второй код открывает файл не по адресу файла в коде, а потому названию которое он берет из текстового файла 1.txt:
Код AS3:

import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;
 
var loader: Loader = new Loader();
var loader_2: URLLoader = new URLLoader();
 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
loader_2.addEventListener(Event.COMPLETE, onComplete_2);
addChild(loader);
loader_2.load(new URLRequest("1.txt"));
 
function onComplete_2(event: Event): void {
  loader_2.removeEventListener(Event.COMPLETE, onComplete_2);
  var textData: String = new String(loader_2.data);
  loader.load(new URLRequest(textData));
}
 
function onComplete(e: Event): void {
  e.target.removeEventListener(Event.COMPLETE, onComplete);
}


ZergMaster 27.02.2018 19:48

дык... а как именно вы пытаетесь?
типа загрузить сначала txt, как это сделано во втором примере, потом вызывать стрим по ссылке, как это сделано в первом. В итоге получить что-то вроде
Код AS3:

myStream.play(textData);

так пытались?

ttt480 27.02.2018 20:38

ZergMaster, я пытался их по-разному объединять. Брать куски из второго кода - и вставлять их в первый код.
Ничего не получалось.

Подскажите - куда в первом коде добавлять фрагмент myStream.play(textData); ?

У меня получился такой код:
Код AS3:

import flash.media.SoundTransform;
 
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
 
function update(e:Event = null):void {
        myVideo.scaleX = myVideo.scaleY = 1;
        var scale:Number=Math.min(stage.stageWidth /myVideo.width,stage.stageHeight/myVideo.height);
        myVideo.scaleX = myVideo.scaleY = scale;
        myVideo.x = stage.stageWidth * 0.5 - myVideo.width * 0.5;
        myVideo.y = stage.stageHeight* 0.5 - myVideo.height * 0.5;
}
 
 
stage.addEventListener(Event.RESIZE, update);
 
 
var myVideo:Video = new Video();
        myVideo.height = 537.6;
        myVideo.width = 720.6;
        addChild(myVideo);
 
 
 
var netConnection:NetConnection = new NetConnection();
        netConnection.connect(null);
 
 
 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
loader_2.addEventListener(Event.COMPLETE, onComplete_2);
addChild(loader);
loader_2.load(new URLRequest("1.txt"));
 
function onComplete_2(event: Event): void {
  loader_2.removeEventListener(Event.COMPLETE, onComplete_2);
  var textData: String = new String(loader_2.data);
  loader.load(new URLRequest(textData));
}
 
 
 
var myStream:NetStream = new NetStream(netConnection);
        myStream.play("textData");
 
 
myStream.soundTransform = new SoundTransform(0);
 
 
myStream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, function (event:AsyncErrorEvent):void {});
myStream.addEventListener(NetStatusEvent.NET_STATUS, goAgain);
 
myVideo.attachNetStream(myStream);
 
function goAgain (event:NetStatusEvent): void
{
if(event.info.code == "NetStream.Play.Start")
                myStream.seek(20);
 
if(event.info.code == "NetStream.Play.Stop")
                        myStream.seek(0);
}


caseyryan 27.02.2018 20:59

Если текстовый файл содержит адреса потоков, примерно так:
То есть ссылки разделены переносом строки
загрузить их в массив можно примерно так
Код AS3:

var links:Array = null;
var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, function(e:Event):void {
    var textData:String = e.target.data;
    links = []; // не разбиваю текст сразу в этот массив, а создаю новый, так как после разбиения одна ячейка не будет содержать ссылку
    var splitArray:Array = textData.split(/\s+/); // разбиваем по любому вайтспейсу, так как в винде переносом может быть \r\n, а в других системах просто \n
    for each (var link:String in splitArray) {
        if (link.length) links.push(link); // помещаем найденную ссылку в массив
    }
    // если массив не пустой, стартуем видео
      if (links.length) startVideo();
});
urlLoader.load(new URLRequest("1.txt"));
 
 
function startVideo():void {
      var randomLink:String = links[int(links.length * Math.random())]; // получаем случайную ссылку
      ... тут стартуем видео коток, передав в play() нашу randomLink
}

ПРОФИТ

п.с. Код писал прямо здесь, так что могут быть какие-то опечатки

ttt480 27.02.2018 21:59

caseyryan, текстовый файл - содержит не адреса потоков, а один-единственный адрес видеоролика C:\1\1.mp4

Как заставить скрипт - считывать этот один конкретный адрес из документа 1.txt ?

caseyryan 28.02.2018 19:44

Этот код будет работать и для одного видеоролика.

ttt480 28.02.2018 20:23

caseyryan, куда именно этот фрагмент добавить в первый код ?

Добавлено через 7 часов 46 минут
caseyryan, подскажите - куда именно в первом коде добавлять этот фрагмент ?

ZergMaster 01.03.2018 11:47

у вас здесь ошибочка
Цитата:

Код AS3:

var myStream:NetStream = new NetStream(netConnection);
        myStream.play("textData");


вы делаете .play строки "textData", а нужно делать плей переменной textData, в которую мы до этого загрузили адрес. То есть без кавычек вставлять
Код AS3:

var myStream:NetStream = new NetStream(netConnection);
        myStream.play(textData);

возможно, в этом дело, что у вас не работает?

Добавлено через 1 минуту
p.s. кстати, когда что-то не получается, полезно привести ошибку, которую выдает компилятор при попытке запустить/воспроизвести код

Добавлено через 3 минуты
если не получится, сделайте перед вызовом play trace и скажите, что вылазит
Код AS3:

trace('textData = '+textData);
myStream.play(textData);


ttt480 01.03.2018 13:48

Вложений: 1
ZergMaster, убрал кавычки.
Все равно не работает.

Показывает вот такие ошибки:

ZergMaster 01.03.2018 13:58

вот видите, он вам все пишет. Читайте внимательно, если что - гуглите ошибки. Хотя для этого лучше не русифицированный Animate
нет свойства loader_2 и loader. А нужно, чтоб были. Вы забыли их определить
Код AS3:

var loader: Loader = new Loader();
var loader_2: URLLoader = new URLLoader()

тоже касается и textData. Программа видит её только внутри той функции, где она определена. Вам нужно определить её вне функции.


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

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