<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>RichMedia+ &#187; Youtube API</title>
	<atom:link href="http://blog.richmediaplus.com/tag/youtube-api/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.richmediaplus.com</link>
	<description>About the Adobe&#039;s RIA related solution and technology, like Adobe Air, Adobe Flex, Mobile Dev. You also can find the SEO for Flex, RIA, User Ex in this blog.</description>
	<lastBuildDate>Fri, 16 Dec 2011 09:33:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>YouTube Chromeless Player API 正式支持 ActionScript 3</title>
		<link>http://blog.richmediaplus.com/2009/11/youtube-chromeless-player-api-support-actionscript-3/</link>
		<comments>http://blog.richmediaplus.com/2009/11/youtube-chromeless-player-api-support-actionscript-3/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 09:37:25 +0000</pubDate>
		<dc:creator>Alvin / Aedis.Ju</dc:creator>
				<category><![CDATA[Youtube Player API]]></category>
		<category><![CDATA[Tubeloc]]></category>
		<category><![CDATA[Youtube API]]></category>
		<category><![CDATA[YouTube Chromeless Player]]></category>
		<category><![CDATA[youtubechromelesswrapper-as3]]></category>

		<guid isPermaLink="false">http://blog.richmediaplus.com/?p=401</guid>
		<description><![CDATA[這次 YouTube Chromeless Player API 對 ActionScript 3 的支持堪稱完美了！ 首先，回顧之前常用的 Youtube Player API，來個部分總結： youtubechromelesswrapper-as3 youtubechromelesswrapper-as3 的原理是利用 ActionScript&#8217;s ExternalInterface class &#38; YouTube&#8217;s JavaScript API 進行交互。 查看它的原始碼可以看出它 Loading 的 Youtube Player 地址。 1 2 3 4 5 6 7 //Loading youtube 的 apiplayer，并且設置可以與 Javascript 互動。 private static const CHROMELESS_PLAYER_URL:String=&#34;http://www.youtube.com/apiplayer?enablejsapi=1&#34; ... _loader = new Loader&#40;&#41;; //_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler); _loader.contentLoaderInfo.addEventListener&#40;IOErrorEvent.IO_ERROR, [...]
Related posts:<ol>
<li><a href='http://blog.richmediaplus.com/2009/02/tubeloc-youtube-player-as3-nice-support/' rel='bookmark' title='TubeLoc: YouTube Player AS3 Nice Support!'>TubeLoc: YouTube Player AS3 Nice Support!</a></li>
<li><a href='http://blog.richmediaplus.com/2009/07/loading-external-html-and-css-in-actionscript/' rel='bookmark' title='Loading external html and css in ActionScript'>Loading external html and css in ActionScript</a></li>
<li><a href='http://blog.richmediaplus.com/2010/06/flash-player-10-1-and-air-2-released/' rel='bookmark' title='Flash Player 10.1 and AIR 2 正式版放出'>Flash Player 10.1 and AIR 2 正式版放出</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>這次 YouTube Chromeless Player API 對 ActionScript 3 的支持堪稱完美了！<br />
首先，回顧之前常用的 Youtube Player API，來個部分總結：</p>
<ul>
<li><strong><a href="http://code.google.com/p/youtubechromelesswrapper-as3/" target="_blank">youtubechromelesswrapper-as3</a></strong><br />
youtubechromelesswrapper-as3 的原理是利用 ActionScript&#8217;s ExternalInterface class &amp; YouTube&#8217;s JavaScript API 進行交互。<br />
查看它的原始碼可以看出它 Loading 的 Youtube Player 地址。</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #009900; font-style: italic;">//Loading youtube 的 apiplayer，并且設置可以與 Javascript 互動。</span>
<span style="color: #0033ff; font-weight: bold;">private</span> static const CHROMELESS_PLAYER_URL<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">String</span>=<span style="color: #990000;">&quot;http://www.youtube.com/apiplayer?enablejsapi=1&quot;</span>
<span style="color: #000066; font-weight: bold;">...</span>
_loader = <span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">Loader</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #009900; font-style: italic;">//_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);</span>
_loader<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">contentLoaderInfo</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">IOErrorEvent</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">IO_ERROR</span><span style="color: #000066; font-weight: bold;">,</span> ioErrorHandler<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
_loader<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">load</span><span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">URLRequest</span><span style="color: #000000;">&#40;</span>CHROMELESS_PLAYER_URL<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span></pre></td></tr></table></div>

<p>Event.COMPLETE 在這里并不起作用，因此需要通過 ExternalInterface class &amp; JavaScript來判斷相應的 SWF-DIV 來告知CHROMELESS_PLAYER_URL 是否Loading成功，而在Flash里面的每次操作，也是由 ExternalInterface class &amp; JavaScript 來互相控制。<br />
這樣一來，缺點顯而易見：</p>
<ol>
<li> 只能選用Chromeless Youtube Player</li>
<li> 判斷 CHROMELESS_PLAYER_URL 是否 Loading 成功的方式感覺到很奇怪。</li>
<li> JS 禁用的條件下，youtubechromelesswrapper-as3 肯定無法操作。</li>
<li> 多個播放器無法操作。</li>
</ol>
<p><em>更多參考：<br />
demo:<br />
<a href="http://youtubechromelesswrapper-as3.googlecode.com/svn/trunk/as3wrapper/deploy/index.html" target="_blank">http://youtubechromelesswrapper-as3.googlecode.com/svn/trunk/as3wrapper/deploy/index.html</a></p>
<p>A full article and code overview is available here:<br />
<a href="http://code.google.com/apis/youtube/articles/youtube_as3_chromeless.html" target="_blank">http://code.google.com/apis/youtube/articles/youtube_as3_chromeless.html</a></p>
<p>Sample Source Code:<br />
<a href="http://youtubechromelesswrapper-as3.googlecode.com/files/ActionScript_3_YouTube_Wrapper_v1.0.zip" target="_blank">ActionScript_3_YouTube_Wrapper_v1.0.zip</a></li>
<p></em>
</ul>
<ul>
<li><strong><a href="http://code.google.com/p/tubeloc/" target="_blank">TubeLoc</a></strong><br />
個人<a href="http://blog.richmediaplus.com/2009/02/tubeloc-youtube-player-as3-nice-support/" target="_blank">曾經強烈推薦過的 Youtube Player 連接方式</a>。<br />
TubeLoc 是 AS2 YouTube Player API 的 AS3/Flex Proxy  Library，原理是采用 localConnection 利用 ActionScript 2 編碼的 SWF (as2_tubeloc.swf) 與 the YouTube Player API 進行通信，整個過程不需要 JS 的支持，并且支持 Full-Chrome player &amp; Chromeless player。<br />
缺點：</p>
<ol>
<li> localConnection 連接會有可能 Connection Channel 被占用，無法造成鏈接。</li>
<li> localConnection 的send()方式數據量限制為40個字節，否則引發 ArgumentError（一般不會發生，但畢竟還是由此限制呀） 。</li>
<li>多個播放器無法操作。</li>
</ol>
<p><em>更多參考：<br />
<a href="http://code.google.com/intl/en/apis/youtube/articles/tubeloc.html" target="_blank">http://code.google.com/intl/en/apis/youtube/articles/tubeloc.html</a></li>
<p></em></ul>
<p>最近再次查看 Youtube Player API</p>
<blockquote><p><em>Wednesday, October 14, 2009<br />
the official YouTube Chromeless Player API has been updated to natively support ActionScript 3!<br />
&#8230;</em></p></blockquote>
<p>讓我眼前一亮。</p>
<p><strong>這次 Youtube 的更新支持 YouTube Chromeless Player 不再需要通過 JS 或者 localConnection 的方式進行通信連接，直接采用 ActionScript3 的內部方式。</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #009900; font-style: italic;">//注意這次的地址，后面加了參數version = 3。</span>
<span style="color: #009900; font-style: italic;">//如果沒有這個version=3的參數，那么 YouTube Chromeless Player API 將無法使用的</span>
<span style="color: #0033ff; font-weight: bold;">private</span> static const CHROMELESS_PLAYER_URL<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">String</span>=<span style="color: #990000;">&quot;http://www.youtube.com/apiplayer?version=3&quot;</span><span style="color: #000066; font-weight: bold;">;</span></pre></td></tr></table></div>

<p>而檢測 Player 是否成功載入的方式采用的是它本身內部的監聽，目前提供了：<br />
“onReady” &#8211; 載入成功<br />
“onError” &#8211; 載入異常<br />
“onStateChange” &#8211; 播放器狀態改變<br />
“onPlaybackQualityChange” &#8211; 播放器影片載入質量改變</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;">_youtubeLoader<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">content</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;onReady&quot;</span><span style="color: #000066; font-weight: bold;">,</span> onPlayerReady<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
_youtubeLoader<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">content</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;onError&quot;</span><span style="color: #000066; font-weight: bold;">,</span> onPlayerError<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
_youtubeLoader<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">content</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;onStateChange&quot;</span><span style="color: #000066; font-weight: bold;">,</span> onPlayerStateChange<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
_youtubeLoader<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">content</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;onPlaybackQualityChange&quot;</span><span style="color: #000066; font-weight: bold;">,</span> onVideoPlaybackQualityChange<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span></pre></td></tr></table></div>

<p>而使用方法，也是在 _youtubeLoader 在完全 Loading 完成 youtubePlayer 以后，直接進行調用</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #3f5fbf;">/**
 * loadByURL
 * @param url YouTube player URL in the format http://www.youtube.com/v/VIDEO_ID.
 * @param seconds
 */</span>
<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> loadByURL<span style="color: #000000;">&#40;</span><span style="color: #004993;">url</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">String</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #004993;">seconds</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
<span style="color: #000000;">&#123;</span>
	<span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span>youtubePlayer<span style="color: #000000;">&#41;</span>
	<span style="color: #000000;">&#123;</span>
		<span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span>_autoPlay<span style="color: #000000;">&#41;</span>
		<span style="color: #000000;">&#123;</span>
			<span style="color: #009900; font-style: italic;">//Loads and plays the specified video.</span>
			youtubePlayer<span style="color: #000066; font-weight: bold;">.</span>loadVideoByUrl<span style="color: #000000;">&#40;</span><span style="color: #004993;">url</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #004993;">seconds</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
		<span style="color: #000000;">&#125;</span>
		<span style="color: #0033ff; font-weight: bold;">else</span>
		<span style="color: #000000;">&#123;</span>
			<span style="color: #009900; font-style: italic;">//The player does not request the FLV until playVideo() or seekTo() is called.</span>
			youtubePlayer<span style="color: #000066; font-weight: bold;">.</span>cueVideoByUrl<span style="color: #000000;">&#40;</span><span style="color: #004993;">url</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #004993;">seconds</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
		<span style="color: #000000;">&#125;</span>
	<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>而且經過測試，可以支持多個播放器同時播放。<br />
本人也寫了個 AS3 的類供大家玩耍（因為要連接 Youtube.com，所以國內的同學請繞墻），可以參考源代碼。<br />
<a href="http://code.richmediaplus.com/ChromelessYoutubePlayerAS3/ChromelessYoutubePlayerAS3App.html" target="_blank">http://code.richmediaplus.com/ChromelessYoutubePlayerAS3/ChromelessYoutubePlayerAS3App.html</a><br />
SourceView:<a href="http://code.richmediaplus.com/ChromelessYoutubePlayerAS3/srcview/" target="_blank">http://code.richmediaplus.com/ChromelessYoutubePlayerAS3/srcview/</a></p>
<p>更多參考（國內的同學請注意跳轉地址）：<br />
<a href="http://code.google.com/intl/en/apis/youtube/flash_api_reference.html" target="_blank">http://code.google.com/intl/en/apis/youtube/flash_api_reference.html</a></p>
<p>至于 Full-Chrome player 的這一塊，經本人測試，如果loading的地址采用的是”http://www.youtube.com/v/VIDEO_ID?version=3&#8243;，那么loading襲來的swf照樣可以支持目前提供的API，但是因為Flash security的限制，DEBUG版本播放器下會報錯誤，但是普通版本可以測試通過。畢竟 Full-Chrome player 的 API 還沒有正式提供，所以也不建議大家使用。</p>
<p>真的播放器在 <a href="http://s.ytimg.com/yt/swf/watch_as3.swf" target="_blank">http://s.ytimg.com/yt/swf/watch_as3.swf</a> 這里啊，但是人家限制域啦！</p>
<p>Related posts:<ol>
<li><a href='http://blog.richmediaplus.com/2009/02/tubeloc-youtube-player-as3-nice-support/' rel='bookmark' title='TubeLoc: YouTube Player AS3 Nice Support!'>TubeLoc: YouTube Player AS3 Nice Support!</a></li>
<li><a href='http://blog.richmediaplus.com/2009/07/loading-external-html-and-css-in-actionscript/' rel='bookmark' title='Loading external html and css in ActionScript'>Loading external html and css in ActionScript</a></li>
<li><a href='http://blog.richmediaplus.com/2010/06/flash-player-10-1-and-air-2-released/' rel='bookmark' title='Flash Player 10.1 and AIR 2 正式版放出'>Flash Player 10.1 and AIR 2 正式版放出</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.richmediaplus.com/2009/11/youtube-chromeless-player-api-support-actionscript-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TubeLoc: YouTube Player AS3 Nice Support!</title>
		<link>http://blog.richmediaplus.com/2009/02/tubeloc-youtube-player-as3-nice-support/</link>
		<comments>http://blog.richmediaplus.com/2009/02/tubeloc-youtube-player-as3-nice-support/#comments</comments>
		<pubDate>Thu, 12 Feb 2009 13:44:25 +0000</pubDate>
		<dc:creator>Alvin / Aedis.Ju</dc:creator>
				<category><![CDATA[ActionScript Library]]></category>
		<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[Youtube]]></category>
		<category><![CDATA[Youtube Player API]]></category>
		<category><![CDATA[Adobe Flex]]></category>
		<category><![CDATA[Tubeloc]]></category>
		<category><![CDATA[Youtube API]]></category>

		<guid isPermaLink="false">http://blog.richmediaplus.com/?p=35</guid>
		<description><![CDATA[差不多一年前 YouTube APIs and Tools team 發布了 YouTube Player API ，另人遺憾的是在對ActionScript2良好的支持上，卻對現在最流行的ActionScript3的支持并不友好，特別是對新手來說，處理AS3和AS2直接的交互和Youtube Player的控制會比較復雜。 TubeLoc 是 Ben Longoria 寫的一個AS2 YouTube Player API的AS3/Flex Proxy Library，你可以非常簡單容易的把Youtube Video加入到你的AS3/Adobe Flex/Adobe Air/AsWing工程當中，真正做到Nice Support！ 支持目前最流行的AS3/Adobe Flex/Adobe Air/AsWing 包含了一個Flex Component(Movie.as)和一個基于Sprite的ActionScript3 Class(MovieSprite.as) 支持YouTube Chromeless Player 和 Full-Chrome Player 使用LocalConnection 具體請看： TubeLoc in Google Code TubeLoc in YouTube APIs and Tools  Related posts: YouTube Chromeless Player API 正式支持 ActionScript 3 如何更新 [...]
Related posts:<ol>
<li><a href='http://blog.richmediaplus.com/2009/11/youtube-chromeless-player-api-support-actionscript-3/' rel='bookmark' title='YouTube Chromeless Player API 正式支持 ActionScript 3'>YouTube Chromeless Player API 正式支持 ActionScript 3</a></li>
<li><a href='http://blog.richmediaplus.com/2011/08/update-flash-ide-auth-player/' rel='bookmark' title='如何更新 Flash CS5.5 內建除錯 Player'>如何更新 Flash CS5.5 內建除錯 Player</a></li>
<li><a href='http://blog.richmediaplus.com/2011/09/nested-mask-crash-issue/' rel='bookmark' title='巢狀遮罩造成 Flash Player 死機的 Bug'>巢狀遮罩造成 Flash Player 死機的 Bug</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>差不多一年前 <a href="http://apiblog.youtube.com/">YouTube APIs and Tools team</a> 發布了 <a href="http://code.google.com/apis/youtube/flash_api_reference.html">YouTube Player API</a> ，另人遺憾的是在對ActionScript2良好的支持上，卻對現在最流行的ActionScript3的支持并不友好，特別是對新手來說，處理AS3和AS2直接的交互和Youtube Player的控制會比較復雜。</p>
<p><a title="TubeLoc" href="http://code.google.com/p/tubeloc/" target="_blank">TubeLoc</a> 是 <a href="http://enefekt.com/sansbrowser/" target="_blank">Ben Longoria</a> <span class="byline">寫的一個AS2 YouTube Player API的AS3/Flex Proxy Library，你可以非常簡單容易的把Youtube Video加入到你的AS3/Adobe Flex/Adobe Air/AsWing工程當中，真正做到Nice Support！</span></p>
<ul>
<li><span class="byline">支持目前最流行的AS3/Adobe Flex/Adobe Air/AsWing</span></li>
<li><span class="byline">包含了一個Flex Component(Movie.as)和一個基于Sprite的ActionScript3 Class(MovieSprite.as)</span></li>
<li><span class="byline">支持YouTube Chromeless Player 和 Full-Chrome Player</span></li>
<li><span class="byline">使用LocalConnection</span></li>
</ul>
<p>具體請看：<br />
<a title="TubeLoc" href="http://code.google.com/p/tubeloc/" target="_blank">TubeLoc in Google Code</a><br />
<a href="http://code.google.com/intl/zh-CN/apis/youtube/articles/tubeloc.html">TubeLoc in YouTube APIs and Tools </a></p>
<p>Related posts:<ol>
<li><a href='http://blog.richmediaplus.com/2009/11/youtube-chromeless-player-api-support-actionscript-3/' rel='bookmark' title='YouTube Chromeless Player API 正式支持 ActionScript 3'>YouTube Chromeless Player API 正式支持 ActionScript 3</a></li>
<li><a href='http://blog.richmediaplus.com/2011/08/update-flash-ide-auth-player/' rel='bookmark' title='如何更新 Flash CS5.5 內建除錯 Player'>如何更新 Flash CS5.5 內建除錯 Player</a></li>
<li><a href='http://blog.richmediaplus.com/2011/09/nested-mask-crash-issue/' rel='bookmark' title='巢狀遮罩造成 Flash Player 死機的 Bug'>巢狀遮罩造成 Flash Player 死機的 Bug</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.richmediaplus.com/2009/02/tubeloc-youtube-player-as3-nice-support/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

