MPEG-2TS碼流編輯的原理及其應用(轉載

[作者:遼寧電視臺 趙季偉] ? ????在當今數字媒體不斷發展、新媒體業務不斷涌現 的前提下,實踐證明襁褓中的新媒體只有兩種經營方略可供選擇:或是購買并集成整套節目,或是低成本深加工新節目,再不可能去按照傳統生產模式去自采自編。 低成本的節目生產制作與發布,不僅成為數字媒體經營的主要手段,也成為傳統媒體改革工作流程的重要舉措,進而促成了對新型工作母機和簡捷快速流程的迫 切需求。?

????
在遼寧新媒體多業務綜合服務平臺上,先于國際和國內應用了MPEG-2傳輸流快速剪輯編輯系統(以下簡稱碼流快 編)。這項由遼 寧電視臺與深圳奧維迅公司在200310月聯合開發的新技術,為數字媒體低成本節目的制作、推廣和運營提供了高效生產工作母機。盡管擔負此項目源代碼開 發的奧維迅公司出現了經營問題,在技術推廣的中間環節發生梗塞,但并不能說明此項技術走到了盡頭。回顧3年的應用實踐及研發成果,需要的不是揚棄,而是演 進的升級,否則就是對可調控資源的莫大浪費。特別是針對第二代信源編解碼國標AVS-P2的更新換代,很可能成為多業務內容整合的新一代產品的突破口。?

????
工作原理?

????1.
功能目標?

????
流快編的應用目標是,通過對開放視頻的采集,將DVB-SC的傳輸流(Transport StreamTS)節目作為信源,直接進行剪輯處理,再經過人工創意后,整合為新主題內容的新節目,以便直接進入頻道集成或編輯頻道節目播出,快速實現 數據層的內容整合,不僅簡捷了采集制作的工作流程,而且為豐富媒體內容資產開辟了一條捷徑。因為碼流快編的工作流程無需先以解碼后的視頻記錄于磁帶,再以 磁帶上載編輯機,經編輯后再下載成為磁帶,再編碼復用成為新內容的新節目。即便數字化完成以后,視頻數據流仍不能用于經復用的數字傳輸,還需編碼、轉碼、 打包等傳輸格式化以后,才能在數字信道上傳輸。而采用碼流快編以后,不僅避免了解碼后再采樣編碼所形成的視頻損耗,還避免了在11時間的上下載中所造成 的效率損耗。更重要的是在視頻內容整合中,一次性完成音/視頻同步剪切、字幕處理和音/視頻數據打包復用等連續作業。所以,它能夠提高生產效率60%上。必要時還可進行節目包裝的特技編輯,直接創建數據級和文件級的互聯互通內容交換平臺,在媒體資產管理下,順利實現網絡化與智能化的節目配送與發布。?

????
于碼流快編是針對以TS為信源的再編輯系統,所以實行高來高走,低來低走,或是高來低走的應用策略,即高碼率對應高 碼率(包括兼容高清),低碼率對應低碼率,但碼率連續可調,以適應高碼率對應低碼率的應用。理論和應用都說明,對比源節目和成品節目,經剪切和編輯處理的 圖像保持了同等的視頻質量,成為不劣化圖像的創新工作流程和新型工作母機。?

????2.
設計特征?

????
碼流快 編的低成本與高效率來自它的主要特征。常規的非線性編輯機是在編碼一側做文章,通過采集編碼卡實現視頻圖像多層多軌的非線 性編輯;而碼流快編則是在解碼一側下功夫,通過對TS拆包還原為基本碼流(Elementary StreamES),而后經編輯再封包成為TS,快速實現視頻內容整合的業務應用。因而,碼流快編除了運用非線性圖像處理技術外,最大的特點是運用了 MPEG-2DVB的系統原理,在此基礎上進行圖像處理的應用開發。?

????
通過圖1的系統概念,可以看出碼流快編運用了一個逆向思 維的方法,利用DVB系統傳輸的發/收互逆關系,將收端的單節目傳輸流 SPTS)作為信源,通過ES實現以視頻非線性處理的目標功能。這時的解決方案有兩個:一是在TS基礎上直接進行圖像處理的基礎開發,實現與常規非編一 樣的操作界面和編輯習慣,這樣雖好,但是沒有參照模型以及可利用的技術資源,必須從零開始的重寫源代碼;二是將TS轉碼為ES,以ES幀結構和句法格式還 原成為符合ITU-R.601建議的原始視頻幀,就可以很方便地利用或附加現有的常規非編技術,以無卡站形式實現編輯。碼流快編同時采用了兩種方案,一方 面獨立開發新產品系列,以適應于快速發展的數字電視業務需求,另一方面提高系統的兼容性,向后兼容傳統非編,有利于在媒體資產管理下實現互聯互通和投資保 護。圖2說明了方案二的ES還原并顯示原始視頻的GOP幀結構。?

????
通過圖2可以認為,既然能夠形成IBBP的句法幀,再轉換成 為全I幀格式并不難。這樣一來,就可以利用原有的非線性編輯技術, 連續處理長與短GOP、全I幀與IBP幀結構、可變與固定碼流的節目素材,實現不同節目格式的快編與混編。由此可見,碼流快編的開發技術難點,是結合 DVB系統與MPEG-2標準,從譯碼過程中讀出元數據,實現基于解碼器的圖像處理技術,并能兼容以編碼卡為基礎的非線性編輯技術。因而被業內稱為第一個吃螃蟹者?




????3.
數據變換

?既然要把TS作為節目源進行編輯,就需要將TS包中的數據變換為非線性編輯所能使用的元數據和視頻流。它們是以碼流快編作為工作母機進行生產的真正原料。?

????數據變換的第一個過程是拆DVB復用包。如圖3所示,DVB的解碼流程中分層譯出了許多數據信息,如同步字節(Sync Byte)、節目特定信息(Program Specific Information,PSI)中PAT、PMT、NIT等列表、包識別(Packet Identification,PID)、節目時鐘基準(Program Clock Reference,PCR)及PTS/DTS(后詳解)和業務信息(Service Information,SI)等部分。這些信息不僅與DVB PSI/SI直接相關,與MPEG-2的句法結構也直接相關,它規范地傳遞了再生碼流中音/視頻所需的MPEG-2列表數據,通過這些信息的引導,準確進入MPEG-2系統層的進一步譯碼。?

????第二個過程是拆MPEG-2系統復用包。MPEG-2系統定義了一個的碼流層次化結構句法規則,以便于誤碼處理、隨機搜索以及 內容編輯。它自上而下依次分為圖像序列層(Video Sequence Layer,VSL)、圖像組層(Group of Pictures Layer,GOPL)、圖像層(Picture Layer,PL)、像素條層(Slice Layer,SL)、宏塊層(Macro block Layer,ML)、像塊層(Block Layer,BL)等6個層次,分別賦予每個層次不同的功能。圖4說明了MPEG-2 體系的句法結構,通過這種分層排列的結構特征,MPEG-2提高了系統的靈活性和管理效率,使得每一層都可以用來支持一個特定的功能。碼流快編大部分應用于VSL、GOPL、PL層,特別是在GOPL,需要在還原時規范翻譯PID、PCR、PTS/DTS等信息,將同步信息、閉合標記、斷鏈標記等數據準確插入GOP圖像組,以形成每組GOP數據流的起點,才能保證圖像幀的精確和連續幀的同步接續。?

????第三個過程是將拆包后所得數據信息,以規范的裝填還原MPEG-2 ES以及元數據,因而裝填數據是碼流快編的重要技術環節。?

????(1)裝填復用的基本碼流包?

????依據MPEG-2 TS規范結構(如圖5所示),復用的基本碼流包(Packetized Elementary Stream,PES)是由包頭、自適應區的ES特有信息和包數據3部分所組成。由于包頭和ES特有信息二者可合成1個數據頭,因而可認為1個PES包是由包頭和包數據(有效載荷)2個部分所組成。對有線、衛星、地面廣播網接收的TS,經過解調和解擾處理后選取包長為188B的SPTS,并從包頭中提取相關信息,以PID區別不同SPTS包,以連續計數器的順序計對標注PID的TS包重建一個獨立分組的PES。根據自適應區中的填充數據,裝填到不為TS包整數倍的PES包中,以保證PES變長包的完整性。同時,依據包頭及自適應區內的同步字節、原始程序參考時鐘(Original Program Clock Reference,OPCR)、PCR等同步和識別信息,提供27MHz的解碼同步時鐘,裝填共同時間基準、獨立時間基準、可變包長和有效載荷等數據。?

????裝填成為PES對碼流快編具有格外重要的意義,因為PES包內含音/視頻的ES以及包括PID的12個包頭識別標志,當對 PES包的起點不能精確定位、對PES包頭標志符不能準確識別時,就不能保證拆包后再打包的圖像無縫接續和聲畫同步。這是在初期研發過程中遇到并獲得突破的技術難點。?

????(2)裝填基本碼流?

????根據MPEG-2規范的PES包結構(如圖6),還需進一步裝填為連續ES流。ES是指只包含1個信源的數據流,即視頻數據流或 音頻數據流。每個ES由若干個緩存器的特定存取單元(Access Unit,AU)所組成,而每個視頻AU或音頻AU都是由頭部和編碼數據的2部分。1個AU相當于編碼的1幀視頻圖像或1個音頻幀的取樣。PES的包頭為恢復ES提供了向導。?

????對于PES包頭,具有ES特有信息的顯示時間標記(Presentation Time Stamp,PTS)、解碼時間標記(Decode Time Stamp,DTS)標志、基本流時鐘基準(Elementary Stream Clock Reference,ESCR)信息標志、基本流速率信息標志、數字存儲媒體(Digital Storage Media,DSM)的特技信息標志等等,其中,唯有PTS/DTS標志,是解決視音頻同步顯示,防止輸入緩存器上溢或下溢的關鍵所在。?

????在裝填過程中,數據定位指示符引導PES還原所包含的視頻、音頻及所屬其它數據流(如同步、數據和數據通道等),包頭識別標志的PTS/DTS指示了可變長度包數據的幀同步時間,當區分音/視頻和其它數據以后,依據PTS/DTS對視頻幀分配給特定的AU。其中尤以獨立時間基準是還原ES的同步基礎。對于PES包數據,一方面通過擴展標志的數據包計數器,引導恢復數據流,另一方面利用循環冗余校驗(Cyclic Redundancy Check,CRC)輔助檢測并糾正可能存在的數據包丟失。?

????


????4. 精確幀定位

?幀定位是精確編輯的基礎,而精確的幀定位來自于精確的幀同步。在ES上實現逐幀精確的編輯,首要問題是實現精確幀的同步。?

????如前所述,裝填后的ES變成僅含有1種性質的PES包,或視頻ES,或音頻ES。以視頻為例,圖7表明了在PTS/DTS標示的獨立同步時間基準指示下,順序裝填再順序讀出,形成連續ES的I1P4B2B3P7B5B6(N=7)GOP組幀順序。由于PES的數據分組是可變長度的數據包,但它的最大包數據容量為65526Byte。因此,在碼流快編中必須為每個AU準備必不可少的緩存空間。

????如圖7所示,PTS表明圖像幀出現在目標解碼器(System Target Decoder,STD)的時間,DTS表明將存取單元全部字節從STD的ES解碼緩存器移出的時刻。當以PTS/DTS為獨立時間基準,定位和標志 PES的AU起始點后,對UA依次組成圖像幀序為I1P4B2B3P7B5B6 I10B8B9的ES。對于I、P幀而言,PES的圖像幀序為I1P4B2B3P7B5B6I10B8B9,應該P4比B2、B3在先,但顯示時P4一定要比B2、B3在后,這就必須重新排序。在PTS/DTS時間標志指引下,將P4提前插入數據流,經過緩存器重新排序,重建視頻幀序 I1B2B3P4B5B6P7B8B9I10。顯然,PTS/DTS是表明確定事件或確定信息,并以專用時標形態確定事件或信息的開始時刻。?

????值得注意的是,雖然在PES中應該每個I、P、B幀的包頭都具有一個PTS和DTS,但由于B幀的解碼時間和顯示時間存在一致性,因而對B幀而言,PTS與DTS具有相同作用,無須DTS,只須PTS。音頻數據包也很有特點,雖然它可以含有多個存取單元,但由于它必須按照時間順序傳送,所以音頻包頭中也不含DTS,只有1個PTS。?

????由此可見,PTS/DTS不僅直接關聯幀定位,而且直接關系到碼流快編的幀精確編輯。為此,碼流快編的幀定位著重處理以下幾個幀序特征:?

????* 當處理某個含有1個I幀的存取單元時,在其包頭文件中應有DTS和PTS,且2個標記之間的時間間隔為1個圖像周期,那么在雙向編碼時的P幀應在I幀之后,在包頭文件中就應有1個DTS和1個PTS,而這2個標記之間應存在3個圖像周期的間隔,這樣才能插入2個B幀。?

????* 當前處理IPBB時,I幀應延遲1個圖像周期,P幀應延遲3個圖像周期,而2個B幀則無需延遲,于是,最后的顯示順序就成為了IBBP幀序。?

????* 若需要改變GOP結構時,例如在I與P幀之間需要存在更多的B幀,則需調整B幀DTS與PTS之間的時間間隔。?

????* 當處理IPBB序列后,必在第1個B幀之前先對I和P幀進行解碼,但每次只能對一幀圖像進行解碼,因此需要先解I幀并暫存后,待P幀被解碼時,隨即讀出I幀,而后再讀B幀。?

????* 在處理包頭時,對PTS/DTS指示的某圖像幀,特殊關注是否只有1個PTS時間標記,是否含有PTS和DTS的2個時間標記,以便快速確認I、P與B幀,以及音頻包。?

????當作為編輯節目源的MPEG-2 TS被拆包以后,以PTS/DTS實現視頻幀的精確定位,就能以幀精確的剪切編輯實現碼流快編功能,同時,也能以 I1P4B2B3P7B5B6I10B8B9幀序顯示I1B2B3P4B5B6P7B8B9I10幀序。那么,在此基礎上嫁接現成的MPEG-2 IBP非線性編輯的成熟技術,既不需要高價的采集編碼卡,也不需要上下載的轉碼,從采集、轉碼、拆包剪切,到特技處理、打包上傳,一氣呵成地構成了碼流快編系統。?

????


????二實際應用?

????考慮到碼流快編的兼容性和通用性,以及互聯互通網絡平臺內容交換的需要,系統是在Windows平臺上開發應用,系統流程詳見圖8。?

????事實上就應用層而言,看不出碼流快編與常規非編究竟有什么區別。只是對照圖8,才能看出常規應用時是以傳統磁帶記錄的內容為節目源,這就需要圍繞采集編碼卡,設立上下載工作站,通過將模擬節目采集編碼為數據流以后,再進行剪切等編輯。因而,目前還需對廣泛應用的模擬視頻提供接口選項,附加上下載工作站。它的應用界面及其采集參數選項參見圖9。圖9、10表示數據輸入的采集操作界面,顯示目標文件格式初始化選項與合成屬性,以維系連續應用的工作流程。?

????經采集所合成的碼流格式文件,可以同時轉換成為可供交換的各種流格式和連續可調的速率,以適應各種內容編輯的整合策略需求,并可利用網絡,對連續生產的其它工作站輸送和交換素材,直至包括特技的特殊內容加工。這些交換文件的合成屬性以及應用格式選項參見圖10。?

????雖然在碼流快編上進行快速編輯并合成文件時,與常規操作不無不同,但是通過對TS文件的快速正、反向搜索,以每一幀的入點、出點的精確定位,進行非線性編輯的剪切操作,制作成為新內容體裁的新文件,卻被廣電總局主管節目的領導所認可,被稱之為“海量空中節目的過濾器”。同時,它還可以根據內容的需要,通過內置的迭加臺標、欄目、字幕等字幕軟件,直接參與編輯節目內容信息編輯或局部遮蓋,并可聯立采集工作站,形成生產流水線,進行不同任務種類的專項加工。如圖11所示,在時間軌上的不同視頻、音頻、字幕等,均可按幀精確的快速合成為新節目或新素材。?

????如圖 12所示,當合成新節目或素材時,文件格式的也可以根據使用的需要加以選擇。如果作為DVB播出節目的成品,則可選擇 “MPEG-2TS流(DVB格式)”選項;如果需要作為進一步深加工的素材,則可選擇“MPEG-2ES流(M2V+MPA)”選項,以素材集的形式存放于共享應用的集中存儲。這樣編輯后的節目素材或成品,理論上可以保證與節目源完全相同的視頻質量。?

????還值得一提的是,只要在此基礎上再增加一塊廉價的Matrox-RGX100采集卡,就可以進一步集成無限軌、無限層的第二代非線性編輯技術,成為多格式混編、混排的超級深度特技編輯機,為動漫、游戲等新媒體節目的快速加工創造工具。

?

三 結語?

????無論碼流快編對節目制作的現實意義存在何種褒貶,但在一次數字版權還沒有進階到二次版權法規的時候,它的存在具有特殊重要意義。畢竟能夠通過僅12名(前期6人)的人員投入,以低成本、高效率的節目加工,為遼寧電視臺提供了18套全省的數字電視節目,而且維系了近3年的節目生產,至今贏得了全省近百萬數字電視用戶的向往與肯定。試想一下,倘若按照常規作法,只播出1套節目用12個編輯就很可能要“累死人了”。?

????實踐證明,當國外的政治體制和法規觀念與國內存在現實差異的時候,國際上不屑一顧的產品并不是國內市場沒有需求;當國際與國內市場趨于接軌的時候,對瞬息萬變的市場不屑一顧也不是新技術的初衷;當碼流快編因某種原因并沒有得到推廣的時候,不屑一顧地揚棄它的內核就不是實事求是。最恰當的對策是繼承技術原理的設計理念,與時俱進地升級新產品,才能獲得廣電和企業的整體效益。?

????摘自《現代電視技術》

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

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

相關文章

Python中的yield詳解

閱讀別人的python源碼時碰到了這個yield這個關鍵字,各種搜索終于搞懂了,在此做一下總結: 通常的for…in…循環中,in后面是一個數組,這個數組就是一個可迭代對象,類似的還有鏈表,字符串&#xf…

shell循環結構之while循環

while循環 1) while CONDITION; dostatementstatement<改變循環條件真假的語句>done 編寫腳本&#xff0c;計算1---100的和 #!/bin/bash#sum0i1while [ $i -le 100 ]; dolet sum$sum$ilet i$i1doneecho $sum2) while true; do statementstatementdone #!/bin/bash#while …

python 管道隊列_關于python:Multiprocessing-管道與隊列

Python的多處理程序包中的隊列和管道之間的根本區別是什么&#xff1f;在什么情況下應該選擇一種&#xff1f; 什么時候使用Pipe()有優勢&#xff1f; 什么時候使用Queue()有優勢&#xff1f;Pipe()只能有兩個端點。Queue()可以有多個生產者和消費者。何時使用它們如果需要兩個…

pip默認使用國內鏡像地址

很多小伙伴在ubuntu系統下,使用pip安裝會很慢 以為安裝源在國外服務器上面 今天小編就教大家配置成讓pip默認從國內源中尋找安裝包 首先CtrlAltT打開終端 進入家目錄 cd ~在家目錄中創建一個文件夾,命名為.pip mkdir .pip進入目錄,并創建一個名為pip.conf的文件 cd .pip…

“大型票務系統”和“實物電商系統”的數據庫選型

討論請移步至&#xff1a;http://www.zhiliaotech.com/ideajam/idea/detail/423 相關文章&#xff1a; 《今天你買到票了嗎&#xff1f;——從鐵道部12306.cn站點漫談電子商務站點的“海量事務快速處理”系統》 不能簡單套用“實物電商系統”對“大型票務系統”做需求分析 “大…

FLV文件格式(Z)(轉載)

剛才在看一些關于demux的東西&#xff0c;在處理flv格式的文件的時候&#xff0c;由于自己對flv文件的格式不了解&#xff0c;所以就比較云頭轉向&#xff0c;正好看到了一篇講述flv文件格式的文章&#xff0c;寫的比較明白&#xff0c;所以就轉過來了。O(∩_∩)O~flv頭文件比較…

mysql-5.7中的innodb_buffer_pool_prefetching(read-ahead)詳解

一、innodb的read-ahead是什么&#xff1a; 所謂的read-ahead就是innodb根據你現在訪問的數據&#xff0c;推測出你接下來可能要訪問的數據&#xff0c;并把它們(可能要訪問的數據)讀入 內存。 二、read-ahead是怎么做到的&#xff1a; 1、總的來說read-ahead利用的是程序的局部…

python compare excel_python簡單操作excle的方法

Python操作Excle文件&#xff1a;使用xlwt庫將數據寫入Excel表格&#xff0c;使用xlrd 庫從Excel讀取數據。從excle讀取數據存入數據庫1、導入模塊&#xff1a;import xlrd2、打開excle文件&#xff1a;data xlrd.open_workbook(excel.xls)3、獲取表、行/列值、行/列數、單元值…

collections系列

class Counter(dict):  Counter類繼承dict類、繼承了dict的所有功能計數器&#xff1a; 例&#xff1a;import collections obj collections.Counter(sdkasdioasdjoasjdoasd) print(obj)得&#xff1a;Counter({s: 5, d: 5, a: 4, o: 3, j: 2, k: 1, i: 1}) 拿到前幾位&…

Python中的虛擬環境-virtualenv

更低層次: virtualenv virtualenv 是一個創建隔絕的Python環境的 工具。virtualenv創建一個包含所有必要的可執行文件的文件夾&#xff0c;用來使用Python工程所需的包。 它可以獨立使用&#xff0c;代替Pipenv。 通過pip安裝virtualenv&#xff1a; $ pip install virtual…

mp4文件格式解析(一)

原文地址&#xff1a;mp4文件格式解析&#xff08;一&#xff09;作者&#xff1a;可下人間目前MP4的概念被炒得很火&#xff0c;也很亂。最開始MP4指的是音頻&#xff08;MP3的升級版&#xff09;&#xff0c;即MPEG-2 AAC標準。隨后MP4概念被轉移到視頻上&#xff0c;對應的是…

shiro身份驗證測試

2019獨角獸企業重金招聘Python工程師標準>>> 一、登錄驗證 1、首先在shiro.ini里準備一些用戶身份/憑據&#xff0c;后面這里會使用數據庫代替&#xff0c;如&#xff1a; [users] [main] #realm jdbcRealmcom.learnging.system.shiro.ShiroRealm securityManager…

shell if多個條件判斷_萌新關于Excel VBA中IF條件判斷語句的一點心得體會

作者:金人瑞 《Excel VBA175例無理論純實戰教程》學員最近正在學習鄭廣學老師的VBA 175例教程&#xff0c;這是一篇新手向的文章&#xff0c;也是一個新手的總結&#xff0c;高手可以批評文章中的不足之處&#xff0c;也可以無視&#xff0c;VBA中的IF判斷, 判斷一般起到控制作…

Django筆記01-基礎:一個完美主義的web框架

淺談Web框架 一,什么是框架? 軟件框架就是為實現或完成某種軟件開發時,提供了一些基礎的軟件產品, 框架的功能類似于基礎設施,提供并實現最為基礎的軟件架構和體系 通常情況下我們依據框架來實現更為復雜的業務程序開發 一個字,框架就是程序的骨架 二,框架的優缺點 可重…

mysql存儲引擎的一點學習心得總結

首先我們應該了解mysql中的一個重要特性——插件式存儲引擎&#xff0c;從名字就能夠看出在mysql中&#xff0c;用戶能夠依據自己的需求隨意的選擇存儲引擎。實際上也是這樣。即使在同一個數據庫中。不同的表也能夠使用不同的存儲引擎。Mysql中支持的存儲引擎有非常多種&#x…

常見音視頻格式(轉載)

Contents 1 MPEG 系列 1.1 MPEG-1 1.2 MPEG-2 1.3 MPEG-4 1.4 MPEG-4 AVC 1.5 MPEG Audio Layer 1/2 1.6 MPEG Audio Layer 3 1.7 MPEG-2 AAC 1.8 MPEG-4 AAC 1.9 MPEG-4 aacPlus 1.10 MPEG-4 VQF 1.11 mp3PRO 1.12 MP3 Surround 2 DVD系列 2.1 Dolby Digital AC3 2.2 Dolby D…

編程語言難度排名_谷歌排名第一的編程語言,小學生拿來做答題,分分鐘鐘搞定高難度算法!...

點擊上方藍色文字關注我們吧谷歌排名第一的編程語言時什么&#xff1f;毫無疑問&#xff1a;肯定是 Python。 也難怪&#xff0c;作為大數據時代和人工智能時代的必備語言&#xff0c;Python 的優點太多了&#xff0c;語言簡潔、易學、開發效率高、可移植性強...... 另外&#…

poj 2484 A Funny Game

題目&#xff1a;http://poj.org/problem?id2484 一&#xff0c;題意&#xff1a; n個硬幣圍成一個圈&#xff0c;Alice與Bob輪流從圈中取硬幣。每次能夠取一枚或者連續的兩枚。 硬幣取走后留下的空位不用填補&#xff0c;空位相隔的兩個硬幣視為不相鄰。Alice第一個開始取。 …

58到家MySQL軍規升級版

一、基礎規范 表存儲引擎必須使用InnoDB 表字符集默認使用utf8&#xff0c;必要時候使用utf8mb4 解讀&#xff1a; &#xff08;1&#xff09;通用&#xff0c;無亂碼風險&#xff0c;漢字3字節&#xff0c;英文1字節 &#xff08;2&#xff09;utf8mb4是utf8的超集&#…

jsp 中包含 一個路徑為變量的文件

<head><base href"<%basePath%>"><% String fileroot"MyJsp.jsp"; %> </head><body><jsp:include page"<%fileroot %>" ></jsp:include></body>