<?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>橋本商会 &#187; YouTube</title>
	<atom:link href="http://shokai.org/blog/archives/tag/youtube/feed" rel="self" type="application/rss+xml" />
	<link>http://shokai.org/blog</link>
	<description>なんか作ったりした記録を忘れないうちに書くblog</description>
	<lastBuildDate>Sun, 20 May 2012 10:50:20 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com/" />
			<item>
		<title>AS3 &#8211; BitmapMirror.asでYouTubeを鏡写しにする</title>
		<link>http://shokai.org/blog/archives/1433</link>
		<comments>http://shokai.org/blog/archives/1433#comments</comments>
		<pubDate>Sun, 30 Sep 2007 11:49:11 +0000</pubDate>
		<dc:creator>moblog</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[flv]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[YouTube]]></category>
		<category><![CDATA[画像処理]]></category>

		<guid isPermaLink="false">http://shlog.sakura.ne.jp/blog/?p=1433</guid>
		<description><![CDATA[右下の「Load」を押して再生。 → Source Code (Flash CS3 / AS3) 土善開発合宿(ゆーすけべー日記: 奥出研&#8217;07秋合宿@土善旅館に部外者(OB)の開発合宿も兼ねて参入してきた) [...]]]></description>
			<content:encoded><![CDATA[<p>
<p>右下の「Load」を押して再生。</p>
<p><object width="640" height="278"><param name="movie" value="http://shokai.org/archive/as3/0709_dozen/KagamiVideo/Kagami.swf"></param><embed src="http://shokai.org/archive/as3/0709_dozen/KagamiVideo/Kagami.swf" type="application/x-shockwave-flash" width="640" height="278"></embed></object></p>
<p>→ <a href="http://shokai.org/archive/as3/0709_dozen/KagamiVideo/">Source Code (Flash CS3 / AS3)</a></p>
<p>土善開発合宿(<a href="http://yusukebe.com/archives/07/09/23/152051.html">ゆーすけべー日記: 奥出研&#8217;07秋合宿@土善旅館に部外者(OB)の開発合宿も兼ねて参入してきた</a>)で作ってた<a href="http://shokai.org/archive/as3/0709_dozen/KagamiVideo/BitmapMirror.as">BitmapMirror.as</a>を公開しておきます。</p>
<p>宴会直前に到着したのであんまり時間がなかったけど、今回やったことは3つ<br /><br />
１．YouTubeのビデオ(flv)をGoogleVideo経由で取得して<br /><br />
２．AS3のBitmapDataとして扱って<br /><br />
３．鏡面反射させる</p>
<p>ビデオはこれを読み込んでいます。ひゃあ゛ああああうまい゛いいいいい<br /><br />
<object width="425" height="353"><param name="movie" value="http://www.youtube.com/v/YRY0M5cgDG8&#038;rel=1"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/YRY0M5cgDG8&#038;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="353"></embed></object></p>
<p>■１．YouTubeのビデオをGoogleVideo経由で取得する<br /><br />
数ヶ月前にGoogleに買収されて以来、<br /><br />
http://www.youtube.com/watch?v=YRY0M5cgDG8<br /><br />
のビデオは<br /><br />
http://cache.googlevideo.com/get_video?video_id=YRY0M5cgDG8<br /><br />
から取れる様になりました。<br /><br />
以前は<a href="http://search.cpan.org/~yoshida/WebService-YouTube/lib/WebService/YouTube.pm">WebService::YouTube</a>を<a href="http://web.sfc.keio.ac.jp/~shokai/archives/2006/12/tagtube.html">使って<br /><br />
</a>スクレイピングしなければならなかったけど、素直になった。</p>
<p><span id="more-1433"></span><br /><br />
■２．flvからBitmapDataオブジェクトを作る<br /><br />
Flash Player9から、flvファイルや画像を外部から読み込んでBitmapDataオブジェクトを作るとクロスドメイン警告が出る様になった。<br /><br />
適切なcrossdomain.xmlが置いてあるサイトなら（例えばfarm1.static.flickr.comなど）<br /><br />
fl.Loader系でloadする時に</p>
</p>
<blockquote><p><p>uiLoader.load(new URLRequest(textUrl.text), new LoaderContext(true,null, null));</p></p></blockquote>
<p>
<p>などして、<a href="http://livedocs.adobe.com/flex/2_jp/langref/flash/system/LoaderContext.html">LoaderContext</a>オブジェクトを渡してやれば<br /><br />
crossdomain.xmlを読んでくれるんだが<br /><br />
なんとかする方法を見つけた。</p>
<p>BitmapData.draw()メソッドでビットマップデータオブジェクトを外部のドメインのデータから作ろうとするとした時に警告が出る、ということは、<br /><br />
draw()する瞬間だけ外部ドメインじゃなければいい。</p>
<p>こうする。</p>
</p>
<blockquote><p><p>video.attachNetStream(null);<br /><br />
bmd.draw(video);//ビットマップデータを取得<br /><br />
video.attachNetStream(stream);</p></p></blockquote>
<p>
<p>ビットマップ取る時だけnullをattachしても、videoの表示は消えない（一瞬止<br /><br />
まる）だけなので目には見えない。</p>
<p>ここまで情報元：<a href="http://saqoosha.net/2007/07/22/609/">[Saq.] YouTube の FLV を抜き出すのが簡単になっている件</a></p>
<p>■３．<a href="http://shokai.org/archive/as3/0709_dozen/KagamiVideo/BitmapMirror.as">BitmapMirror.as</a>で鏡面反射させる<br /><br />
使い方。<br /><br />
コンストラクタでBitmapDataを渡してあげて、process()する。getBitmapData()で処理後のBitmapDataを取得できるので結果表示用のBitmapに渡してやれば表示できる。<br /><br />
thresholdプロパティで左端から鏡までの距離を指定できる。</p>
<p>myBitmapData:BitmapDataがカメラやストリームやMovieCilpなり何なりから作ってあるとして、</p>
</p>
<blockquote><p><p>var mirror:BitmapMirror = new BitmapMirror(myBitmapData);</p>
<p>// 鏡処理(左右反転)したbitmapdataを受け取る<br /><br />
mirror.getBitmapData();</p>
<p>// 反転処理を反映させる<br /><br />
mirror.process();</p></p></blockquote>
<p>
<p>普通にあらかじめ</p>
</p>
<blockquote><p><p>var bmp_result:Bitmap = new Bitmap(mirror.getBitmapData());<br /><br />
this.addChild(bmp_result);</p></p></blockquote>
<p>
<p>しておけば、毎フレーム毎に mirror.process(); すれば更新されます。</p>
<p>thresholdプロパティは、「左端から何ピクセル目に鏡をあてているか」です。<br /><br />
mirror.threshold = 30だと30ピクセル目になる。<br /><br />
今回はスライダーに合わせてるので、ソースが横幅320pixelだから</p>
</p>
<blockquote><p><p>slider.maximum = 320;<br /><br />
mirror.threshold = slider.value;<br /><br />
mirror.process();</p></p></blockquote>
<p>
<p>ってやってる。</p>
<p><a href="http://shokai.org/archive/as3/0709_dozen/KagamiVideo/Kagami.fla">Kagami.fla</a> 1frame目（<a href="http://shokai.org/archive/as3/0709_dozen/KagamiVideo/BitmapMirror.as">BitmapMirror.as</a>を同じディレクトリに入れてやる必要あり）<br /><br />
</p>
<blockquote><p>importfl.events.*;</p>
<p>//入力用<br /><br />
varvideo:Video=newVideo(320,240);<br /><br />
varconn:NetConnection=newNetConnection();<br /><br />
conn.connect(null);<br /><br />
varstream:NetStream=newNetStream(conn);<br /><br />
stream.client={onMetaData:function():void{}};</p>
<p>varbmd:BitmapData=newBitmapData(320,240);</p>
<p>//ミラー<br /><br />
varmirror:BitmapMirror=newBitmapMirror(bmd);<br /><br />
varbmp_result:Bitmap=newBitmap(mirror.getBitmapData());</p>
<p>//結果表示用<br /><br />
bmp_result.x=0;<br /><br />
bmp_result.width=640;<br /><br />
bmp_result.height=240;<br /><br />
this.addChild(bmp_result);</p>
<p>varplayFlug:Boolean=false;</p>
<p>buttonLoad.addEventListener(MouseEvent.CLICK,loadVideo);<br /><br />
functionloadVideo(e:Event){<br /><br />
trace(&#8220;loadVideo()&#8221;);<br /><br />
stream.play(textUrl.text);<br /><br />
playFlug=true;<br /><br />
}</p>
<p>this.addEventListener(Event.ENTER_FRAME,reloadMirror);<br /><br />
slider.addEventListener(SliderEvent.THUMB_DRAG,reloadMirror);</p>
<p>functionreloadMirror(e:Event){<br /><br />
if(!playFlug)return;<br /><br />
<br /><br />
video.attachNetStream(null);<br /><br />
bmd.draw(video);//ビットマップデータを取得<br /><br />
video.attachNetStream(stream);<br /><br />
mirror.threshold=slider.value;<br /><br />
mirror.process();//鏡写しのビットマップデータ作成<br /><br />
}<br />
</p></p></blockquote>
<p>
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/1433/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

