WEB Flex : 画像から FLV を使ってスライドショーを作成する / SimpleFlvWriter


  ダウンロード


ブラウザでダウンロード

FLV 作成部分に SimpleFlvWriter.as を使用しています

SimpleFlvWriter.as は
Lee Felarca さんによって作られたものです
以下は彼のサイトの URL です
http://www.zeropointnine.com/blog



関連する記事

WEB Flex : 4コマ動画作成ツール( 自分で描いたものを FLV 化する ) / SimpleFlvWriter




  ソースコード




Loader クラスは、画像データに特化したクラスです。表示する為には、Loader のインスタンスをそのまま Flex
のコントロール等に addChild しますが、BitmapData が必要な場合のサンプルでもあります

n 毎の画像をひとつづつロードして FLV のバッファへ書き込んでいきます。

Flash では非同期に処理が進んでいくので、通常のループ処理の代わりにグローバルに参照可能な
カウンタを使って制御します。これはその典型的な処理です。

リモートに PHP で保存した後、ローカルの PC の ディスク上に保存する事も可能です
( FileReference クラス )

  

<?xml version="1.0" encoding="utf-8"?>
<mx:Application
	xmlns:mx="http://www.adobe.com/2006/mxml"
	initialize="initData();"
	applicationComplete="initApplication()"
>

<mx:Style source="Style.css" />

<mx:Script>
<![CDATA[

	import mx.controls.*;
	import mx.events.*; 
	import mx.formatters.*;
	import flash.external.*;

	private var img:Array;
	private var counter:int = 0;
	private	var myImageLoader:Loader;
	private var myWriter:SimpleFlvWriter;
	// アップロード用
	private var post:URLLoader;
	// ローカル保存用
	private var fRef:FileReference;

	// *********************************************************
	// ログ表示
	// *********************************************************
	public function firebug(data:Object):void {
	
		var fmt:DateFormatter = new DateFormatter();
	
		fmt.formatString = "YYYY/MM/DD HH:NN:SS";
		var logdt:String = fmt.format( new Date );
	
		ExternalInterface.call(
			"console.log", logdt,
			data+""
		);
	
	}

	// *********************************************************
	// アプリケーションの初期化
	// *********************************************************
	public function initData():void {

		// 別ドメインの JavaScript からの呼び出しを許可する
		Security.allowDomain("*");

		// パラメータをプロパティとして持つ Object を取得
		var param:Object = mx.core.Application.application.parameters;

	}

	// *********************************************************
	// アプリケーションの初期化( 画面関係の初期化終了後 )
	// *********************************************************
	public function initApplication():void {


	}


	// *********************************************************
	// FLV 作成開始
	// *********************************************************
	public function createFlv():void {

		firebug("処理開始");

		img = new Array();
		img.push( "image/001.jpg" );
		img.push( "image/002.jpg" );
		img.push( "image/003.jpg" );

		// アップロード用のインスタンス
		post = new URLLoader();

		// FLV 作成用
		myWriter = SimpleFlvWriter.getInstance();
		// 新規
		myWriter.fs = new ByteArray();
		// 1秒間に1フレーム
		myWriter.createFile(650, 490, 0.1);	// 10秒間に1フレーム

		// ローダを作成してイベント登録して、最初の呼び出し
		myImageLoader = new Loader();
		myImageLoader.contentLoaderInfo.addEventListener(
			Event.COMPLETE,loadImageAction);
		loadImage();	// 2回目以降は、イベント内から呼び出される


		// ローカル保存用インスタンス
		fRef = new FileReference();
		fRef.addEventListener(Event.OPEN, 
			function(e:Event):void {} );
		fRef.addEventListener(ProgressEvent.PROGRESS, 
			function(e:ProgressEvent):void {} );
		fRef.addEventListener(Event.COMPLETE, function(e:Event):void {
			firebug( "COMPLETE" );
		} );
		fRef.addEventListener(Event.CANCEL,
			function(e:Event):void {} );
		fRef.addEventListener(Event.SELECT, 
			function(e:Event):void {
			firebug( "保存します" );
		} );
		fRef.addEventListener(IOErrorEvent.IO_ERROR, fRefError );

	}
	// *********************************************************
	// IOエラー
	// *********************************************************
	public function fRefError( e:IOErrorEvent ):void {

		Alert.show(e.text);

	}

	// *********************************************************
	// PC のローカル保存( イベント内からは実行できない )
	// *********************************************************
	public function fRefSave():void {

		try {
			fRef.save( myWriter.fs, "images.flv" );
		}
		catch( e:Error ) {
			firebug( e );
		}

	}

	// *********************************************************
	// ロード開始の指令関数
	// *********************************************************
	public function loadImage():void {

		// URL を設定してロード開始
		var request:URLRequest = new URLRequest( img[counter] );
		myImageLoader.load(request);

	}

	// *********************************************************
	// 一つの画像の読み込み完了
	// *********************************************************
	public function loadImageAction(e:Event):void {

		myWriter.saveFrame( e.target.content.bitmapData );

		// 次のロードの為にカウンタをインクリメント
		counter++;
		if ( counter == 3 ) {
			// 全てロード完了
			firebug("completed")
			// 全て完了しているので、終了処理
			myWriter.closeFile()

			var req:URLRequest = new URLRequest("./writeflv.php");
			// PHP に送る FLV データをセット
			req.data = myWriter.fs;
			req.method = URLRequestMethod.POST;
			post.load(req);

			saveLocalFlv.enabled = true;

		}
		else {
			firebug("next")
			// 次の画像を読み込む
			loadImage();
		}
	}



]]>
</mx:Script>

	<mx:VBox width="100%">
		<mx:Button
			id="startCreateFlv"
			label="処理開始"
			click="createFlv();"
			width="130"
		/>
		<mx:Button
			id="saveLocalFlv"
			label="PC保存"
			click="fRefSave();"
			width="130"
			enabled="false"
		/>
	</mx:VBox>

</mx:Application>
  

  PHP

  

<?
session_start();
$id = session_id();


$fp = fopen( "php://input", "rb" );
$wfp = fopen( "$id.flv", "wb" );

while( $ret = fread( $fp, 4096 ) ) {

	fwrite( $wfp, $ret );

}

fclose($wfp);
fclose($fp);


print $id . ".flv\n";
?>
  


関連する記事

PHP : PATH_SEPARATOR と DIRECTORY_SEPARATOR と 一定時間前のファイルの削除







yahoo  google  MSDN  MSDN(us)  WinFAQ  Win Howto  tohoho  ie_DHTML  vector  wdic  辞書  天気 


[flex3]
CCBot/2.0 (https://commoncrawl.org/faq/)
25/05/25 10:24:35
InfoBoard Version 1.00 : Language=Perl

1 BatchHelper COMprog CommonSpec Cprog CprogBase CprogSAMPLE CprogSTD CprogSTD2 CprogWinsock Cygwin GameScript HTML HTMLcss InstallShield InstallShieldFunc JScript JScriptSAMPLE Jsfuncs LLINK OldProg OracleGold OracleSilver PRO PRObrowser PROc PROconePOINT PROcontrol PROftpclient PROjscript PROmailer PROperl PROperlCHAT PROphp PROphpLesson PROphpLesson2 PROphpLesson3 PROphpfunction PROphpfunctionArray PROphpfunctionMisc PROphpfunctionString PROsql PROvb PROvbFunction PROvbString PROvbdbmtn PROvbonepoint PROwebapp PROwin1POINT PROwinSYSTEM PROwinYOROZU PROwindows ProjectBoard RealPHP ScriptAPP ScriptMaster VBRealtime Vsfuncs a1root access accreq adsi ajax amazon argus asp aspSample aspVarious aspdotnet aw2kinst cappvariety centura ckeyword classStyle cmaterial cmbin cmdbapp cmenum cmlang cmlistbox cmstd cmstdseed cmtxt cs daz3d db dbCommon dbaccess dnettool dos download flex2 flex3 flex4 framemtn framereq freeWorld freesoft gimp ginpro giodownload google hdml home hta htmlDom ie9svg install java javaSwing javascript jetsql jquery jsp jspTest jspVarious lightbox listasp listmsapi listmsie listmsiis listmsnt listmspatch listmsscript listmsvb listmsvc memo ms msde mysql netbeans oraPlsql oracle oracleWiper oraclehelper orafunc other panoramio pear perl personal pgdojo pgdojo_cal pgdojo_holiday pgdojo_idx pgdojo_ref pgdojo_req php phpVarious phpguide plsql postgres ps r205 realC realwebapp regex rgaki ruby rule sboard sc scprint scquest sdb sdbquest seesaa setup sh_Imagick sh_canvas sh_dotnet sh_google sh_tool sh_web shadowbox shgm shjquery shvbs shweb sjscript skadai skywalker smalltech sperl sqlq src systemdoc tcpip tegaki three toolbox twitter typeface usb useXML vb vbdb vbsfunc vbsguide vbsrc vpc wcsignup webanymind webappgen webclass webparts webtool webwsh win8 winofsql wmi work wp youtube