<?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; Flex</title>
	<atom:link href="http://www.esll.net/blog/tag/flex/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.esll.net/blog</link>
	<description>Life is beautiful</description>
	<lastBuildDate>Sun, 01 Jan 2012 06:56:34 +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>Flex와 PHP를 이용한 MyTube 구현(2)</title>
		<link>http://www.esll.net/blog/2007/07/flex%ec%99%80-php%eb%a5%bc-%ec%9d%b4%ec%9a%a9%ed%95%9c-mytube-%ea%b5%ac%ed%98%842/</link>
		<comments>http://www.esll.net/blog/2007/07/flex%ec%99%80-php%eb%a5%bc-%ec%9d%b4%ec%9a%a9%ed%95%9c-mytube-%ea%b5%ac%ed%98%842/#comments</comments>
		<pubDate>Mon, 09 Jul 2007 06:47:30 +0000</pubDate>
		<dc:creator>!엔죠라이프</dc:creator>
				<category><![CDATA[잡동사니]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[MyTube]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.esll.net/blog/2007/07/flex%ec%99%80-php%eb%a5%bc-%ec%9d%b4%ec%9a%a9%ed%95%9c-mytube-%ea%b5%ac%ed%98%842/</guid>
		<description><![CDATA[Flex와 PHP를 이용한 MyTube 구현(2) 등록일: 2007년 07월 06일 조회수: 125 프린트 전체기사목록 제공 : 한빛 네트워크저자 : Jack Herrington역자 : 노재현원문 : Creating MyTube with Flex and PHP [이전 기사 보기] Flex와 PHP를 이용한 MyTube 구현(1) Flex를 이용한 인터페이스 구성 파트 1 Flex 를 이용해서 원하는 비디오를 재생시키기 위해서는 Flex에게 재생시킬 수 있는 비디오의 [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-weight: bold;">Flex와 PHP를 이용한 MyTube 구현(2)</span></p>
<ul id="action-icon">
<li id="regdate">등록일: 2007년 07월 06일</li>
<li id="viewcount">조회수: 125 </li>
<li id="print_16"><a href="http://network.hanb.co.kr/print.php?bi_id=1402">프린트</a> </li>
<li id="list_16"><a href="http://network.hanb.co.kr/list.php">전체기사목록</a> </li>
</ul>
<div class="network-details"><b>제공 :</b> <a href="http://network.hanbitbook.co.kr/">한빛 네트워크</a><br /><b>저자 :</b> Jack Herrington<br /><b>역자 :</b> 노재현<br /><b>원문 :</b> <a href="http://www.onlamp.com/pub/a/php/2007/05/24/creating-mytube-with-flex-and-php.html">Creating MyTube with Flex and PHP</a> </p>
<p>[이전 기사 보기] <a href="http://network.hanb.co.kr/view.php?bi_id=1401">Flex와 PHP를 이용한 MyTube 구현(1)</a> </p>
<p><b>Flex를 이용한 인터페이스 구성 파트 1</b> </p>
<p>Flex<br />
를 이용해서 원하는 비디오를 재생시키기 위해서는 Flex에게 재생시킬 수 있는 비디오의 리스트를 알려줘야만 합니다. 어떻게<br />
해야하냐면 XML파일을 이용해서 Flex에게 비디오 리스트 정보를 넘겨줄 수가 있는데요, 여기서는 PHP로 다시 돌아가서<br />
데이터베이스에서 비디오 리스트를 읽어들인 후에 XML로 출력하는 스크립트를 만들어 보도록 하겠습니다. 다음 [리스트 6]의<br />
movies.php 파일을 보도록 하죠. </p>
<p>[리스트 6] movies.php
<pre>&lt;?phprequire "DB.php";

$moviebase = 'http://localhost:8080/movies/';

header( 'content-type: text/xml' );

$dsn = 'mysql://root@localhost/movies';$db =&amp; DB::connect( $dsn );if ( PEAR::isError( $db ) ) { die($db-&gt;getMessage()); }?&gt;&lt;movies&gt;&lt;?php$res = $db-&gt;query( 'SELECT title, source, thumb, width, height FROM movies' );while( $row = $res-&gt;fetchrow( ) ) {?&gt;  &lt;movie title="&lt;?php echo( $row[0] ) ?&gt;" source="&lt;?php echo( $moviebase.$row[1] ) ?&gt;"    thumb="&lt;?php echo( $moviebase.$row[2] ) ?&gt;" width="&lt;?php echo( $row[3] ) ?&gt;"   height="&lt;?php echo( $row[4] ) ?&gt;" /&gt;&lt;?php}?&gt;&lt;/movies&gt;</pre>
<p>위 PHP 스크립트를 만든 후에 커맨드 라인에서 실행시키거나 브라우저에서 실행시키게 되면 다음 [그림 3]과 같은 XML 리스트를 볼 수가 있습니다. </p>
<p><img alt="" src="http://image.hanb.co.kr/blog/7609/1183681852@utube_03.png" height="229" width="245"><br />[그림 3] XML로 표현된 비디오 리스트 </p>
<p>이제 XML로 비디오 리스트 정보를 넘겨줄 수 있으니 전에 만들었던 simplemovie.mxml 파일을 좀 더 개선해 보도록 하겠습니다. 다음 [리스트 7]은 simplemovie.mxml의 업그레이드 된 버전입니다. </p>
<p>[리스트 7] mytube1.mxml
<pre>&lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"layout="absolute" creationComplete="movieXmlData.send()"&gt;

&lt;mx:HTTPService method="get" url="http://localhost:8080/movies.php"id="movieXmlData" result="onGetMovies( event )" /&gt;

&lt;mx:Script&gt;import mx.rpc.events.ResultEvent;import mx.controls.VideoDisplay;import mx.controls.List;import mx.rpc.http.HTTPService;import mx.collections.ArrayCollection;

[Bindable]private var movies : ArrayCollection = new ArrayCollection();

public function onGetMovies( event : ResultEvent ) : void{  var firstMovie : String = event.result.movies.movie[0].source.toString();  videoPlayer.source = firstMovie;

  movies = event.result.movies.movie;  movieList.selectedIndex = 0;}

public function onPrevious() : void{  if ( movieList.selectedIndex == 0 )    movieList.selectedIndex = movies.length - 1;  else    movieList.selectedIndex -= 1;  videoPlayer.source = this.movieList.selectedItem.source.toString();}

public function onPlay() : void{  videoPlayer.source = this.movieList.selectedItem.source.toString();  videoPlayer.play();}

public function onNext() : void{  if ( movieList.selectedIndex &gt;= ( movies.length - 1 ) )    movieList.selectedIndex = 0;  else    movieList.selectedIndex += 1;  videoPlayer.source = this.movieList.selectedItem.source.toString();}

public function onChange() : void{  videoPlayer.source = this.movieList.selectedItem.source.toString();}&lt;/mx:Script&gt;

&lt;mx:HBox width="100%" paddingLeft="10" paddingTop="10" paddingRight="10"&gt;  &lt;mx:VBox&gt;    &lt;mx:VideoDisplay width="400" height="300" id="videoPlayer" complete="onNext()" /&gt;    &lt;mx:HBox width="100%" horizontalAlign="center"&gt;       &lt;mx:Button label="&lt;&lt;" click="onPrevious()" /&gt;       &lt;mx:Button label="Play" click="onPlay()" /&gt;       &lt;mx:Button label="&gt;&gt;" click="onNext()" /&gt;    &lt;/mx:HBox&gt;    &lt;/mx:VBox&gt;    &lt;mx:List width="100%" height="340" id="movieList"      dataProvider="{movies}"      change="onChange()"      labelField="title"&gt;&lt;/mx:List&gt;&lt;/mx:HBox&gt;

&lt;/mx:Application&gt;</pre>
<p>전과 비교해서 크게 바뀐 부분이 있다면 파일의 상단에 있는 액션 스크립트(ActionScript)인데요, 이 코드로<br />
전체적인 인터페이스를 관리하게 됩니다. 이 액션 스크립트가 하는 일은 먼저 onGetMovies 함수에 있는<br />
HTTPService를 이용해서 movies.php 파일로부터 XML 정보를 읽어들이는 것입니다. HTTPService 클래스는<br />
XML 리스트를 찾게 되면 XML 문서 객체모델(Document Object Model)로 변경하게 되고, 우린 이 문서 객체<br />
모델을 이용해서 첫번째 비디오에 대한 정보를 얻어서 재생할 수가 있습니다. 또 onGetMovies 함수는 movies 라는<br />
변수를 이용해서 페이지에 있는 리스트 박스에 비디오의 이름을 출력하게 됩니다. 나머지 액션 스크립트는 유저가 리스트 박스에 있는<br />
비디오를 선택하거나 &#8220;이전&#8221;, &#8220;다음&#8221; 버튼을 선택했을 경우를 처리하기 위한 코드입니다. </p>
<p>위 리스트의 제일<br />
아래를 보면 전체 유저 인터페이스를 구성하는 Flex 오브젝트를 볼 수 있습니다. 여기에 이전 비디오와 다음 비디오를 선택할 수<br />
있는 버튼을 배치하고, 오른쪽에는 현재 비디오 리스트를 출력하는 리스트 박스가 배치되어 있습니다. </p>
<p>이제 Flex Builder를 이용해서 위 프로그램을 컴파일하고 실행시키게 되면 [그림 4]와 같은 화면을 볼 수 있습니다. </p>
<p><img alt="" src="http://image.hanb.co.kr/blog/7609/1183681865@utube_04.png" height="254" width="271"><br />[그림 4] Flex를 이용해서 구성한 첫 번째 인터페이스 </p>
<p>리스트 박스에서 비디오를 선택할 수도 있고, 이전, 다음 버튼을 이용해서 비디오를 선택할 수도 있습니다. 멋있죠? 이제 미리보기 이미지를 제공해 주면 더 멋있어질 것 같네요. </p>
<p><b>Flex를 이용한 인터페이스 구성 파트 2 – 미리보기 이미지</b> </p>
<p>미<br />
리보기 이미지를 비디오 리스트에 출력하려면 리스트 박스를 비디오의 제목과 미리보기 이미지를 같이 출력할 수 있도록 수정해야<br />
합니다. 다행히도 Flex의 기능을 이용하면 아주 쉽게 수정이 가능합니다. 우선 &lt;List&gt; 태그에<br />
itemRenderer를 추가하도록 하고, 다음 [리스트 8]을 보겠습니다. </p>
<p>[리스트 8] mytube2.mxml
<pre>...  &lt;mx:List width="100%" height="340" id="movieList"    dataProvider="{movies}"    change="onChange()"    itemRenderer="MovieItem"&gt;&lt;/mx:List&gt;...</pre>
<p>여기서 MovieItem이라는 item renderer MXML 컴포넌트를 만들었습니다. 이 컴포넌트를 만들려면<br />
메뉴에서 &#8220;New &gt; MXML Component&#8221;를 선택하고 [리스트 9]와 같이 컴포넌트를 코드에 넣으면 됩니다. </p>
<p>[리스트 9] MovieItem.mxml
<pre>&lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" height="80"&gt;  &lt;mx:Image source="{data.thumb}" width="{data.width/3}"     height="{data.height/3}" rotation="5" left="10" top="0" /&gt;   &lt;mx:Label text="{data.title}" fontWeight="bold" top="10" left="100" fontSize="18" /&gt;&lt;/mx:Canvas&gt;</pre>
<p>여기서는 Canvas 라는 컨테이너를 이용했지만, 원한다면 마음에 드는 컨테이너를 선택해서 설정하셔도 괜찮습니다.<br />
그리고 나서 미리보기 이미지 추가를 위해서 &lt;mx:Image&gt; 태그를 사용하고 비디오 제목을 출력하기 위해서<br />
&lt;mx:Label&gt;을 이용하면 됩니다. 좀 더 재밌게 해보기 위해서 미리보기 이미지를 약간 회전시켜 봤습니다. [그림<br />
5]를 보도록 하죠. </p>
<p><img alt="" src="http://image.hanb.co.kr/blog/7609/1183681880@utube_05.png" height="305" width="326"><br />[그림 5] 미리보기 이미지를 추가한 리스트 박스 </p>
<p>꽤 괜찮은 비디오 플레이어가 됐네요. 여기에 추가적으로 비디오 설명, 재생 시간, 링크, 추천 버튼과 같은 기능을 추가하면 더 좋을 것 같습니다. </p>
<p><b>저장소와 대역폭</b> </p>
<p>데<br />
이터베이스를 구성하고 비디오 공유 사이트 페이지를 만들어 내는것 자체는 지금까지 잘 해결했는데, 사실 이것말고 한가지 더<br />
고려해야 할 것이 있습니다. 바로 대역폭을 고려해야 합니다. 플래시 비디오 파일 자체가 인코딩이 잘 된다고 해도 역시 비디오<br />
파일이기 때문에 크기가 큰 편에 속하게 됩니다. 그렇기 때문에 중간에 끊김없이 비디오 재생을 얼마나 할 수 있는지 파악하는 것이<br />
무엇보다 중요하게 됩니다. </p>
<p>확실한 방법중 하나는 인터넷 데이터 센타에서 서비스를 하는 것입니다. 다른 방법으로는<br />
비디오 공유 사이트에서는 비디오 자체에 대한 데이터를 가지지 않고 링크만 저장하고 실제 비디오 데이터는 다른 곳에 저장하는<br />
방법입니다. 아마존의 S3 서비스 같은 경우가 좋은예인데요, 저렴한 가격으로 좋은 저장소로 활용할 수가 있고, 어느정도 사이트가<br />
커질때까지는 안정적으로 활용할 수 있습니다. </p>
<p><b>결론</b> </p>
<p>플래시를 이용한 비디오의 등장과<br />
광대역폭의 보편화로 인해서 이제 적은 예산으로 비디오 공유 사이트를 운영한다는 것이 현실로 다가왔습니다. 바라기는 이 글을<br />
통해서 여러분이 좀 더 멋있는 비디오 공유사이트를 만들어냈으면 하는 것입니다.</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.esll.net/blog/2007/07/flex%ec%99%80-php%eb%a5%bc-%ec%9d%b4%ec%9a%a9%ed%95%9c-mytube-%ea%b5%ac%ed%98%842/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flex와 PHP를 이용한 MyTube 구현(1)</title>
		<link>http://www.esll.net/blog/2007/07/flex%ec%99%80-php%eb%a5%bc-%ec%9d%b4%ec%9a%a9%ed%95%9c-mytube-%ea%b5%ac%ed%98%841/</link>
		<comments>http://www.esll.net/blog/2007/07/flex%ec%99%80-php%eb%a5%bc-%ec%9d%b4%ec%9a%a9%ed%95%9c-mytube-%ea%b5%ac%ed%98%841/#comments</comments>
		<pubDate>Mon, 09 Jul 2007 06:46:25 +0000</pubDate>
		<dc:creator>!엔죠라이프</dc:creator>
				<category><![CDATA[잡동사니]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[MyTube]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.esll.net/blog/2007/07/flex%ec%99%80-php%eb%a5%bc-%ec%9d%b4%ec%9a%a9%ed%95%9c-mytube-%ea%b5%ac%ed%98%841/</guid>
		<description><![CDATA[Flex와 PHP를 이용한 MyTube 구현(1) 등록일: 2007년 07월 05일 조회수: 281 프린트 전체기사목록 제공 : 한빛 네트워크저자 : Jack Herrington역자 : 노재현원문 : Creating MyTube with Flex and PHP 저 렴한 광랜의 등장과 대용량 하드디스크 가격의 하락, 그리고 Adobe 사의 플래시 플레이어(Flash Player), 플래시 비디오(Flash Video)의 등장으로 인터넷을 통한 비디오 공유가 정말 많이 보편화 되었습니다. [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-weight: bold;">Flex와 PHP를 이용한 MyTube 구현(1)</span></p>
<ul id="action-icon">
<li id="regdate">등록일: 2007년 07월 05일</li>
<li id="viewcount">조회수: 281 </li>
<li id="print_16"><a style="" href="http://network.hanb.co.kr/print.php?bi_id=1401">프린트</a> </li>
<li id="list_16"><a style="" href="http://network.hanb.co.kr/list.php">전체기사목록</a> </li>
</ul>
<div class="network-details"><b>제공 :</b> <a style="" href="http://network.hanbitbook.co.kr/">한빛 네트워크</a><br /><b>저자 :</b> Jack Herrington<br /><b>역자 :</b> 노재현<br /><b>원문 :</b> <a style="" href="http://www.onlamp.com/pub/a/php/2007/05/24/creating-mytube-with-flex-and-php.html">Creating MyTube with Flex and PHP</a> </p>
<p>저<br />
렴한 광랜의 등장과 대용량 하드디스크 가격의 하락, 그리고 Adobe 사의 플래시 플레이어(Flash Player), 플래시<br />
비디오(Flash Video)의 등장으로 인터넷을 통한 비디오 공유가 정말 많이 보편화 되었습니다. 구글<br />
비디오(http://video.google.com)와 YouTube(http://www.youtube.com)가 이미 이런<br />
비디오 사업을 시작한지 오래됐지만, 여전히 공략할 수 있는 틈새 시장이 굉장히 많이 있다고 할 수 있는데, 그럼 우리도 한 번<br />
틈새 시장을 공략해 보면 어떨까? PHP, 플래시, Adobe의 Flex를 이용해서 어떻게 하면 비디오 공유 사이트를 만들 수<br />
있을까? 사실 알고보면 정말 쉽게 만들 수 있습니다. </p>
<p>여기서는 PHP를 이용해서 웹 사이트를 만드는 방법 그리고<br />
Flex를 이용해서 Flash로 된 비디오 뷰어를 만드는 방법에 대해서 설명을 하겠습니다. 그럼 먼저 더 진행하기 전에 준비해야<br />
하는 소프트웨어 몇 가지를 살펴보도록 하죠. </p>
<p>우선 서버쪽에서는 PHP와 MySQL이 필요합니다. MySQL은<br />
비디오에 대한 정보(예를 들면, 비디오의 파일 이름, 미리보기 파일, 미리보기 파일의 너비와 높이, 제목, 그리고 기타 정보<br />
등)를 저장하는데 사용되겠습니다. PHP는 전체적인 페이지를 구성하는데 사용되게 됩니다. </p>
<p>그리고<br />
ffmpeg(http://ffmpeg.mplayerhq.hu/) 이라고 하는 유틸리티 프로그램도 필요한데요, 이 프로그램은<br />
유저가 올리는 비디오 파일을 플래시 비디오 파일(FLV)로 변환하는 역할을 수행하게 됩니다. ffmpeg은 비디오의 변환외에도<br />
비디오의 스냅샷을 찍어서 미리보기 파일을 만들어 낼 수도 있습니다. 이 ffmpeg을 이용하게 되면 사실상 어려운 작업을 손쉽게<br />
처리할 수가 있어서 우리가 MyTube를 구현하는데 상당히 유용하게 활용이 됩니다. </p>
<p>클라이언트쪽에서는 두 가지<br />
방법이 있는데요. 하나는 YouTube에서와 같이 HTML과 Flash를 같이 이용해서 인터페이스를 구성하는 방법이 있고, 두<br />
번째로 플래시만으로 인터페이스를 구성하는 방법이 있습니다. 이 글에서는 Flex 프레임워크를 이용해서 비디오를 보고 등록된<br />
비디오를 탐색하고 찾기 위해서 리스트를 생성하도록 할 예정입니다. </p>
<p><b>PHP로 서버쪽 코드 구성하기</b> </p>
<p>서버쪽 코드 작성을 하기에 앞서, MySQL에 데이터 스키마를 생성해야 합니다. 우선 사용할 데이터베이스를 생성하기 위해서, 다음과 같이 mysqladmin 명령어를 사용합니다.
<pre>mysqladmin create movies </pre>
<p>스키마가 생성되었으면 데이터베이스를 로드합니다. 스키마 파일은 아래 [리스트 1]과 같습니다. </p>
<p>[리스트 1] movies.sql
<pre>DROP TABLE IF EXISTS movies; CREATE TABLE movies (     movieId INTEGER NOT NULL AUTO_INCREMENT,     title VARCHAR( 255 ),     source VARCHAR( 255 ),     thumb VARCHAR( 255 ),     width INTEGER,     height INTEGER,     PRIMARY KEY( movieId ) );</pre>
<p>이제 위의 movies.sql 스키마 파일을 다음과 같은 명령어를 이용해서 데이터베이스에 테이블을 생성할 수 있습니다.
<pre>mysql movies &lt; movies.sql </pre>
<p>데이터베이스에 무비 데이터를 넣기 위해서는 HTML을 이용해서 업로드 기능을 만들어야 합니다. 즉 비디오 파일을 받아서 플래시 비디오 파일로 변환하고 미리보기 파일을 만든후에 데이터베이스에 넣으면 되겠습니다. </p>
<p><b>업로드 페이지의 제작</b> </p>
<p>비디오 파일을 업로드 하기 위한 HTML 파일은 다음 [리스트 2]에서 보는 것과 같이 아주 간단합니다. </p>
<p>[리스트 2] addmovie.html
<pre>&lt;html&gt;&lt;body&gt;&lt;form enctype="multipart/form-data" method="post" action="upload.php"&gt;&lt;input type="hidden" name="MAX_FILE_SIZE" value="300000" /&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;Title&lt;/td&gt;&lt;td&gt;&lt;input type="text" name="title"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Movie&lt;/td&gt;&lt;td&gt;&lt;input type="file" name="movie"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;input type="submit" value="Upload" /&gt;&lt;/form&gt;&lt;/body&gt;&lt;/html&gt;</pre>
<p>위 HTML은 입력받은 정보를 upload.php 페이지로 전송하게 되는데, 이 페이지에서 비디오를 변환하고 미리보기를 만들어 내고 데이터베이스에 저장하게 되는 것입니다. 다음의 upload.php 코드를 보도록 하겠습니다. </p>
<p>[리스트 3] upload.php
<pre>&lt;html&gt;&lt;body&gt;&lt;?phprequire "DB.php";

function converttoflv( $in, $out ){  unlink( $out );  $cmd = "ffmpeg -v 0 -i $in -ar 11025 $out 2&gt;&amp;1";  $fh = popen( $cmd, "r" );  while( fgets( $fh ) ) { }  pclose( $fh );}

function getthumbnail( $in, $out ){  unlink( $out );  $cmd = "ffmpeg -i $in -pix_fmt rgb24 -vframes 1 -s 300x200 $out 2&gt;&amp;1";  $fh = popen( $cmd, "r" );  while( fgets( $fh ) ) { }  pclose( $fh );}

function flv_import( $upfile, $fname, $title ){  $fname = preg_replace( '/..*$/', '', basename( $fname ) );  $flvpath = "$fname.flv";  $thumbpath = "$fname.gif";

  converttoflv( $upfile, "movies\$flvpath" );  getthumbnail( $upfile, "movies\$thumbpath" );

  $dsn = 'mysql://root@localhost/movies';  $db =&amp; DB::connect( $dsn );  if ( PEAR::isError( $db ) ) { die($db-&gt;getMessage()); }

  $sth = $db-&gt;prepare( 'INSERT INTO movies VALUES ( 0, ?, ?, ?, ?, ? )' );  $db-&gt;execute( $sth, array( $title, $flvpath, $thumbpath, 300, 200 ) );}

flv_import( $_FILES['movie']['tmp_name'], $_FILES['movie']['name'], $_POST['title'] );?&gt;File sucessfully uploaded&lt;/body&gt;&lt;/html&gt;</pre>
<p>위 코드에서 flv_import 함수를 중점적으로 봐야 합니다. flv_import 함수내에서 converttoflv<br />
함수로 비디오 파일을 플래시 비디오 파일로 변경하고 있고, getthumbnail 함수로 미리보기 파일을 생성하고 있습니다.<br />
그리고 다음으로 업로드가 완료된 무비에 대한 정보를 데이터베이스에 저장합니다. 위 리스트 3에 있는 FLV 플래시 비디오 파일과<br />
미리보기 파일을 생성하는 함수는 ffmpeg 라는 명령어와 여러가지 명령어를 이용해서 변환을 수행하게 됩니다. </p>
<p>그럼 다음 [그림 1]처럼 addmovie.html 페이지를 브라우저로 한 번 보도록 하겠습니다. </p>
<p><img alt="" src="http://image.hanb.co.kr/blog/7609/1183596745@utube_01.png" height="213" width="361"><br />[그림 1] 비디오를 업로드하는 페이지 </p>
<p>여기서 비디오 파일을 지정하고 Upload 버튼을 눌러서 비디오 파일을 처리하기 위해 서버에 보낼 수가 있습니다. </p>
<p>사<br />
실 upload.php 파일은 아주 기본적인 부분만 작성이 되어 있기때문에, 실제 서비스 용도로 사용하기 위해서는 에러 체크<br />
루틴을 추가 적으로 작성해야 합니다. 그리고 그것보다도 더 큰 문제는 크기가 큰 비디오 파일을 업로드 하려고 할 때인데, 이런<br />
경우에는 파일의 크기가 크기 때문에 비디오 변환 과정이 오래 걸리게 되고 유저의 대기시간이 상당히 길어지면서 더 큰 문제가<br />
됩니다. </p>
<p>그럼 이런 문제를 해결하기 위한 방법은 뭐가 있을까요? 한 가지 방법으로 큰 크기의 비디오 파일이<br />
업로드가 되면(10초 이상의 비디오 파일) 유저에게는 잠시 후에 비디오가 게시될 것이라고 말을 해 놓고 서버내의 다른 폴더에<br />
비디오 파일을 저장한 후에 또 다른 스크립트를 이용해서 비디오를 변환하는 것입니다. </p>
<p>더 진행하기 전에 왜 꼭<br />
플래시 비디오 파일로 변환을 해야 하는지에 대해서 생각을 해보도록 합시다. 그냥 원본 그대로 저장해도 되는데 왜 플래시 비디오로<br />
변환을 하려고 하는 걸까요? 그건 원본 상태로 저장을 해 놓게 되면 각 비디오 파일의 타입 별로 비디오 플레이어를 찾아서 수행할<br />
수 있는 코드를 작성을 해야만 하기 때문에, 굉장히 힘든 일이 될 것이라고 생각합니다. </p>
<p>이 과정을 플래시 파일로 변환하여 해결하게 되면 코드도 간단해지고 많은 OS에서 실행될 수 있도록 할 수도 있습니다. </p>
<p>그럼 이제 HTML과 플래시를 이용해서 유투브와 같은 입력양식을 간단하게 만들어 보겠습니다. </p>
<p><b>HTML과 플래시를 이용한 인터페이스 구성</b> </p>
<p>입<br />
력받은 URL을 가지고 플래시 비디오 파일을 재생하는 프로그램을 만들기 위해서는 Adobe Flex Builder 2를 이용해서<br />
새로운 프로젝트를 만들어야 합니다. 새로운 프로젝트를 생성했다면 simplemovie.mxml 이라는 Flex 애플리케이션을<br />
만들어야 합니다. 이 애플리케이션 파일의 내용은 다음 [리스트 4]와 같습니다. </p>
<p>[리스트 4] simplemovie.mxml
<pre>&lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"&gt;&lt;mx:VBox backgroundColor="white" width="400" height="335"&gt;  &lt;mx:VideoDisplay width="400" height="300" id="videoPlayer"    source="{Application.application.parameters.movie}" /&gt;  &lt;mx:HBox width="100%" horizontalAlign="center"&gt;    &lt;mx:Button label="Play" click="videoPlayer.play()" /&gt;  &lt;/mx:HBox&gt;&lt;/mx:VBox&gt;&lt;/mx:Application&gt;</pre>
<p>위 [리스트 4]에서 두가지 중요한 요소를 볼 수 있습니다 : VideoDisplay 요소는 비디오를 재생하는 역할을<br />
하고 &#8220;Play&#8221;라는 이름을 가진 버튼은 비디오의 재생이 끝난 후에 유저가 클릭할 경우 비디오를 다시 재생하는 역할을 하게<br />
됩니다. </p>
<p>VideoDisplay 요소는 &#8220;source&#8221;라는 속성을 가지게 되는데요, source 속성으로<br />
재생해야 하는 플래시 비디오 파일의 URL을 지정하게 됩니다. 위 리스트에서 source 속성이 가지고 있는 값은 HTML<br />
파일에 있는 &lt;object&gt;나 &lt;embed&gt; 태그에 있는 FlashVars 속성의 값이 되게 됩니다. </p>
<p>Flex<br />
Builder를 이용하게 되면 위 [리스트 4]의 simplemovie.mxml 프로그램을 simplemovie.swf 파일로<br />
변환할 수가 있고, 변환된 swf 파일을 bin 디렉토리에서 PHP가 있는 곳의 디렉토리로 이동시켜야 합니다. 그리고 PHP<br />
페이지를 하나 만들어서 비디오를 재생시킬 수가 있습니다. 다음 [리스트 5]를 보도록 하죠. </p>
<p>[리스트 5] simpletest.php
<pre>&lt;?phprequire "DB.php";

$moviebase = 'http://localhost:8080/movies/';

$dsn = 'mysql://root@localhost/movies';$db =&amp; DB::connect( $dsn );if ( PEAR::isError( $db ) ) { die($db-&gt;getMessage()); }

$source = null;$movieId = 1;if ( array_key_exists( 'movie', $_GET ) )  $movieId = $_GET['movie'];

$movies = array();$res = $db-&gt;query( 'SELECT movieId, source, title FROM movies' );while( $row = $res-&gt;fetchrow( ) ) {  $movies []= $row;  if ( $row[0] == $movieId )    $source = $row[1];}

if ( $source == null )    $source = $movies[0][1];?&gt;&lt;html&gt;&lt;body&gt;&lt;table&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="400"   height="335"  codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab"&gt;&lt;param name="movie" value="simplemovie.swf" /&gt;&lt;param name="quality" value="high" /&gt;&lt;param name="flashVars" value="movie=&lt;?php echo( $moviebase.$source ) ?&gt;"&gt;&lt;embed src="simplemovie.swf" quality="high"  width="400" height="335" play="true"  loop="false"  quality="high"  flashVars="movie=&lt;?php echo( $moviebase.$source ) ?&gt;"  type="application/x-shockwave-flash"  pluginspage="http://www.adobe.com/go/getflashplayer"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;?phpforeach( $movies as $movie ) {?&gt;&lt;a href="simptest.php?movie=&lt;?php echo( $movie[0] )?&gt;"&gt;&lt;?php echo( $movie[2] )?&gt;&lt;/a&gt;&lt;br/&gt;&lt;?php}?&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;</pre>
<p>위 PHP 스크립트는 우선 데이터베이스에 접속한 후에 비디오 리스트를 받아오고 있습니다. 그리고 나서 URL을 통해서<br />
넘어온 ID와 읽어온 비디오 리스트를 비교해서 동일한 ID를 가진 비디오가 있는지를 확인하게 됩니다. 동일한 ID를 찾을 경우<br />
이 ID 값을 simplemovie.swf 파일로 넘기기 위해서 flashVars 속성에 지정하고 있습니다. </p>
<p>PHP<br />
스크립트 다음 부분에서는 HTML 태그가 시작되고 simplemovie.swf 파일을 페이지에 표시하기 위한 태그인<br />
&lt;object&gt;, &lt;embed&gt; 태그를 사용하고 있습니다. 물론 여기에 재생해야 하는 비디오에 대한<br />
URL도 지정해 주고 있는 걸 볼 수 있습니다. 그리고 바로 아래에 현재 비디오외에 볼 수 있는 비디오에 대한 링크를 만들어<br />
주고 있는 걸 볼 수 있습니다. </p>
<p>이제 웹 브라우저에서 [리스트 5]에 있는 페이지를 한 번 보도록 하겠습니다. 다음 [그림 2]와 같이 나오네요. </p>
<p><img alt="" src="http://image.hanb.co.kr/blog/7609/1183600791@utube_02.png" height="254" width="271"><br />[그림 2] 간단한 비디오 플레이어와 함께 볼 수 있는 비디오에 대한 리스트가 출력되었다. </p>
<p>웹 브라우저를 열자마자 첫번째 비디오가 재생이 되게 되고, 오른쪽에 있는 비디오 리스트중에서 하나를 선택하면 페이지가 다시 로딩되면서 선택된 비디오가 재생되게 됩니다. </p>
<p>정말 간단하죠? Flex 파일 하나와 PHP 파일 하나, 그리고 데이터베이스만 가지고 위와 같이 비디오 공유 사이트를 만들었습니다. </p>
<p>이제 그럼 Flex를 조금 더 이용해서 유저 편의성을 향성시켜 보도록 하겠습니다. </p>
<hr />
역자 노재현님은 어렸을 때부터 컴퓨터를 접하게 된 덕에 프로그래밍을 오랫동안 정겹게 하고 있는 프로그래머 입니다. 특히나 게임<br />
및 OS 개발에 관심이 많으며, 심심할 때면 뭔가 새로운 프로그램을 만들어내는 것을 좋아합니다. 다음에서 웹 관련 개발을 한<br />
후에 현재는 <a style="" href="http://www.osguru.net/" target="_balnk">www.osguru.net</a>이라는 OS관련 웹사이트를 운영하며 넥슨에서 게임 개발을 하고 있습니다.<br />* e-mail: <a href="mailto:wonbear@gmail.com" target="_blank">wonbear@gmail.com</a><br />* homepage: <a href="http://www.osguru.net/" target="_blank">http://www.oguru.net</a> </div>
]]></content:encoded>
			<wfw:commentRss>http://www.esll.net/blog/2007/07/flex%ec%99%80-php%eb%a5%bc-%ec%9d%b4%ec%9a%a9%ed%95%9c-mytube-%ea%b5%ac%ed%98%841/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

