H.264軟件解碼器在PXA270平臺上的優化

羅 嶸,何 苦 時間:2009年04月24日

  摘 要: 研究了嵌入式系統中H.264 Baseline軟件解碼器設計和優化的問題,提出了四種有效的優化方法,并在PXA270平臺上進行了測試。測試結果顯示,綜合使用提出的四種方法,H.264軟件解碼器在PXA270(520MHz)上運行時幀率可以達到22f/s(CIF格式)和80f/s(QCIF格式)。
  關鍵詞: H.264;軟件解碼器;PXA270

?

  視頻編解碼標準H.264是由國際電聯ITU的視頻編碼專家組VCEG(Video Coding Expert Group)和國際標準化組織ISO的活動圖像專家組MPEG(Motion Picture Expert Group)共同組成的聯合視頻組JVT(Joint Video Team)開發的視頻編解碼標準,也被稱為高級視頻編碼MPEG-4 AVC(Advanced Video Coding)或MPEG-4 Part10。H.264解碼器[1]的主要模塊有運動補償、幀間預測、去塊效應濾波、反變換、幀內預測、重建等。
  PXA270嵌入式處理器內部包括一個XScale內核[2](兼容ARM9指令集),運行頻率最高可以達到624MHz;一個無線多媒體指令擴展 WMMX(Wireless Multi-Media Extension)協處理器,能夠支持多媒體運算指令;還包括一系列外部接口控制器、總線控制器等。
  文獻[3]對H.264解碼器中的幀間預測、去塊效應濾波、反變換、幀內預測、重建等模塊采用了WMMX優化,可以使其相對性能提高92%~100%。文獻[4]在PXA270平臺上設計了一個AVCORE多媒體函數庫,H.264解碼幀率可以達到約50f/s(QCIF格式)。文獻[5]則在Xscale處理器上利用WMMX技術對多種解碼器進行了優化,取得了較好的相對優化效果。但是,這些方法的優化效果有限,只利用PXA270的WMMX功能進行了優化,不能充分利用PXA270處理器的特點。
  為了提高H.264軟件解碼器在PXA270處理器上的性能,本文研究了PXA270處理器和H.264軟件解碼器的特點,并針對其特點進行了多方面的優化。優化方法主要包括WMMX并行計算優化、多項式計算優化、系統資源優化和濾波算法優化四種。
1 H.264解碼器優化方法
1.1 WMMX并行計算優化

  在PXA270平臺上,可以利用PXA270處理器內部的WMMX硬件支持對一個宏塊內像素點的乘/加法操作進行展開處理,一次執行4/8條乘/加法,同時處理多個像素點。
  WMMX軟件編程模型部分包括寄存器堆、矢量化的執行部件和接口部件三部分[2]。WMMX寄存器堆的位寬為64bit,包括16個SIMD寄存器、8個狀態和控制寄存器。
  WMMX矢量化的執行部件,包括一個執行單元、一個乘累加單元、一個移位和序列改變單元。利用這些硬件單元,SIMD寄存器可以被組織成字節(8bit)、半字(16bit)、字(32bit)、雙字(64bit)結構,實現8/4/2/1個數據的并行運算。
  利用WMMX的并行計算功能,H.264軟件解碼器中的很多部分可以被并行化,從而提高計算效率。例如:在H.264的運動估計算法中,進行插值操作的部分算法代碼為:
  H.264軟件解碼器在PXA270平臺上的優化
  進行并行計算優化時,可以對上述代碼中的內層循環部分進行展開:
  H.264軟件解碼器在PXA270平臺上的優化  

  利用ARM匯編語言改寫上面的代碼,調用WMMX的硬件,可以使得該內層循環中的四個結構相同的運算同時進行,這樣就大大提高了速度。在優化過程中,對H.264模塊中的IDCT、IQUANT和插值部分的計算使用了WMMX并行計算優化。
1.2 多項式計算優化
  利用WMMX硬件并行計算優化,比較適用于各個像素點使用相同計算方法的情況。而對于那些每一個像素點都需要用不同的表達式進行計算的情況,就需要采用另外的并行優化思路。對于那些不便于進行循環展開的代碼部分,可以嘗試對其多項式計算進行優化,使用提取公共因子、合并同類項的方法,提高運算速度。
  例如,對于如下的表達式:
  H.264軟件解碼器在PXA270平臺上的優化 

  上面的表達式中公因子合并之后,加/減法和乘法運算的總數由原來的16個變成12個,因而提高了速度。在 H.264的軟件解碼器中,運動補償和幀內預測部分就存在著類似的代碼,可以使用提取公因式的方法來進行優化。文獻[6]已經證明提取公因式進行計算優化的方法屬于NP-hard問題,本文給出了一個比較簡單的近似優化算法,其優化流程為:用多項式組中的每一個多項式生成一個集合Si(i=1,2,…K,K是多項式的個數),其元素sij(j=1,2,…k,k是子式的個數)是該多項式的子式;設定初始搜索次數n=0,N為預先設定的搜索次數上限;計算C,C為整個多項式組為優化前總的計算次數。
  while n
  選定其中一個多項式的子式sij
  計算:整個多項式組可以減少的計算次數c;
  if c
    C=c;
    記錄下子式sij;
  end
n=n+1;
end
  本文提出的算法得到的結果可能并不是最優的,但該方法能降低計算量,還可以應用于除H.264解碼器以外的場合,并且適用于多種架構的處理器。在優化過程中,對H.264解碼器中的幀內預測模塊使用了多項式優化算法。
1.3 PXA270系統資源優化
  本文中H.264軟件解碼器最終運行在PXA270處理器上。該處理器具有多種頻率可調組件,其內部還具有256KB片內SRAM,可以用于顯示圖像存儲。PXA270片內系統總線頻率在高速模式下可以達到208MHz[7],并且LCD控制器的頻率可以調整,具有直接顯示YUV格式圖像的特性。充分利用好這些特性,可以大大改善H.264軟件解碼器在平臺上的運行效率。在 H.264軟件解碼器的代碼中,需要對數據進行大量的存儲操作,為了提高存儲速度,在運行時可以動態地將系統總線頻率調整為高速模式,同時對SDRAM和 Flash等存儲器件進行訪問速度的調整,以保證性能要求。
  針對H.264軟件解碼器進行的PXA270系統資源優化流程如下:
if H.264軟件解碼器運行
  保存處理器和總線當前配置;
  將處理器內核置為超頻頻率上;
  將系統總線頻率設置為高速模式;
  為解碼器分配PXA270片內SRAM作為緩存(受操作系統限制);
end
  if H.264軟件解碼器運行結束
  恢復處理器和總線配置;
end
  系統級的優化需要對處理器的頻率等關鍵資源進行調整,這可以通過PXA270處理器的時鐘管理模塊實現。
1.4 濾波算法優化
  在H.264編解碼算法中,對濾波器算法的規定具有一定的靈活性[8],可以在不違反標準的情況下使用自己的濾波方法。在改進的濾波器中,通常采用的方法是改變子宏塊(Sub-Macroblock)邊界的濾波順序,從而提高存儲效率和數據的復用性[9]。本文設計了一個優化的濾波器算法,達到了一定的效果。
  在H.264標準中,規定的標準解碼算法是:對于一個16×16的宏塊(圖像格式為YUV4:2:0),其中各個4×4的子宏塊邊界的濾波順序如圖1的標號1~48所示。
  在用軟件實現濾波算法時,一幀圖像數據的存儲以二維數組的方式進行。例如,對于CIF(352×288)格式的一幀圖像,其亮度信號存儲在一個Y[352][288]數組中。
  在計算機和多數嵌入式系統的內存中,內存地址是線性的,因此一個16×16的亮度宏塊(劃分為16個4×4大小的子宏塊)中每個4×4的子宏塊分別被編號為1~16。1~4子宏塊的第一行數據在內存中的位置為M1,第二、三、四行數據在內存M2、M3、M4。M1~M4之間的位置分別被其他16×16的宏塊所占據。5~8子宏塊在內存中的位置為M5~M8,因此在形式上相鄰的兩個子宏塊1和5,在內存中的位置可能差得很遠。
  在計算機系統中,為了充分利用數據的空間、時間相關性,會在訪問內存中的一個數據時,把該數據相鄰區域的一塊數據都加載到緩存中。例如,當程序訪問子宏塊1的第一行數據時,處理器會自動把整個M1塊加載到緩存中,即第2~4個子宏塊的第一行也被加載到緩存中。由于緩存的大小非常有限,內存中有很多地址都可以映射到緩存中的同一個地址處。例如,當程序訪問子宏塊5的第一行時,M5被加載到緩存中,就有可能覆蓋掉原來M1在緩存中位置。而對于M1~M3來說,它們在內存中的位置靠得比較近,因此可以被映射到緩存中的不同區域,不會相互覆蓋。
  對于圖1中的濾波方案,會存在緩存未命中(Cache Miss)的問題。按照圖1中的濾波順序,每對一個邊界做濾波都有可能覆蓋掉前一次加載的數據,這樣會增加對內存的訪問次數,降低速度。為了改進這一點,本文提出了如圖2所示的新的邊界濾波順序。

?

H.264軟件解碼器在PXA270平臺上的優化

?

H.264軟件解碼器在PXA270平臺上的優化


  新方案在多數情況下可以利用前一次已經加載到Cache的數據進行操作。例如:在對編號為2、3、4的邊界進行濾波時,可以利用對1邊界進行濾波時已經加載的數據。這樣可以提高去宏塊效應濾波器的速度。
  對于YUV4:2:0格式的圖像,傳統的濾波算法在處理一個16×16的亮度宏塊和兩個8×8的色度宏塊時,可能在32條邊界(共48條邊界)處發生數據緩存未命中,這些邊界分別是1~24、25~37、41、43、45、47(參見圖1)。而改進的濾波算法則可能在11條邊界處發生數據緩存未命中,這些邊界分別是:1、5、9、17、25、33、35、37、41、43、45(參見圖2)。由此可見,改進的濾波算法提高了內存訪問效率。
2 仿真和測試結果
2.1 使用WMMX優化后的測試結果

  使用WMMX匯編語言對H.264軟件解碼器進行并行計算優化后得到的效果如表1。

H.264軟件解碼器在PXA270平臺上的優化

  對比表1中的結果可以看出,WMMX計算優化的效果最為明顯,對幀率的改善可以達到3f/s~5f/s。WMMX技術也是PXA27x系列處理器的一個亮點,這一功能使其可與一般DSP的計算能力相匹敵。
2.2 多項式計算優化的方針和測試結果
  為了顯示多項式優化的效果,首先在ARM(PXA270處理器是兼容ARM體系結構的)仿真環境下對單個函數測試,編譯器采用ARM公司出品的ADS 1.2,在測試過程中,C/C++編譯器的參數設置為:-O2-O time -g+ -cpu XXXXX(具體的ARM處理器內核類型,如ARM946E-S)。
  在測試過程中,沒有修改編譯器的設置,為了證明算法的普適性,在多種ARM處理器內核上進行了仿真。
  仿真時選用的函數是:predict_4x4_mode_3;predict_4x4_mode_4;predict_4x4_mode_5;predict_4x4_mode_6;predict_4x4_mode_7;predict_4x4_mode_8。
  這些函數對應幀內預測的第3~8種模式,具體算法可以參照H.264的標準文檔。下面給出函數predict_
4x4_mode_3進行優化后的簡單示例。predict_4x4_mode_3在進行優化前的代碼為:
predict_4x4_mode_3
  Begin

  Y0=(a0+a2+(a1<<1)+2)>>2;
  Y1=Y4=(a1+a3+(a2<<1)+2)>>2;
  Y2=Y5=Y8=(a2+a4+(a3<<1)+2)>>2;
  Y3=Y6=Y9=Y12=(a3+a5+(a4<<1)+2)>>2;
  Y7=Y10=Y13=(a4+a6+(a5<<1)+2)>>2;
  Y11=Y14=(a5+a7+(a6<<1)+2)>>2;
  Y15=(a6+(a7<<1)+a7+2)>>2;
end
  進行優化后的代碼如下:
predict_4x4_mode_3
Begin
  T0=a0+a1;T1=a1+a2+2;Y0=(T0+T1)>>2;
  T0=a2+a3;Y1=Y4=(T0+T1)>>2;
  T1=a3+a4+2;Y2=Y5=Y8=(T0+T1)>>2;
  T0=a4+a5;Y3=Y6=Y9=Y12=(T0+T1)>>2;
  T1=a5+a6+2;Y7=Y10=Y13=(T0+T1)>>2;
  T0=a6+a7;Y11=Y14=(T0+T1)>>2;
  T1=a7+a7+2;Y15=(T0+T1)>>2;
end
  考慮到程序表示方面的簡明性,在優化的程序中使用了一些臨時變量。從程序中涉及的多項式計算的表達式來看,在未優化程序中,使用了21次加法和14次移位運算;而在優化后的程序中,使用了19次加法和7次移位運算。對其他幾個函數進行優化后,也有類似的結果。仿真器得到的結果請參照表2和表3。

H.264軟件解碼器在PXA270平臺上的優化

?

  從仿真結果可以看出,多項式計算優化算法應用于某些特定函數上,可以縮短時間和縮減代碼體積。不過,多項式計算優化算法在H.264軟件解碼器中的應用是有限的,對整個軟件解碼器性能提高的貢獻不大。
2.3 優化測試結果
  對PXA270系統資源進行優化后,再運行H.264軟件解碼器時的測試結果比較見表4。通過系統資源優化,可以使H.264軟件解碼器性能提高 2f/s~3f/s。這表明系統資源優化是提高H.264解碼器性能比較有效的一種方法。從表4可以看出,對去宏塊效應濾波器優化后,解碼器整體的性能的提高不是很大,這主要是由于濾波運算在測試視頻中所占的比重不是很高引起的。編碼時視頻流所采用的量化器的量化程度比較低,所得的圖像比較平滑,因此需要進行的濾波運算也少。

?

H.264軟件解碼器在PXA270平臺上的優化


  將上面提到的各種優化方法綜合應用到H.264軟件解碼器中,取得的效果相當可觀。聯合使用各種優化方法,可以使得各個方法間相互補充,獲得比單獨使用更好的優化效果,如表4中測試組一和測試組二所示。對H.264軟件解碼器進行聯合優化以后,性能的提高達到40%左右。
  通過在實際平臺上的測試可知,PXA270系統資源優化和WMMX并行計算優化的貢獻最大,而其他兩種方法的貢獻則要小得多。但是也必須看到,效果好的方法其專用性也會很強,如WMMX并行計算需要有專門硬件的支持。去宏塊效應濾波器算法優化和多項式計算優化兩種方法雖然在 PXA270平臺上對H.264軟件解碼器的優化效果不佳,但是它們對PXA270內部的特定資源依賴很小,通用性較強,可以用于其他平臺或應用實例中,具有一定的使用價值。


參考文獻
[1] WIEGAND T,SULLIVAN G,LUTHRA A.Draft ITU-T recommendation and final draft international standard of joint?video specification(ITU-T Rec.H.264 | ISO/IEC 14496-10 AVC),Joint Video Team(JVT) of ISO/IEC MPEG & ITU-T VCEG(ISO/IEC JTC1/SC29/WG11 and ITU-T SG16 Q.6)?8th Meeting:Geneva, Switzerland,2003,5.
[2] Intel Corporation.Intel wireless MMXTM technology developer guide,2002.
[3] PAVER N C,KHAN M H,ALDRICH B C,et al.Accelerating mobile video applications using Intel@ wireless?
MMXTM technology.IEEE workshop on signal processing? systems,2003:207-212.
[4] http://www.cyansoft.com.cn/products.php?display=1&select=1,2007-5-23.
[5] PRASAD A,MITTAL A,KUMAR M,et al.Optimization and comparison of computational complexities of standard compliant video decoders on SIMD processors.ICASSP 2007:II-93-II-96.
[6] HOSANGADI A,FALLAH F,KASTNER R.Factoring and?eliminating common subexpressions in polynomial expressions.ICCAD,2004:169-174.
[7] Intel Corporation.Intel PXA27x processor family developer′s manual,2004.
[8] LIST P,JOCH A,LAINEMA J,et al.Adaptive deblocking?filter,IEEE transactions on circuits and systems for video?technology,2003.
[9] 牛曉雷,戴瓊海,劉燁斌.H.264/AVC解碼器解塊濾波的結構優化.計算機工程與應用,2005:104-106.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455373.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455373.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455373.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JavaWeb筆記04-解決GET與POST亂碼問題

解決GET與POST亂碼問題: 請求的亂碼問題 GET:tomcat8版本之前,get請求會亂碼 正常文字 --> UTF-8編碼 --> 字節數組 --> ISO-8859-1 編碼 --> 亂碼文字 正常文字 <-- UTF-8編碼 <-- 字節數組 <-- ISO-8859-1 編碼 <-- 亂碼文字解決亂碼的兩種格式: …

EF架構~codeFirst從初始化到數據庫遷移

一些介紹 CodeFirst是EntityFrameworks的一種開發模式&#xff0c;即代碼優先&#xff0c;它以業務代碼為主&#xff0c;通過代碼來生成數據庫&#xff0c;并且加上migration的強大數據表比對功能來生成數據庫版本&#xff0c;讓程序開發人員不用維護數據庫的變更&#xff0c;而…

Ubuntu用戶Steam控制器不工作的解決辦法

Steam 控制器已開始送貨到世界各地游戲玩家手中&#xff0c;不過有朋友遇到 Steam 控制器在 Ubuntu 中無法正常工作&#xff0c;本文我們來介紹一下解決辦法。該解決辦法并非 Ubuntu 官方提出的最佳解決方案&#xff0c;不過還是可以臨時解決 Ubuntu 用戶 Steam 控制器不工作的…

lisp 車位塊自動編號_機械車位做產權登記,真的適合嗎?

為了更好地把握停車市場發展動向&#xff0c;給停車行業從業者提供一個發表觀點、各抒己見的平臺&#xff0c;共同促進停車行業的發展&#xff0c;《城市停車》開設熱點版塊&#xff0c;每期針對1-2個行業熱點&#xff0c;廣泛征集業內人士觀點和看法。HOT TOPIC本期熱點今年兩…

JavaWeb筆記05-解決線程安全問題

線程安全問題: Servlet的service方法,每次被請求是,調用. 這個調用很特殊,是在新的子線程中調用的,當service方法執行完畢,子線程死亡了. 可以簡單的理解為:service方法每次執行都是一個新的線程. package cn.xdl.demo1;import javax.servlet.ServletException; import jav…

Java并發編程實戰 第14章 構建自定義的同步工具

狀態依賴性 定義&#xff1a;只有滿足特定的狀態才能繼續執行某些操作&#xff08;這些操作依賴于固定的狀態&#xff0c;這些狀態需要等待別的線程來滿足&#xff09;。 FutureTask&#xff0c;Semaphroe&#xff0c;BlockingQueue等&#xff0c;都是狀態依賴性的類。 條件隊列…

webserver接口_SpringBoot內置源碼解析WebServer初始化過程

WebServer 初始化過程在上一節中 Spring Boot 初始化了 WebServer 對應的工廠類。同時&#xff0c;我們也知道對應 Web容器的WebServer實現類有:TomcatWebServer、JettyWebServer和UndertowWebServer。這節重點講解這些 WebServer 是如何被初始化&#xff0c;又如何啟動的。Web…

提升應用程序彈性:保障工作負載正常運行

通過集群化、復制、快照、微服務和應用程序設計來提高企業工作負載的應用程序彈性和可用性。 應用程序的彈性和可用性是現代企業工作負載的關鍵屬性。應用程序需要在硬件故障發生后&#xff0c;扛過服務故障(例如負載平衡器和域名系統錯誤)保持工作狀態&#xff0c;并且可以忍受…

JDBC筆記01-JDBC,Connection,Statement,ResultSet,PreparedStatement,Properties

學習目標 理解JDBC原理 掌握Connection接口的使用 掌握Statement接口的使用 掌握ResultSet接口的使用 掌握PreparedStatement接口的使用 掌握Properties類與配置文件的使用 JDBC 概念 JDBC (Java DataBase Connectivity) Java數據庫連接技術的簡稱&#xff0c;提供連接各種常…

NVDKC6416平臺H.264算法優化

本文轉載自&#xff1a;http://blog.csdn.net/embedesign/archive/2009/09/15/4556486.aspx&#xff0c;版權歸原作者&#xff0c;編輯&#xff1a;小乙哥 多媒體通信終端設備具有廣泛的應用前景&#xff0c;可以應用于視頻會議、可視電話、PDA、數字電視等各個領域&#xff0…

攔截器及 Spring MVC 整合

一、實驗介紹 1.1 實驗內容 本節課程主要利用 Spring MVC 框架實現攔截器以及 Spring MVC 框架的整合。 1.2 實驗知識點 Spring MVC 框架攔截器1.3 實驗環境 JDK1.8Eclipse JavaEE二、實驗步驟 2.1 攔截器實現 在項目 hrms 的目錄 src/main/java 下新建包 com.shiyanlou.interc…

高德地圖軌跡回放_高德地圖上線了一個新功能….

文、路人甲TM德地圖這兩天剛上線了一個叫做「家人地圖」的功能&#xff0c;所謂家人地圖顧名思義&#xff0c;就是你可以通過高德地圖組建一個家人圈&#xff0c;在這個圈子里面你可以看到你的家人在什么位置&#xff0c;當你的家人到達什么位置的時候自動發送通知或者警告&…

You have new mail in /var/spool/mail/root消除提示的方法

有時在進入系統的時候經常提示You have new mail in /var/spool/mail/root 你覺得煩人---解決方法&#xff1a; 修改系統配置文件/etc/profile&#xff0c;告訴系統不要去檢查郵箱. 具體操作&#xff1a;命令行輸入&#xff1a;echo "unset MAILCHECK" >> /etc…

c3p0-config.xml文件簡單說明與備忘

<?xml version"1.0" encoding"UTF-8"?> <c3p0-config><named-config name"mysql"><!-- 配置數據庫用戶名 --><property name"user">root</property><!-- 配置數據庫密碼 --><property…

python 消息隊列 get是從隊首還是隊尾取東西_從零開始Python對redis作為消息隊列的使用...

一、Redis 服務1、安裝yum install redis2、 python安裝支持模塊/opt/python2.7.13/bin/pip install redis3、 和redis的簡單直接交互In [1]: import redisIn [2]: rc redis.Redis(host192.168.8.237,port6379,decode_responsesTrue)In [5]: rc.set(imoocc,jeson)Out[5]: True…

‘’和“”

單引號引的數據是char類型的 雙引號引的數據是String類型的 單引號只能引一個字符 而雙引號可以引0個及以上 字符&#xff08;Character&#xff09;是指人類語言的最小的表義符號&#xff0c;字符是指計算機中使用的字母、數字和符號&#xff0c;包括1、2、3、A、B、C、#、&am…

Spring整合Quartz定時任務 在集群、分布式系統中的應用(Mysql數據庫環境)

轉載&#xff1a;http://www.cnblogs.com/jiafuwei/p/6145280.html 單個Quartz實例能給予你很好的Job調度能力&#xff0c;但它不能滿足典型的企業需求&#xff0c;如可伸縮性、高可靠性滿足。假如你需要故障轉移的能力并能運行日益增多的 Job&#xff0c;Quartz集群勢必成為你…

JDBC筆記02-數據庫連接池 Spring JDBC

今日內容 數據庫連接池Spring JDBC : JDBC Template 數據庫連接池 概念: 其實就是一個容器(集合),存放數據庫連接的容器 當系統初始化好后,容器被創建,容器中會申請一些連接對象,當用戶來訪問數據庫時,從容器中獲取連接對象,用戶訪問完之后,會將連接對象歸還給容器 好處:…

20溫控f1什么意思_歐姆龍溫控器是什么 歐姆龍溫控器介紹【圖文】

歐姆龍溫控器&#xff0c;乍一眼看上去真的很難理解這到底是一個什么產品&#xff0c;或者是一個有什么用處的溫控器&#xff0c;對于這個比較淺顯的問題&#xff0c;不知道大家會有什么樣地感受&#xff0c;是不是正在一頭霧水的等著我進行解答呢?經過我比較淺顯的分析&#…

bootstrap 解決彈出窗口(modal) 常見問題

無法使用鍵盤esc關閉窗口方法&#xff1a; 首先在modal容器的div中增加屬性tabindex"-1"&#xff0c;其次設置鍵盤ESC屬性keyboard為true&#xff1b; 方法1&#xff1a;使用js打開窗口時 $(“#modal”).modal({keyboard:true}) 方法2&#xff1a;使用H5屬性在modal窗…