• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            兔子的技術(shù)博客

            兔子

               :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
              202 Posts :: 0 Stories :: 43 Comments :: 0 Trackbacks

            留言簿(10)

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            想要實(shí)現(xiàn)用PHP來(lái)得到swf文件幀數(shù)的功能,一些網(wǎng)友回復(fù)說(shuō)不可能,其實(shí)是他們對(duì)swf文件格式不了解,swf文件格式規(guī)范是開(kāi)放的,而 且也可以找到相當(dāng)多的關(guān)于直接用PHP處理swf文件的,包括解析文件頭,生成swf文件等。利用閑暇時(shí)間,我也寫(xiě)了一個(gè)粗陋的解析swf文件的類(lèi)。
            要想解析swf文件頭,首先要弄清楚的當(dāng)然是swf文件格式規(guī)范。規(guī)范中對(duì)swf文件格式作了詳細(xì)的說(shuō)明。關(guān)于swf文件頭,它是由以下幾個(gè)部分組成:
            +-------+---+--------+--------+---+----+
            |文件標(biāo)識(shí)|版本|文件大小|RECT字段|幀頻|幀數(shù)|
            +-------+---+--------+--------+---+----+
            其中“文件標(biāo)識(shí)”為3個(gè)字節(jié),包括文件壓縮標(biāo)志。這3個(gè)字節(jié)的內(nèi)容為“FWS”或“CWS”,以‘C’開(kāi)頭的表示swf文件是采用的壓縮輸出(從RECT字段開(kāi)始至文件結(jié)尾,采用Zlib標(biāo)準(zhǔn)進(jìn)行文件壓縮)。
            “版本”為一個(gè)字節(jié),存儲(chǔ)8位字長(zhǎng)的無(wú)符號(hào)整數(shù),將swf文件的導(dǎo)出版本以16進(jìn)制方式存儲(chǔ)在該字節(jié),如導(dǎo)出版本為7,則該字節(jié)存儲(chǔ)值為0x07,而不是‘7’對(duì)應(yīng)的ASCII值(0x37)。
            “文件大小”存儲(chǔ)占用4個(gè)字節(jié),為32位無(wú)符號(hào)整數(shù),將未壓縮的swf文件大小以16進(jìn)制形式存入該4個(gè)字段,值得注意的是,swf文件存儲(chǔ)是按照 little-endian,即低字節(jié)在前的“小尾”方式存儲(chǔ)的,解析時(shí),需要注意字節(jié)序。如一個(gè)swf文件大小為471字節(jié),則該4個(gè)字節(jié),由低位到高 位,存儲(chǔ)的內(nèi)容將是0xd7,0x01,0x00,0x00。
            “幀頻”占用兩個(gè)字節(jié),表示每秒播放的幀數(shù),存儲(chǔ)方式是8.8共16位的定點(diǎn)數(shù),整數(shù)部分在高位(即第二個(gè)字節(jié)),小數(shù)部分在低位(第一個(gè)字節(jié)),并按字 節(jié)對(duì)齊。如小數(shù)7.5表示為16進(jìn)制是0x07.80,按照低位在前,高位在后表示,這16位將存儲(chǔ)為如下的2進(jìn)制代碼10000000 00000111。
            “幀數(shù)”占用兩個(gè)字節(jié),為16位無(wú)符號(hào)整數(shù),表示swf文件的總幀數(shù)。存儲(chǔ)方式類(lèi)似于“文件大小”存儲(chǔ)方式。
            難理解的是RECT字段,該字段采用swf文件格式規(guī)范中定義的“位值”(bit_value)進(jìn)行存儲(chǔ)的,這種存儲(chǔ)特征是可以節(jié)約字節(jié)數(shù),但數(shù)值是跨字 節(jié)的。該段存儲(chǔ)內(nèi)容是用‘twip’(翻譯為‘緹’,1pixel = 20twips)單位表示的播放窗口的尺寸。分為Nbits,表示后面字段的bit_value位長(zhǎng);Xmin,Xmax,Ymin,Ymax分別表示 X,Y軸方向上的最小和最大值。
            先說(shuō)一下bit_value,其特點(diǎn)是不管字節(jié)區(qū)分,按照最小位數(shù)(bits)將值連續(xù)存儲(chǔ),在末字節(jié)中空位補(bǔ)0,比如兩個(gè)9位表示的無(wú)符號(hào)值7,8將占用3個(gè)字節(jié),表示為2進(jìn)制就是:
            00000011 10000010 00000000
            將3個(gè)字節(jié)按位連在一起,前9位值為7,再9位值為8,在第3個(gè)字節(jié)的其他空位全部補(bǔ)0。簡(jiǎn)單了解了bit_value表示方式,再說(shuō)RECT結(jié)構(gòu),該字 段前5位(bit)為Nbits字段,表示后面字段的bit_value位長(zhǎng),是一個(gè)無(wú)符號(hào)數(shù),也就是說(shuō)最大值為為31,如此一來(lái),整個(gè)RECT字段的最 大長(zhǎng)度為17個(gè)字節(jié),也就是說(shuō)swf文件頭最大不超過(guò)29個(gè)字節(jié)。通過(guò)Nbits字段得到后面字段的bit_value位長(zhǎng)后,就可以確定RECT的具體 長(zhǎng)度,繼而得知“幀頻”和“幀數(shù)”的存儲(chǔ)位置。在RECT字段中,從第6位開(kāi)始,存儲(chǔ)的是播放窗口的尺寸數(shù)據(jù),根據(jù)Nbits值,將后面的部分按位分開(kāi)計(jì) 算,即可得到相應(yīng)值。但對(duì)文件標(biāo)識(shí)為“CWS”的swf文件,從“文件大小”字段后面開(kāi)始(即從第8個(gè)字節(jié)后面開(kāi)始),是按照Z(yǔ)lib標(biāo)準(zhǔn)壓縮存儲(chǔ)的,所 以,在解析swf文件頭時(shí),首先需判斷swf文件是否按照壓縮格式導(dǎo)出的。如果是以壓縮格式導(dǎo)出的,則需先對(duì)頭8個(gè)字節(jié)后面的內(nèi)容進(jìn)行解壓縮處理了,再來(lái) 處理RECT字段和“幀頻”和“幀數(shù)”字段。 
            轉(zhuǎn)自:http://bbs.chinaunix.net/thread-1203803-1-1.html
            posted on 2012-02-23 11:05 會(huì)飛的兔子 閱讀(2731) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 非C++技術(shù)資料
            人妻精品久久久久中文字幕一冢本| 久久久久久久精品妇女99| 国产成人精品综合久久久| 色综合久久无码中文字幕| 久久国产高清字幕中文| 欧美日韩中文字幕久久伊人| 久久嫩草影院免费看夜色| 久久久久国色AV免费看图片| 久久精品国产99国产精品亚洲| 亚洲人成网亚洲欧洲无码久久 | 久久―日本道色综合久久| 日本福利片国产午夜久久| 久久er国产精品免费观看8| 久久综合狠狠综合久久| 成人精品一区二区久久| 无码久久精品国产亚洲Av影片 | 99国内精品久久久久久久| 亚洲精品乱码久久久久久蜜桃不卡| 久久久久久久97| 精品无码久久久久国产动漫3d| 精品国产VA久久久久久久冰 | 国产精品久久久久aaaa| 亚洲国产另类久久久精品| 久久综合丝袜日本网| 狠狠综合久久AV一区二区三区| 99久久国产综合精品成人影院| 亚洲综合精品香蕉久久网| 人人狠狠综合88综合久久| 精品久久人人爽天天玩人人妻 | 四虎国产精品成人免费久久| 久久伊人精品青青草原高清| 久久久WWW免费人成精品| 久久99精品久久久久久hb无码| 久久综合亚洲色HEZYO社区 | 日本五月天婷久久网站| 国产精品久久久久久久午夜片| 国产69精品久久久久777| 久久精品国产第一区二区三区| 色狠狠久久AV五月综合| 久久精品国产亚洲AV影院| 亚洲欧洲精品成人久久曰影片|