PHP上解析swf檔案頭

來源:互聯網
上載者:User
PHP下解析swf檔案頭
本文轉自: http://www.dssky.net

近日,在CSDN論壇上 看到一個文章,想要實現用PHP來得到swf檔案幀數的功能,一些網友回複說不可能,其實是他們對swf檔案格式不瞭解,swf檔案格式規範是開放的,而 且也可以找到相當多的關於直接用PHP處理swf檔案的,包括解析檔案頭,產生swf檔案等。利用閑暇時間,我也寫了一個粗陋的解析swf檔案的類。
要想解析swf檔案頭,首先要弄清楚的當然是swf檔案格式規範。規範中對swf檔案格式作了詳細的說明。關於swf檔案頭,它是由以下幾個部分組成:
+-------+---+--------+--------+---+----+
|檔案標識|版本|檔案大小|RECT欄位|幀頻|幀數|
+-------+---+--------+--------+---+----+
其中“檔案標識”為3個位元組,包括檔案壓縮標誌。這3個位元組的內容為“FWS”或“CWS”,以‘C’開頭的表示swf檔案是採用的壓縮輸出(從RECT欄位開始至檔案結尾,採用Zlib標準進行檔案壓縮)。
“版本”為一個位元組,儲存8位字長的不帶正負號的整數,將swf檔案的匯出版本以16進位方式儲存在該位元組,如匯出版本為7,則該位元組儲存值為0x07,而不是‘7’對應的ASCII值(0x37)。
“檔案大小”儲存佔用4個位元組,為32位不帶正負號的整數,將未壓縮的swf檔案大小以16進位形式存入該4個欄位,值得注意的是,swf檔案儲存體是按照 little-endian,即低位元組在前的“小尾”方式儲存的,解析時,需要注意位元組序。如一個swf檔案大小為471位元組,則該4個位元組,由低位到高 位,儲存的內容將是0xd7,0x01,0x00,0x00。
“幀頻”佔用兩個位元組,表示每秒播放的幀數,儲存方式是8.8共16位的定點數,整數部分在高位(即第二個位元組),小數部分在低位(第一個位元組),並按字 節對齊。如小數7.5表示為16進位是0x07.80,按照低位在前,高位在後表示,這16位將儲存為如下的2進位代碼10000000 00000111。
“幀數”佔用兩個位元組,為16位不帶正負號的整數,表示swf檔案的總幀數。儲存方式類似於“檔案大小”儲存方式。
難理解的是RECT欄位,該欄位採用swf檔案格式規範中定義的“位值”(bit_value)進行儲存的,這種儲存特徵是可以節約位元組數,但數值是跨字 節的。該段儲存內容是用‘twip’(翻譯為‘緹’,1pixel = 20twips)單位表示的播放視窗的尺寸。分為Nbits,表示後面欄位的bit_value位長;Xmin,Xmax,Ymin,Ymax分別表示 X,Y軸方向上的最小和最大值。
先說一下bit_value,律壓縮包的地址:
swfHeaderParser
另外,在國外的許多網站上可以找到相關的內容,這裡提供兩個有代表性的地址,有興趣的朋友可以去看看。
關於用php解析swf檔案頭:
http://www.zend.com/codex.php?id=1382&single=1
關於用php產生swf檔案:
http://freemovie.sourceforge.net/
相關日誌
PHP伺服器平台快速搭建程式....

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.