PDA

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


ttt480
27.02.2018, 05:18
Здравствуйте.
Пытаюсь объединить два кода в один - для проигрывания рандомного видеоролика.

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

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

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:

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, как это сделано во втором примере, потом вызывать стрим по ссылке, как это сделано в первом. В итоге получить что-то вроде
myStream.play(textData);
так пытались?

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

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

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

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
Если текстовый файл содержит адреса потоков, примерно так:

http://somestream.com/somevideo
http://somestream.com/somevideo2
http://somestream.com/somevideo3

То есть ссылки разделены переносом строки
загрузить их в массив можно примерно так
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
у вас здесь ошибочка
var myStream:NetStream = new NetStream(netConnection);
myStream.play("textData");
вы делаете .play строки "textData", а нужно делать плей переменной textData, в которую мы до этого загрузили адрес. То есть без кавычек вставлять
var myStream:NetStream = new NetStream(netConnection);
myStream.play(textData);
возможно, в этом дело, что у вас не работает?

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

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

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

ttt480
01.03.2018, 13:48
ZergMaster, убрал кавычки.
Все равно не работает.

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

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

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

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

ttt480
01.03.2018, 14:47
ZergMaster, куда добавить этот фрагмент кода - в первый код ?

ZackMercury
01.03.2018, 15:10
ttt480, сюда http://www.flasher.ru/forum/forumdisplay.php?f=75.

undefined
01.03.2018, 17:31
на форуме уже штук 5 тем с моим кодом пропорциального растягивания displayObject'а.ТС никак не возьмет в толк, что нельзя писать код, не понимая как он работает.