TubeLoc: YouTube Player AS3 Kitaplığı

Bu makale harici bir geliştirici tarafından yazılmış ve gönderilmiştir. YouTube API Ekibi, Ben Longoria'ya zaman ayırıp uzmanlıkları için teşekkür ediyor.


Ben Longoria, Wisconsin Üniversitesi - Madison, Akademik Teknoloji
Şubat 2009

Giriş

TubeLoc Chromesuz Oyuncu Demosu
Şekil 1: TubeLoc Chromeless Player Demosu

Vay canına! YouTube Player API, yaklaşık bir ay içinde bu tarihte kullanıma sunulacaktır. Kaç yıllık internet? API'yi temel alan bir dizi muhteşem proje yapıldı. YouTube Developer API Blogu'nu takip ederek büyük işler yapan çok sayıda kullanıcı olduğunu görebilirsiniz.

Mevcut YouTube API oynatıcı uygulamaları grubu ActionScript 2'de yazılmıştır. Bununla birlikte, bu dil hâlâ iyi bir dil olsa da çoğu kişi ActionScript 3 ve/veya Flex'i kullanmaktadır. Sorun, ActionScript 2 uygulamalarının ActionScript 3 uygulamalarıyla iletişim kurabilmesi için birkaç atlama işlemi yapmanızdır. "Ama bir dakika... Bunu daha önce duymuştum. Bunun için henüz bir şey yok mu?" diye sorabilirsiniz.

Çok sayıda kişi, bunu nasıl yapabileceklerini çoktan öğrenmiş ve YouTube API Geliştirici Forumlarına maharetlerini göstermiştir. Geliştiricilerin kullanımını kolaylaştırmak için AS3 Chromeless Wrapper ve Flex Embedded Player projeleri de sunulmuştur.

Player API işlevini yalnızca ActionScript 3 veya MXML'de yeniden kullanmanın kolay ve basit bir yolunu arıyordum. Bu Flex alerjik projeler için Flex içermeyen bir sınıf ve Flex'e önem veren projeler için kullanımı kolay bir Flex bileşeni. TubeLoc her iki şartı da karşıladı

TubeLoc (YouTube ve LocalConnection'ın mashup'ı), YouTube ActionScript 2 Player API'si için bağdaştırıcı görevi gören bir ActionScript 3 kitaplığıdır. ActionChrome 3 veya Flex uygulamalarınıza tam Chrome veya chromeless YouTube oynatıcılarıyla YouTube video işlevini kolayca ekleyebilirsiniz. TubeLoc, ActionScript 2 arabulucusu SWF'si ile iletişim kurmak için LocalConnection sınıfını kullanır. ActionScript 2 SWF, resmi YouTube API oynatıcısıyla iletişim kurar. Peki bunu nasıl kullanıyoruz?

Toprak

Öncelikle, Google Code projesinden kitaplığın mevcut sürümünü indirmelisiniz. Sürüm zip arşivini paketten çıkardıktan sonra içinde bir as3 dizini görürsünüz. Bunun altında, bazı örnek sınıfların yer aldığı src dizini bulunur. Başlangıç noktası olarak bunlardan yararlanabilirsiniz. src dizinindeki com/enefekt/tubeloc altında iki dosya bulunur. Flex projelerinizde Movie.as, ActionScript 3 projelerinizde ise MovieSprite.as kullanabilirsiniz. com/enefekt/tubeloc/event ürününde, oyuncudan gönderilebilecek farklı bildirimler için çeşitli etkinlik sınıfları var.

Bu eğiticideki örnekleri denemeden önce as3 dizinindeki src dizininin sınıf yolunuzda olduğundan emin olun. Bu işlemi yapmak için geliştirme sürecinizde kullandığınız yönteme göre değişiklik gösterir. Bu nedenle, geliştirme ortamınıza ilişkin dokümanları inceleyin.

Demonuzu veya uygulamanızı derledikten sonra, YouTube Player API ile iletişim kuran ActionScript 2 SWF'ye ihtiyacınız olur. Bu SWF'yi şu sürüm arşivinde bulabilirsiniz: as3/lib/as2_tubeloc.swf. Bunun, sadece SWF uygulamanızı yerleştiren HTML dosyasının yanında olduğundan emin olun. Örneğin:

my_app/
  my_app.html
  as2_tubeloc.swf
  my_app.swf

Not: Bu SWF'nin yolunu, kitaplıkla birlikte playerWrapperUrl özelliğini kullanarak değiştirebilirsiniz.

Movies.as'i kullanma

TubeLoc'un Flex sürümünü nasıl kullanacağınıza göz atalım. Öncelikle tam Chrome oynatıcıya (tüm kontrollere sahip olanlar), ardından BYOC chromeless oynatıcıya göz atacağız. MXML'de tam Chrome oynatıcıyı şu şekilde kullanırsınız:

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

Biliyorum, acıcı, değil mi? Hiç etkilemedi! Şimdi çılgınca deneyelim ve chrome'u yapalım:

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

Sıkıntılara yeni bir özellik daha ekliyoruz. MXML dosyasının tamamı aşağıdaki gibi görünür:

<?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> 

Not: mx:Application öğesine tubeloc ad alanını Film bileşeni paketiyle birlikte ekleriz. Bu işlemin ardından bileşeni, gösterildiği gibi kullanabiliriz. Daha sonra, bu bileşende ayarlanabilecek ve çağrılacak özelliklere göz atalım.

MoviesSprite.as dosyasını kullanma

Şimdi TubeLoc'un ActionScript 3 sürümünü nasıl kullanacağımıza bakalım. Bu sürüm, Flex çerçevesinden sınıf verilmesini gerektirmez ve yalnızca Flash Player yerel sınıflarını kullanır. Önce tam Chrome oynatıcıyı, ardından Chromesuz oynatıcıyı nasıl yapacağınıza bakacağız. Aşağıda tam bir örnek verilmiştir:

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;
		}
	}
}

Öncelikle, gerekli TubeLoc sınıflarını içe aktarıyoruz. Ardından, oluşturucuda MovieSprite sınıfının bir örneğini oluşturur ve video kimliğimizi MoviesSprite oluşturucusuna iletiriz. Ardından, PlayerReadyEvent için bir etkinlik işleyici ekliyoruz. onPlayerReady etkinlik işleyicide filmin boyutunu ayarlıyoruz. Not: Tam Chrome oynatıcıyı kullandığımızdan, MovieSprite sınıfındaki CHROME_HEIGHT statik özelliğinden yararlanıyoruz. Bu, filmi Chrome'un yüksekliğini dikkate alarak boyutlandırmamıza yardımcı olur.

Peki, Chrome'suz oynatıcıda durum nedir?

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");
		}
	}
}

Peki, farkı nedir? Oluşturucuda video kimliği için null iletiyoruz ve ikinci true parametresi MovieSprite sınıfına Chrome'dan geçtiğimizi gösteriyor. Ayrıca, onPlayerReady etkinlik işleyicide bir fark göreceksiniz. loadVideoById yöntemini kullanarak videomuzu kimliğe göre yüklediğimiz yerdir.

Nasıl Arama Yapabilirim, Ne Alabilirim?

Peki, bizi neler bekliyor ve hangi etkinliklerle çalışmamız gerekiyor? İndirdiğiniz sürüm arşivindeki ayrıntıları öğrenmek için eksiksiz kod belgeleri mevcuttur. Özetle, hem Movies.as hem de MoviesSprite.as için aşağıdaki yöntemleri kullanabilirsiniz:

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

Bu yöntemlere ek olarak Movies.as bileşeninde de şu özelliklere erişebilirsiniz:

playerReady:Boolean

chromeless:Boolean

videoId:String

stateDescription:String

currentTime:Number 

duration:Number 

videoUrl:String 

videoEmbedCode:String 

volume:Number

Abone olabileceğiniz etkinlikler. Daha fazla bilgiyi belgelerde bulabilirsiniz.

onError

onStateChange

onMovieStateUpdate

onMovieProgress

onPlayerReady

onPlayerUnload

Sonuç

Bu makalenin Flash işlevlerinize YouTube işlevlerini ve içeriğini entegre etmenize yardımcı olduğunu umarız. TubeLoc ile geliştirmeler yaparken aklınızda bulundurmanız gereken bir sınır var: Aynı anda sahnede iki YouTube oyuncunuz olamaz.

Bu işlemin, gereken süre içinde düzeltileceğini umuyoruz. Bu nedenle, hatalarla veya özelliklerin eksikleriyle karşılaşırsanız lütfen Google Code projesini ziyaret edip sorun izleyicide bildirin. Okuduğunuz için teşekkürler!

Yazarın Biyografisi


Ben Longoria

Ben Longoria, Wisconsin-Madison Üniversitesinin Akademik Uygulama Geliştiricisidir. Flash 5'ten beri Flash, Flex 2'den beri Flex ile gelişiyor. Son 2 yıldır Mozilla destekli uygulamalar da geliştiriyor. Ben, hem tarayıcıyı hem de masaüstünü hedefleyen platformlar arası uygulamalar dahil olmak üzere çeşitli eğitim ve akademik projeler üzerinde çalışmaktadır. Arayüz ve etkileşim tasarımında aktif bir rol üstlenir ve kullanılabilir yazılım oluşturma zorluğundan yararlanır. Blogunu http://enefekt.com/sansbrowser/ adresinde bulabilir ve InsideRIA'ya yaptığı katkıları okuyabilirsiniz.



Creative Commons Lisansı
Bu çalışma, Creative Commons Attribution 3.0 ABD Lisansı kapsamındadır.