jscam.jsのソースコード「SWFの初期化」
説明
「crocro.jscam」は、クロノス・クラウンの柳井政和が開発しているJavaScirptのライブラリです。「crocro.jscam」を使うと、JavaScriptからWebカメラを扱うことができます。また、簡単な図形認識などを行えます。
このページでは、この「crocro.jscam」のコアになる「jscam.js」(ver 1.1.0)のソースコードのうち、「SWFの初期化」に相当する部分を掲載します。
ソースコード
以下、ソースコードです。
/* jscam <http://crocro.com/html5/jscam/wiki.cgi> is released under the MIT License <http://www.opensource.org/licenses/mit-license.php> in a Japanese translation <http://sourceforge.jp/projects/opensource/wiki/licenses%2FMIT_license> Copyright (c) 2012 Masakazu Yanai / (c) 2012 Cronus Crown <webmaster@crocro.com> */ //== パッケージの初期化 if (typeof crocro == "undefined") var crocro = function() {}; if (typeof crocro.jscam == "undefined") crocro.jscam = function() {}; //== ====================================== /** * @variable crocro.jscam.information * @title 基本情報 * @description * * 「jscam」の基本情報が入ったオブジェクトです。 * * 各情報は「crocro.jscam.information.version」のようにして取得できます。 * * <div>name - ライブラリ名。</div> * <div>descriptionJa - 説明(日本語)。</div> * <div>descriptionEn - 説明(英語)。</div> * <div>version - バージョンのフル表記。「1.0.0」など。</div> * <div>versionMajor - メジャーバージョンのみの数字。「1」など。</div> * <div>author - 作者名。</div> * <div>publisher - 配布元。</div> * <div>lastModified - 最終更新日。</div> * <div>url - 配布元のWebサイト。</div> * <div>urlDownload - 配布元のダウンロード・サイト。</div> * <div>copyright - 著作権表示。</div> * * @param arg パラメータをオブジェクトで指定します。空の場合は無視されます。 */ //== 基本情報 crocro.jscam.information = { name: "crocro.jscam" ,descriptionJa: "JavaScriptでWebカメラの画像を取得するライブラリ" ,descriptionEn: "The library which operates a Web camera by JavaScript." ,version: "1.1.0" ,versionMajor: "1" ,author: "Masakazu Yanai" ,publisher: "Cronus Crown" ,lastModified: "2012/01/25" ,url: "http://crocro.com/" ,urlDownload: "http://crocro.com/html5/jscam/wiki.cgi" ,copyright: "(c) 2012 Masakazu Yanai / (c) 2012 Cronus Crown" }; //== ====================================== /** * @variable crocro.jscam.write(arg) * @title jscamのswfを書き出し * @description * * bodyタグ内で使います。この場所にjscamのオブジェクトを書き出します。 * * argは「{fps: 8, dir: "./js/"}」のようにオブジェクトで指定します。 * argに指定可能な値は以下の通りです。 * * <div>fps - fps。</div> * <div>dir - jscam.swfの置いてあるディレクトリ。</div> * <div>w - 横幅。</div> * <div>h - 高さ。</div> * * @param arg パラメータをオブジェクトで指定します。空の場合は無視されます。 */ /** * @variable crocro.jscam.option * @title jscamの設定 * @description * * writeで作成されたjscamの設定が格納されたオブジェクトです。 * * 「crocro.jscam.option.w」のようにして、値を取得できます。 * 利用できる設定は以下の通りです。 * * <div>fps - fps。</div> * <div>dir - jscam.swfの置いてあるディレクトリ。</div> * <div>w - 横幅。</div> * <div>h - 高さ。</div> * * @param arg パラメータをオブジェクトで指定します。空の場合は無視されます。 */ //== Flash初期化用 crocro.jscam.option = {}; crocro.jscam.write = function(arg) { // 設定 if (! arg) arg = {}; var opt = {}; var defaults = { fps: 8 ,dir: "" ,w: 320 ,h: 240 }; var flVarsArr = []; for (var key in defaults) { opt[key] = defaults[key]; if (key in arg) opt[key] = arg[key]; flVarsArr.push(key + "=" + opt[key]); } crocro.jscam.option = opt; var flVars = flVarsArr.join("&"); // HTML出力 var flArr = []; flArr.push('<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" \ codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" \ width="' + opt.w + '" height="' + opt.h + '" id="externalSwfCam" align="middle">'); flArr.push('<param name="allowScriptAccess" value="always" />'); flArr.push('<param name="allowFullScreen" value="false" />'); flArr.push('<param name="movie" value="' + opt.dir + 'jscam.swf" />'); flArr.push('<param name="quality" value="high" />'); flArr.push('<param name="bgcolor" value="#cccccc" />'); flArr.push('<param name="FlashVars" value="' + flVars + '" />'); // ↑↓scrW=?&scrH=?&fps=? が設定可能 flArr.push('<embed src="' + opt.dir + 'jscam.swf" FlashVars="' + flVars + '"'); flArr.push('quality="high" bgcolor="#ffffff" \ width="' + opt.w + '" height="' + opt.h + '" align="middle" \ name="externalSwfCam" allowScriptAccess="always" allowFullScreen="false" \ type="application/x-shockwave-flash" \ pluginspage="http://www.macromedia.com/go/getflashplayer" />'); flArr.push('</object>'); document.writeln(flArr.join("\n")); }; //== SWFのブラウザ対応呼び出し crocro.jscam.getSwf = function(str) { if (navigator.appName.indexOf("Microsoft") >= 0 && new String(document[str]).indexOf("ObjectElement") < 0) return window[str]; // IE8以下 return document[str]; // IE以外、IE9以上 }; /** * @variable crocro.jscam.initSwfCam() * @title カメラ初期化 * @description * * Flashのカメラ取得用オブジェクトを初期化します。 */ //== SwfCamの初期化 crocro.jscam.swfCam = null; crocro.jscam.initSwfCam = function() { var swfCam = crocro.jscam.getSwf("externalSwfCam"); swfCam.enable = true; // キャンバスが使えるか確認 if (! window.HTMLCanvasElement) { swfCam.enable = false; // キャプチャ不可 alert("Don't use this browser."); } crocro.jscam.swfCam = swfCam; // 外部から参照利用可能に }; /** * @variable crocro.jscam.ready(fnc) * @title カメラ開始時のコールバック * @description * * カメラが開始した時にコールバック実行したいfunctionオブジェクトを指定します。 * * @param fnc コールバック実行させるfunctionオブジェクト。 */ //== SwfCamの準備完了コールバック crocro.jscam.callbackReady = null; crocro.jscam.ready = function(fnc) { if (typeof fnc == "function") crocro.jscam.callbackReady = fnc; }; crocro.jscam.readyFromSwf = function(prm) { if (crocro.jscam.callbackReady) { setTimeout(function() { crocro.jscam.callbackReady(prm) }, 10); } }