TubeLoc: библиотека YouTube Player AS3

Эта статья была написана и отправлена ​​внешним разработчиком. Команда YouTube API благодарит Бена Лонгорию за его время и опыт.


Бен Лонгория, Университет Висконсина – Мэдисон, Академическая технология
февраль 2009 г.

Введение

Демонстрация проигрывателя TubeLoc Chromeless
Рис. 1. Демонстрация проигрывателя TubeLoc Chromeless

Ух ты. Примерно через месяц, на момент написания этой статьи, API YouTube Player исполнится год. Сколько лет интернету? На API было построено несколько замечательных проектов. Вам нужно только следить за блогом YouTube Developer API , чтобы увидеть, что есть множество людей, которые добились больших успехов с его помощью.

Текущий набор приложений проигрывателя API YouTube написан на ActionScript 2, и хотя этот язык по-прежнему остается отличным языком для использования, многие люди сейчас используют ActionScript 3 и/или Flex . Проблема в том, что вам придется пройти через несколько шагов, чтобы заставить приложения ActionScript 2 обмениваться данными с приложениями ActionScript 3. "Но подождите... кажется, я уже слышал это раньше - разве для этого уже не существует чего-то?" Вы можете спросить.

Многие люди уже поняли, как это сделать, и любезно поделились своей мудростью на форумах разработчиков YouTube API . Также были проекты AS3 Chromeless Wrapper и Flex Embedded Player , упрощающие использование разработчиками.

Мне нужен был легкий и простой способ повторного использования функций Player API исключительно в ActionScript 3 или MXML. Класс без Flex для тех проектов, у которых аллергия на Flex, и простой в использовании компонент Flex для тех проектов, которые любят Flex. TubeLoc удовлетворяет обоим требованиям

TubeLoc (мэшап YouTube и LocalConnection) — это библиотека ActionScript 3, которая служит адаптером для API проигрывателя YouTube ActionScript 2. Вы можете легко добавить функции видео YouTube в свои приложения ActionScript 3 или Flex с полноэкранным или бесхромным проигрывателем YouTube. TubeLoc использует класс LocalConnection для связи с SWF-посредником ActionScript 2. SWF ActionScript 2 взаимодействует с официальным проигрывателем YouTube API. Итак, как мы используем эту вещь?

Суть земли

Во-первых, вы должны загрузить текущий выпуск библиотеки из проекта Google Code . После распаковки zip-архива релиза вы найдете внутри каталог as3 . В нем находится каталог src , который включает несколько примеров классов. Не стесняйтесь использовать их в качестве отправной точки. В папке com/enefekt/tubeloc в каталоге src есть два файла. Movie.as — это то, что вы можете использовать в своих проектах Flex, а MovieSprite.as — это то, что вы можете использовать в своих проектах ActionScript 3. В com/enefekt/tubeloc/event есть различные классы событий для различных уведомлений, которые могут быть отправлены с плеера.

Прежде чем приступать к примерам из этого руководства, убедитесь, что каталог src в каталоге as3 указан в пути вашего класса. Этот процесс зависит от того, что вы используете для разработки, поэтому ознакомьтесь с документацией по вашей среде разработки.

После компиляции демоверсии или приложения вам понадобится SWF-файл ActionScript 2, который взаимодействует с API проигрывателя YouTube. Вы можете найти этот SWF в архиве релиза здесь: as3/lib/as2_tubeloc.swf . Просто убедитесь, что он находится рядом с HTML-файлом, в который встроено ваше SWF-приложение, например:

my_app/
  my_app.html
  as2_tubeloc.swf
  my_app.swf

Примечание. Путь к этому SWF-файлу можно изменить с помощью свойства playerWrapperUrl в библиотеке.

Использование Movie.as

Давайте посмотрим, как использовать Flex-версию TubeLoc. Сначала мы рассмотрим полноэкранный проигрыватель (со всеми элементами управления), а затем хромированный проигрыватель BYOC. Вот как вы используете полноэкранный проигрыватель в MXML:

<tubeloc:Movie id="tubelocMovie" width="320" height="240" 
		videoId="GJ1sZBTnbuE" />

Я знаю, я знаю, больно, да? Нисколько! Итак, давайте сойдем с ума и сделаем бесхромный:

<tubeloc:Movie id="tubelocMovie" width="320" height="240" 
		videoId="GJ1sZBTnbuE" chromeless="true" />

Мы добавляем к боли еще один атрибут, вот и все. Итак, вот как будет выглядеть весь файл MXML:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
		xmlns:tubeloc="com.enefekt.tubeloc.*">
   
	<!-- TubeLoc Movie Component -->
	<tubeloc:Movie id="tubelocMovie" width="320" height="240" 
			videoId="GJ1sZBTnbuE" chromeless="true" />
	
</mx:Application> 

Примечание. В элементе mx:Application мы добавляем пространство имен tubeloc с пакетом для компонента Movie. После этого мы можем использовать компонент, как показано. Позже мы рассмотрим, что доступно для установки и вызова этого компонента.

Использование MovieSprite.as

Теперь давайте посмотрим, как использовать версию TubeLoc для ActionScript 3. Эта версия не требует классов из среды Flex и использует только собственные классы Flash Player. Сначала мы рассмотрим, как сделать полнохромный проигрыватель, а затем проигрыватель без хрома. Вот полный пример:

package {
	import flash.display.Sprite;
	import flash.display.Stage;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;

	import com.enefekt.tubeloc.MovieSprite;
	import com.enefekt.tubeloc.event.*;

	[SWF(backgroundColor="#FFFFFF")]
	public class MainChromed extends Sprite {
		private var youtubeMovie:MovieSprite;

		public function MainChromed() {
			stage.align = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;
			
			youtubeMovie = new MovieSprite("7tTNOX8jfno");
			youtubeMovie.addEventListener(PlayerReadyEvent.PLAYER_READY, onPlayerReady);
			youtubeMovie.x = 10;
			youtubeMovie.y = 10;
			addChild(youtubeMovie);
		}

		private function onPlayerReady(event_p:PlayerReadyEvent):void {
			youtubeMovie.width = 640;
			youtubeMovie.height = 480 + MovieSprite.CHROME_HEIGHT;
		}
	}
}

Сначала мы импортируем необходимые классы TubeLoc. Затем в конструкторе мы создаем экземпляр класса MovieSprite и передаем идентификатор нашего видео в конструктор MovieSprite. Затем мы добавляем прослушиватель событий для PlayerReadyEvent . В обработчике события onPlayerReady задаем размер ролика. Примечание. Поскольку мы используем полноэкранный проигрыватель, мы используем статическое свойство CHROME_HEIGHT класса MovieSprite . Это помогает нам определить размер фильма с учетом высоты хрома.

Хорошо, а как насчет бесхромного плеера?

package {
	import flash.display.Sprite;
	import flash.display.Stage;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
		
	import com.enefekt.tubeloc.MovieSprite;
	import com.enefekt.tubeloc.event.*;
	
	[SWF(backgroundColor="#FFFFFF")]
	public class MainChromeless extends Sprite {
		private var youtubeMovie:MovieSprite;
		
		public function MainChromeless() {
			stage.align = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;
			
			youtubeMovie = new MovieSprite(null, true);
			youtubeMovie.addEventListener(PlayerReadyEvent.PLAYER_READY, onPlayerReady);
			youtubeMovie.x = 10;
			youtubeMovie.y = 10;
			addChild(youtubeMovie);
		}
		
		private function onPlayerReady(event_p:PlayerReadyEvent):void {
			youtubeMovie.width = 640;
			youtubeMovie.height = 480;
			youtubeMovie.loadVideoById("7tTNOX8jfno");
		}
	}
}

Так что же изменилось? В конструкторе мы передаем null для идентификатора видео, а второй параметр true сообщает классу MovieSprite , что мы собираемся без хрома. Вы также заметите разницу в обработчике события onPlayerReady . Здесь мы загружаем наше видео по идентификатору, используя метод loadVideoById .

Куда я могу позвонить, что я получу?

Так что же все доступно для вызова, и с какими событиями нам предстоит работать? В скачанном вами архиве релиза есть полная документация по коду, чтобы получить подробную информацию. В качестве краткого обзора, как для Movie.as, так и для MovieSprite.as у вас есть следующие методы:

seekTo(seconds:Number, allowSeekAhead:Boolean=true):void

setVolume(volume:Number):void

getVolume():Number

unMute():void

mute():void

clearVideo():void

setSize(width:Number, height:Number):void

loadVideoById(videoId:String, startSeconds:Number = 0):void [Chromeless player only] 

cueVideoById(videoId:String, startSeconds:Number = 0):void [Chromeless player only] 

stopVideo():void

playVideo():void

pauseVideo():void

destroy():void

В дополнение к этим методам в компоненте Movie.as у вас есть доступ к следующим свойствам:

playerReady:Boolean

chromeless:Boolean

videoId:String

stateDescription:String

currentTime:Number 

duration:Number 

videoUrl:String 

videoEmbedCode:String 

volume:Number

Вот события, на которые вы можете подписаться. Вы можете найти более подробную информацию в документации.

onError

onStateChange

onMovieStateUpdate

onMovieProgress

onPlayerReady

onPlayerUnload

Заключение

Я надеюсь, что эта статья помогла вам интегрировать функции и контент YouTube в ваши приложения Flash. При разработке с TubeLoc следует помнить об одном ограничении: на сцене одновременно не может быть двух проигрывателей YouTube.

Надеюсь, это будет исправлено в свое время. Поэтому, пожалуйста, если вы обнаружите ошибки или нехватку какой-либо функции, посетите проект Google Code и сообщите об этом в системе отслеживания проблем. Спасибо за прочтение!

Биография автора


Бен Лонгория

Бен Лонгория — разработчик академических приложений в Университете Висконсин-Мэдисон. Он занимается разработкой с использованием Flash, начиная с Flash 5, и Flex, начиная с выпуска Flex 2. В течение последних 2 лет он также занимался разработкой приложений для Mozilla. Бен работал над рядом образовательных и академических проектов, включая кроссплатформенные приложения, предназначенные как для браузера, так и для настольных компьютеров. Он принимает активное участие в дизайне интерфейсов и взаимодействий, и ему нравится создавать полезное программное обеспечение. Вы можете найти его блог по адресу http://enefekt.com/sansbrowser/ и прочитать его материалы для InsideRIA .



Лицензия Creative Commons
Эта работа находится под лицензией Creative Commons Attribution 3.0 United States License .