Неделя Flash Lite 3 - Flash Lite приложение, которое загружает видео с YouTube.
Для flash-разработчиков не является секретом процесс загрузки FLV в Flash Player.
В этом уроке мы рассмотрим приложение, которое загружает FLV видео с сервиса YouTube используя Flash Lite 3.
Одна из проблем, для многих - это “псевдо-защита” от загрузки FLV файлов с YouTube. Но это не проблема. Небольшой грамматический разбор и FLV-видео у вас “в кармане”.
Автор: Rosario Conti (Оригинал статьи)
Вольный перевод: SHAGGYSMILE
Что для этого нужно:
• Flash CS 3 Professional.
• Flash Lite 3 player.
• Сервер с поддержкой PHP.
• Исходники к статье.
• И нужно быть знакомым с ActionScript 2 и PHP.
Создаем приложение
Приступим. Для начала нам необходимо создать FLA-файл и несколько слоев:
1. Откройте Flash CS 3 Professional, создайте новый файл и назовите его Youtubev2.fla
2. Создайте пять слоев: over, text, buttons, actionscript, и BG.
Кадр первый: Создание интерфейса
1. Создайте кнопку и назовите ее avanti.
2. Далее, дадим нашему плееру имя. Создаем текстовый поле и пишем YouTubePlayer.

3. В слое actionscript вставьте следующих код. Не забудьте поменять ссылки http://yourserver.com/leggi.php и http://yourserver.com/get.php на адрес вашего сервера.
stop();
var TIMER = 0;
var searchedW:String = "adobe";
var scelto = "";
var nc:NetConnection = new NetConnection();
nc.connect((null));
var ns:NetStream = new NetStream(nc);
//Forward Button
avanti.onRelease = function() {
createArea();// To create the video list area
nextFrame();
};
function createArea() {
//---Font Format
var my_fmt:TextFormat = new TextFormat();
my_fmt.bold = false;
my_fmt.font = "Arial";
my_fmt.size = 8;
my_fmt.color = 0xFFFFFF;
for (i=0; i<14; i++) {
createEmptyMovieClip("but"+i,_root.getNextHighestDepth());
eval("but"+i).beginFill(0xFF0000,80);
eval("but"+i).moveTo(0,0);
eval("but"+i).lineTo(100,0);
eval("but"+i).lineTo(100,10);
eval("but"+i).lineTo(0,10);
eval("but"+i).lineTo(0,0);
eval("but"+i).endFill();
eval("but"+i)._x = 2;
eval("but"+i)._y = (i*11);
eval("but"+i).createTextField("label",this.getNextHighestDepth(),0,-2,100,12);
eval("but"+i).label.setNewTextFormat(my_fmt);
eval("but"+i).onRelease = function() {
scelto = files[this._name.substr(3, 1)];
getN.load("http://yourserver.com/get.php?v="+scelto);
searchedW = cercastr.text;
};
eval("but"+i).label.text = filetime[i]+" - "+filedesc[i];
}
}
files = new Array();
filedesc = new Array();
filetime = new Array();
lv = new LoadVars();
lv.contentType = "text/plain";
lv.onLoad = function() {
fl = this.filelist;
files = fl.split(",");
c = files.length-1;
fl = this.filedesc;
filedesc = fl.split(",");
fl = this.filetime;
filetime = fl.split(",");
c = 14;
for (i=0; iundefined) {
eval(”but”+i).label.text = filetime[i]+” - “+filedesc[i];
} else {
eval(”but”+i).label.text = “”;
}
}
};
lv.load(”http://yourserver.com/leggi.php?cerca=”+cercastr.text);
Примечание переводчика: А я б заменил код eval("but" + i) на this["but" + i]. Не люблю eval :)
Кадр второй: Добавляем свой фон и возможность поиска
1. Здесь (во втором кадре) вы можете добавить любой фон, на ваш вкус.
2. Также добавьте кнопку cerca и текстовое input-поле, которое будет выступать в качестве поискового.

3. Собственно код в слое actionscript:
stop();
var c:Number=0;
cercastr.text= searchedW;
linkaggio = new Array();
getN = new LoadVars();
getN.contentType = "text/plain";
getN.onLoad = function(success) {
fl = this.t;
linkaggio = fl.split(",");
hideM();
TIMER = setInterval(updateOutput, 10);
nextFrame();
};
function updateOutput()
{
tempobuf.text = ns.bufferTime;
riman.text = ns.bufferLength;;
}
function hideM()
{
for (g=0; g < 14; g++) {
eval("but" + g)._visible= false;
}
}
cerca.onRelease = function() {
_root.lv.load("http://yourserver.com/leggi.php?cerca=" + cercastr.text);
}
Кадр третий: Добавляем объект Video
1. Добавляем объект Video на сцену и называем его video1.
2. Добавляем кнопку, называем indietro и два текстовых поля tempobuf и riman, где tempobuf показывает время буферизации, а riman статус буферизации.
3. Также добавляем кнопку indietro, при нажатии на которую, будут выводится результаты поиска.

4. Код в четвертом кадре, слоя actionscript:
var af:String= "http://www.YouTube.com/get_video?video_id=" + scelto +"&t=" + linkaggio[0];
video1.attachVideo(ns);
ns.setBufferTime(20);
ns.play(af,-2,0);
ns.onStatus = function(iObj:Object) {
//ns.setBufferTime(5);
trace(iObj.code);
switch (iObj.code) {
case "NetStream.Buffer.Full":
ns.setBufferTime(5);
tempobuf.text=2;
break;
case "NetStream.Buffer.Empty":
ns.setBufferTime(20);
tempobuf.text=5;
break;
case "NetStream.Play.StreamNotFound":
ns.close();
clearInterval(TIMER);
showM()
prevFrame();
break;
}
}
indietro.onRelease = function() {
clearInterval(TIMER);
ns.close();
showM()
prevFrame();
}
function showM() {
for (g=0; g < 14; g++) {
eval("but" + g)._visible= true;
}
}
“Grabbing” YouTube ID
Займемся серверной частью. У нас есть два php-файла - get.php и leggi.php (эти файлы вы найдете в исходнике)
leggi.php - использует для чтения и парсит vID, описание и время, т.е. те параметры, которые отображаются в результатах поиска, сгенерируемые YouTube. Как только вы выбираете видео, vID передается файлу get.php, кторый вернет параметр tID с точным путем на FLV-файл.
Как это работает смотрите в исходниках. В конечном итоге наше приложение будет выглядеть так:

Последний этап - это тестирование и симулирование нашего приложения на мобильном устройстве, но об этом мы уже писали.


