jQuery Webcam Plugin jscam.swf文件反編譯工具使用說明


jQuery webcam plugin是一個在ie,firefox,chrome下都可以用的攝像頭攝像及拍照用的插件。

 

http://www.xarg.org/project/jquery-webcam-plugin/

在官方下載的源代碼中提供的jscam.js生成的圖片是320x240的圖,用高清攝橡頭時發揮不了它的價值,在一些業務需求下,如用攝像頭拍證件照等,需要更高分辯率的圖,所有我用官方提供的源碼as及xml文件,用swfmill + mtasc重新編譯生成自定義寬度和高度(如:800x800)的jscam.swf文件,以便充分利用高清攝像頭資源。

 官方提供的Makefile文件中主要包含兩部份代碼,在windows下使用時可拆解成:

swfmill simple src/jscam.xml jscam.swf

mtasc -v -swf jscam.swf -main jscam.as -version 8 -cp src

以上文字來源於《jQuery webcam plugin jscam.swf文件編譯,自定義視頻及圖片分辯率》:

http://blog.sina.com.cn/s/blog_5f66526e0102vliw.html

正是基於該篇文章的指引,筆者進行了多次的嘗試和摸索,終於成功實現了反編譯,在此深表感謝!!

但用命令行的方式進行編譯,由於步驟比較多,過程比較繁瑣,所以很容易出現錯誤。

一、【命令行式反編譯】具體步驟如下:

Microsoft Windows [版本 10.0.14393]
(c) 2016 Microsoft Corporation。保留所有權利。
注:筆者的編譯環境在c:\swf
c:\>cd /d c:\swf 
第一步:利用jscam.xml為基礎,生成空白的jscam.swf 
c:\swf>swfmill simple src/jscam.xml out/jscam.swf 
第二步:反編譯空白的jscam.swf文件,生成jscam-source.xml 
c:\swf>swfmill swf2xml out/jscam.swf src/jscam-source.xml
第三步:打開src文件夾下的jscam-source.xml,修改<DefineSprite objectID="2" frames="1">為<DefineSprite objectID="1" frames="1">【注意:一共有2處需要修改】
第四步:利用jscam-source.xml,重新生成jscam.swf
c:\swf>swfmill xml2swf src/jscam-source.xml jscam.swf
第五步:打開src文件夾下的jscam.as,修改寬高度為你需要的大小
【當前寬度:800】for (var i = 0; i < 800; ++i) {
【當前高度:800】for (var j = 0; j < 800; ++j) {
第六步:利用mtasc把jscam.as代碼添加進jscam.swf文件中即可生成最終的jscam.swf文件。
【注意】這一步時,src文件夾里應該包含有jscam.as、BitString.as和JPGEncoder.as等3個文件,否則編譯不過去
c:\swf>mtasc -v -swf jscam.swf -main jscam.as -version 8 -cp src 
以下是 編譯過程的提示信息 
Classpath : c:\swf/std8/;c:\swf/std/;src/;c:\swf/src/;c:\swf/;;/
Parsed c:\swf/std/StdPresent.as
Parsed c:\swf/std/Object.as
Parsed c:\swf/std/Boolean.as
Parsed c:\swf/std/String.as
Parsed c:\swf/std/Number.as
Parsed c:\swf/std/Array.as
Parsed c:\swf/std/Function.as
Parsed src/jscam.as
Parsed c:\swf/std/Camera.as
Parsed c:\swf/std8/flash/display/BitmapData.as
Parsed c:\swf/std8/flash/geom/Rectangle.as
Parsed c:\swf/std8/flash/geom/Point.as
Parsed c:\swf/std8/flash/filters/BitmapFilter.as
Parsed c:\swf/std8/flash/geom/Matrix.as
Parsed c:\swf/std8/flash/geom/ColorTransform.as
Typing JSCam.main
Parsed c:\swf/std/TopLevel.as
Parsed c:\swf/std8/MovieClip.as
Parsed c:\swf/std/ContextMenu.as
Parsed c:\swf/std8/TextField.as
Parsed c:\swf/std/TextField/StyleSheet.as
Parsed c:\swf/std8/TextFormat.as
Parsed c:\swf/std/TextSnapshot.as
Parsed c:\swf/std8/flash/geom/Transform.as
Parsed c:\swf/std/FunctionArguments.as
Parsed c:\swf/std8/System/security.as
Parsed c:\swf/std8/flash/external/ExternalInterface.as
Parsed c:\swf/std8/Stage.as
Typing JSCam.pauseCamera
Typing JSCam.resumeCamera
Typing JSCam.capture
Typing JSCam._capture
Typing JSCam.getCameraList
Typing JSCam.setCamera
Typing JSCam.save
Parsed src/JPGEncoder.as
Parsed src/BitString.as
Parsed c:\swf/std/XML.as
Parsed c:\swf/std8/XMLNode.as
Typing JSCam._stream
Typing JPGEncoder.initQuantTables
Parsed c:\swf/std/Math.as
Typing JPGEncoder.computeHuffmanTbl
Typing JPGEncoder.initHuffmanTbl
Typing JPGEncoder.initCategoryNumber
Typing JPGEncoder.writeBits
Typing JPGEncoder.writeByte
Typing JPGEncoder.writeWord
Typing JPGEncoder.fDCTQuant
Typing JPGEncoder.writeAPP0
Typing JPGEncoder.writeSOF0
Typing JPGEncoder.writeDQT
Typing JPGEncoder.writeDHT
Typing JPGEncoder.writeSOS
Typing JPGEncoder.processDU
Typing JPGEncoder.RGB2YUV
Typing JPGEncoder.JPGEncoder
Typing JPGEncoder.encode
Time spent : 0.028

  

二、【命令行式反編譯】簡化步驟

為了能更好的進行反編譯,筆者進行了長時間的研究發現,以上步驟中有些步驟可以省略,即:我們可以直接從第四步開始反編譯。不過有個前提是,要有已經修改好的《jscam-source.xml》文件:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 
 3 <swf version="7" compressed="1">
 4 
 5   <Header framerate="24" frames="1">
 6 
 7     <size>
 8 
 9       <Rectangle left="0" right="16000" top="0" bottom="16000"/>
10 
11     </size>
12 
13     <tags>
14 
15       <SetBackgroundColor>
16 
17         <color>
18 
19           <Color red="255" green="255" blue="255"/>
20 
21         </color>
22 
23       </SetBackgroundColor>
24 
25       <DefineVideoStream objectID="1" frames="0" width="800" height="800" deblocking="0" smoothing="0" codec="0"/>
26 
27       <DefineSprite objectID="1" frames="1">
28 
29         <tags>
30 
31           <End/>
32 
33         </tags>
34 
35       </DefineSprite>
36 
37       <Export>
38 
39         <symbols>
40 
41           <Symbol objectID="1" name="clip"/>
42 
43         </symbols>
44 
45       </Export>
46 
47       <ShowFrame/>
48 
49       <End/>
50 
51     </tags>
52 
53   </Header>
54 
55 </swf>

 

上面的jscam-source.xml是寬高均為800像素的Flash配置,一共有4出改動,2紅2綠,關系是紅色的寬高剛好是綠色20倍!只要按這個要求配置,即可在第五步中生成寬高均為800像素的Flash,因為其中不含腳本,所以要進一步利用mtasc把jscam.as等3個文件的as代碼添加進jscam.swf文件中,即可生成最終的jscam.swf文件。

需要注意的是:一定要將jscam.as、BitString.as、JPGEncoder.as等3個as文件要保存到新建的src文件夾里,因為mtasc在編譯時,需要將src中的as文件引用到swf文件中。

三、【利用特制工具反編譯】

為了更好更快的反編譯jscam.swf文件,筆者花了2天的時間,設計和制作了這款工具,我們只需要輸入寬度和高度,就可以一鍵生成新的jscam.swf文件。

 

軟件截圖

該工具依然依賴swfmill和mtasc兩款開源工具,需要包含在軟件根目錄下。

 

軟件的根目錄結構

【特別說明】

Word版使用說明下載:http://download.csdn.net/download/nwnuchem/9778883

目前軟件還在測試階段,有jscam.swf定制需要的朋友,可以與我聯系,免費提供自定義寬高的jscam.swf文件。

=====================================

【測試Demo】

Demo網址:http://www.jsiis.com/iCam/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM