TubeLoc: کتابخانه YouTube Player AS3

این مقاله توسط یک توسعه دهنده خارجی نوشته و ارسال شده است. تیم YouTube API از بن لونگوریا برای وقت و تخصصش تشکر می کند.


بن لونگوریا، دانشگاه ویسکانسین - مدیسون، فناوری دانشگاهی
فوریه 2009

معرفی

نسخه نمایشی پخش کننده بدون کروم TubeLoc
شکل 1: نسخه نمایشی پخش کننده بدون کروم TubeLoc

وای. تنها یک ماه دیگر، از زمان نوشتن این مقاله، API YouTube Player یک ساله خواهد شد. این چند سال اینترنت است؟ تعدادی پروژه بزرگ بر اساس API ساخته شده است. فقط باید وبلاگ YouTube Developer API را دنبال کنید تا ببینید افراد زیادی هستند که کارهای بزرگی با آن انجام داده اند.

مجموعه فعلی برنامه‌های پخش‌کننده YouTube API با ActionScript 2 نوشته شده‌اند، و در حالی که این زبان هنوز یک زبان عالی برای استفاده است، بسیاری از مردم اکنون از ActionScript 3 و/یا Flex استفاده می‌کنند. مسئله این است که شما باید از چند حلقه عبور کنید تا برنامه های ActionScript 2 را برای برقراری ارتباط با برنامه های ActionScript 3 دریافت کنید. "اما صبر کنید... فکر می کنم قبلاً این را شنیده بودم - آیا قبلاً چیزی برای این وجود ندارد؟" ممکن است بپرسید

تعداد زیادی از مردم قبلاً متوجه شده اند که چگونه این کار را انجام دهند و با مهربانی خرد خود را در تالارهای گفتگوی برنامه نویس YouTube API رها کرده اند. همچنین پروژه‌های AS3 Chromeless Wrapper و Flex Embedded Player وجود دارد تا استفاده از آن برای توسعه‌دهندگان آسان‌تر شود.

من یک راه آسان و ساده برای استفاده مجدد از عملکرد API Player تنها در ActionScript 3 یا MXML می‌خواستم. یک کلاس بدون فلکس برای پروژه‌های حساس به فلکس، و یک جزء فلکس با استفاده آسان برای پروژه‌های دوستدار فلکس. TubeLoc هر دو نیاز را برآورده کرد

TubeLoc (ترکیبی از YouTube و LocalConnection) یک کتابخانه ActionScript 3 است که به عنوان آداپتور YouTube ActionScript 2 Player API عمل می کند. می‌توانید به راحتی قابلیت‌های ویدیوی YouTube را به برنامه‌های ActionScript 3 یا Flex خود با پخش‌کننده‌های یوتیوب فول کروم یا بدون کروم اضافه کنید. TubeLoc از کلاس LocalConnection در برقراری ارتباط با واسطه ActionScript 2 SWF استفاده می کند. ActionScript 2 SWF با پخش کننده رسمی YouTube API ارتباط برقرار می کند. پس چگونه از این چیز استفاده کنیم؟

لای سرزمین

ابتدا باید نسخه فعلی کتابخانه را از پروژه Google Code دانلود کنید. پس از باز کردن بایگانی فشرده انتشار، یک دایرکتوری as3 در داخل آن پیدا خواهید کرد. زیر این دایرکتوری src است که شامل چند کلاس نمونه است. با خیال راحت از آنها به عنوان نقطه شروع استفاده کنید. در زیر com/enefekt/tubeloc در دایرکتوری src دو فایل وجود دارد. Movie.as چیزی است که می توانید در پروژه های Flex خود استفاده کنید و MovieSprite.as چیزی است که می توانید در پروژه های ActionScript 3 خود استفاده کنید. در com/enefekt/tubeloc/event کلاس‌های رویداد مختلفی برای اعلان‌های مختلف وجود دارد که می‌توان از بازیکن ارسال کرد.

قبل از امتحان کردن مثال های این آموزش، مطمئن شوید که دایرکتوری src در پوشه as3 در مسیر کلاس شما قرار دارد. فرآیند انجام این کار بسته به آنچه که برای توسعه استفاده می کنید متفاوت است، بنابراین مستندات محیط توسعه خود را بررسی کنید.

هنگامی که نسخه ی نمایشی یا برنامه خود را کامپایل کردید، به ActionScript 2 SWF نیاز دارید که با YouTube Player API ارتباط برقرار می کند. می‌توانید این 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

حال بیایید نحوه استفاده از نسخه ActionScript 3 TubeLoc را بررسی کنیم. این نسخه به هیچ کلاسی از فریمورک 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 را در برنامه های فلش خود ادغام کنید. در حین توسعه با TubeLoc یک محدودیت وجود دارد که باید به خاطر داشته باشید: نمی توانید همزمان دو پخش کننده YouTube را روی صحنه داشته باشید.

انشالله در زمان مناسب این مشکل برطرف شود. بنابراین، لطفاً، هنگامی که اشکالات یا برخی از ویژگی‌ها را کمبود پیدا کردید، از پروژه کد Google بازدید کنید و آن را در ردیاب مشکل گزارش دهید. با تشکر برای خواندن!

بیوگرافی نویسنده


بن لونگوریا

بن لونگوریا یک برنامه‌نویس برنامه‌های آکادمیک برای دانشگاه ویسکانسین-مدیسون است. او از زمان Flash 5 و Flex از زمان انتشار Flex 2 در حال توسعه با Flash بوده است. در 2 سال گذشته او همچنین برنامه های کاربردی مبتنی بر موزیلا را توسعه داده است. بن روی تعدادی از پروژه های آموزشی و دانشگاهی از جمله برنامه های کاربردی چند پلتفرمی که هم مرورگر و هم دسکتاپ را هدف قرار می دهند، کار کرده است. او نقش فعالی در طراحی رابط و تعامل دارد و از چالش ایجاد نرم افزار قابل استفاده لذت می برد. می توانید وبلاگ او را در http://enefekt.com/sansbrowser/ پیدا کنید و مشارکت های او را در InsideRIA بخوانید.



مجوز Creative Commons
این اثر تحت مجوز Creative Commons Attribution 3.0 ایالات متحده مجوز دارد.