PVR技術(shù)應(yīng)用于SDTV機(jī)頂盒的研究與實現(xiàn)
——
1 PVR概念和技術(shù)介紹
隨著硬盤技術(shù)的發(fā)展,硬盤的容量和速度在不斷地提高,基于硬盤的個人視頻錄像機(jī)已成為新型消費類產(chǎn)品,將逐步取代磁帶式錄像機(jī)。PVR的突出特點是以硬盤作為存儲媒介,建立本地的海量緩沖區(qū)和巨大的節(jié)目存儲庫,利用數(shù)字化處理技術(shù)對節(jié)目進(jìn)行控制和管理。硬盤容量大、數(shù)字式、訪問快速的存儲特性使得機(jī)頂盒PVR與傳統(tǒng)的錄像機(jī)相比具有如下特點:
(1)存儲容量巨大,能夠進(jìn)行更長時間的節(jié)目存儲。以40G硬盤為例,能錄制長達(dá)20小時的標(biāo)準(zhǔn)清晰度數(shù)字電視節(jié)目;
(2)硬盤的尋道和定位速度非???,可以輕易找到已錄制的節(jié)目,立即播放,節(jié)省了倒帶時間。
(3)硬盤載體中數(shù)據(jù)的存儲和讀取非常準(zhǔn)確,有效地降低了存儲和讀取過程中可能出現(xiàn)的誤碼現(xiàn)象。
(4)可以實現(xiàn)時移播放功能。
時移播放是PVR技術(shù)的一大特點,也是機(jī)頂盒PVR的基本功能。機(jī)頂盒PVR在硬盤中開設(shè)了海量緩存區(qū),在播放數(shù)字電視的同時,對節(jié)目進(jìn)行實時存儲,緩存區(qū)間可以錄制長達(dá)數(shù)小時的節(jié)目。通過緩存技術(shù),用戶可以對正在播放的電視節(jié)目進(jìn)行暫停,過一段時間后又可以從節(jié)目的暫停處繼續(xù)播放,就好象時間發(fā)生了移動一樣,如圖1所示。
2 PVR數(shù)字電視機(jī)頂盒硬件平臺
本課題的研究內(nèi)容是開發(fā)一種應(yīng)用于有線電視的具有PVR功能的標(biāo)準(zhǔn)清晰度數(shù)字電視機(jī)頂盒。系統(tǒng)采用ST公司的單片信源解碼器芯片STi5518實現(xiàn)標(biāo)準(zhǔn)清晰度數(shù)字電視解碼,其內(nèi)嵌的ATAPI接口實現(xiàn)了與硬盤的無縫連接,為機(jī)頂盒實現(xiàn)PVR功能提供了條件。機(jī)頂盒的原理框圖如圖2所示。信號經(jīng)過QAM解調(diào)后,以TS流的形式傳入STi5518,通過解復(fù)用將其分解為音、視頻PES包。PES包既可以被送往音、視頻解碼器解碼,也可以被送到ATAPI接口作為數(shù)據(jù)存入硬盤。
3 STi5518與硬盤接口的連接
STi5518內(nèi)嵌的ATAPI接口可提供最高為PIO模式4的數(shù)據(jù)傳輸,傳輸速率為16.7MB/s。ATAPI設(shè)備可作為STi5518的存儲器映像設(shè)備。本系統(tǒng)將硬盤映射到CPU可編程的外部存儲器接口EMI的BANKl上。圖3給出了STi5518與硬盤的接口圖。
STi5518地址線的第20、19位分別與硬盤的CSl、CS0相連,地址線的第18、17、16位分別與硬盤的DA2、DAl、DA0相連,這樣可通過訪問BANKl的存儲空間實現(xiàn)對硬盤的讀寫操作。ST5518提供的可編程I/O口中的ATAPI_WR和ATAPI_RD專門用來連接硬盤的DIOW和DIOR。ST5518的讀寫信號CPU_RW用來控制傳輸門的數(shù)據(jù)傳送方向。
4硬盤基本讀寫操作的控制
主機(jī)對硬盤的操作是通過將命令代碼和訪問的地址寫入硬盤控制電路中的相應(yīng)I/O寄存器來實現(xiàn)的。以寫一個扇區(qū)的操作為例。首先,主機(jī)查詢硬盤狀態(tài)寄存器,如果BSY位為0、DRDY位為1,則可以執(zhí)行操作。然后把所要寫的CHS參數(shù)或LBA參數(shù)寫入扇區(qū)號寄存器、柱面低位寄存器、柱面高位寄存器、扇區(qū)數(shù)寄存器和設(shè)備/磁頭號寄存器,同時將寫扇區(qū)命令號0x30h寫入命令寄存器。如果沒有發(fā)生錯誤,查詢狀態(tài)寄存器的DRQ位。如果為1,表示硬盤已經(jīng)做好傳送數(shù)據(jù)的準(zhǔn)備。最后將數(shù)據(jù)寫入數(shù)據(jù)寄存器并查詢狀態(tài)寄存器的ERR位,如果沒有發(fā)生錯誤則寫扇區(qū)成功。
5機(jī)頂盒中PVR的系統(tǒng)軟件設(shè)計
在系統(tǒng)軟件設(shè)計上,沒有用到中間件,所有開發(fā)的上層應(yīng)用程序都是直接利用ST公司提供的底層硬件驅(qū)動庫完成的。PVR的系統(tǒng)軟件結(jié)構(gòu)如圖4所示。主要分三個層次:
(1)ATAPI接口驅(qū)動層,用來實現(xiàn)讀寫硬盤的基本控制。這部分的軟件設(shè)計主要是利用ANSI制訂的ATAPI接口標(biāo)準(zhǔn)中所規(guī)定的命令格式來實現(xiàn)STi5518對硬盤數(shù)據(jù)的讀寫控制。
(2)文件系統(tǒng)驅(qū)動層,主要是建立文件系統(tǒng),實現(xiàn)操作節(jié)目文件的基本功能。
(3)節(jié)目管理層,用來完成節(jié)目記錄、回放、管理等功能。
5.1 PVR的音視頻文件系統(tǒng)
5.1.1 PVR文件系統(tǒng)結(jié)構(gòu)
為了在硬盤上實現(xiàn)數(shù)據(jù)的有效管理必須建立文件系統(tǒng)。本系統(tǒng)硬盤上的數(shù)據(jù)按照其不同的特點和作用分為主引導(dǎo)區(qū)(MBR)、根扇區(qū)(RS)、主CAT(簇分配表)區(qū)和數(shù)據(jù)區(qū)。
主引導(dǎo)區(qū)位于硬盤的第一個扇區(qū),也就是邏輯0扇區(qū),其結(jié)構(gòu)如圖5所示。前446字節(jié)用于放置操作系統(tǒng)的引導(dǎo)程序,后64字節(jié)(偏移量1BEH-偏移量1FDH)存儲DPT(硬盤分區(qū)表),該分區(qū)表記錄4個分區(qū)信息,每個分區(qū)信息里分別記錄該分區(qū)的分區(qū)狀態(tài)、起始LBA地址、分區(qū)大小、分區(qū)類型,系統(tǒng)初始化時通過讀取分區(qū)表來獲得硬盤空間的分配情況。最后兩個字節(jié)"55,AA"(偏移量1FEH-偏移量1FFH)是分區(qū)的結(jié)束標(biāo)志。整個512字節(jié)構(gòu)成了硬盤的主引導(dǎo)區(qū)。
根扇區(qū)位于每一個分區(qū)的前兩個扇區(qū),用于記錄與文件系統(tǒng)相關(guān)的數(shù)據(jù),包括文件系統(tǒng)的版本號、文件系統(tǒng)狀態(tài)標(biāo)志、簇的大小、主CAT大小、文件數(shù)據(jù)區(qū)起始地址及大小、根目錄地址。文件系統(tǒng)中數(shù)據(jù)存儲的最小單位是簇。簇一般由若干扇區(qū)組成,其數(shù)目根據(jù)硬盤的大小和操作的實際要求來定,數(shù)目過大或過小都會影響系統(tǒng)的運行性能。本系統(tǒng)根據(jù)具體試驗采用每簇大小為32個扇區(qū)。
主CAT區(qū)記錄了每一個簇塊(255個簇)中末使用的簇的數(shù)目,通過它可以方便地計算一個硬盤分區(qū)剩余空間的大小。
數(shù)據(jù)區(qū)是真正意義上的數(shù)據(jù)存儲的地方。本系統(tǒng)將一個分區(qū)中的數(shù)據(jù)區(qū)分成若干個簇塊,每個簇塊由三部分組成:區(qū)域CAT表、備份區(qū)和255個簇。每個區(qū)域CAT表記錄了其所屬簇塊的起始地址、255個簇的使用情況、存儲已占用簇的前繼內(nèi)容和后繼內(nèi)容的簇的地址似及CRC校驗值。通過采用簇塊方式將簇分配表分散在每個簇塊中,可以減少磁頭移動次數(shù),從而提高硬盤的訪問速度。
在數(shù)據(jù)區(qū)中存有目錄,每個目錄包含36個目錄項,每個目錄項記錄硬盤中某一文件的文件名、大小、起始地址和結(jié)束簇地址、文件狀態(tài)標(biāo)志等信息。系統(tǒng)在讀取文件時,可以根據(jù)目錄中的文件的起始簇地址以及區(qū)域CAT表準(zhǔn)確地定位存儲文件的各簇的位置。在本系統(tǒng)中只建立了一個目錄--根目錄,它的位置由根扇區(qū)中的分區(qū)表給定,大小固定為一個簇。
5.1.2文件系統(tǒng)的完整性設(shè)計
在設(shè)計,文件系統(tǒng)時,不僅要保證正常條件下系統(tǒng)的可靠的數(shù)據(jù)記錄功能,而且還要考慮異常情況下出現(xiàn)的系統(tǒng)錯誤能夠被修復(fù)。系統(tǒng)在根扇區(qū)設(shè)置了一個標(biāo)志位用以表明文件系統(tǒng)是否打開。如果要打開一個關(guān)閉的文件系統(tǒng),而標(biāo)志位表明該文件系統(tǒng)已經(jīng)打開,則說明文件系統(tǒng)沒有被正確關(guān)閉,此時就要進(jìn)行系統(tǒng)檢查以糾正系統(tǒng)中的錯誤。文件系統(tǒng)的恢復(fù)包括:恢復(fù)任何寫操作時被中斷的系統(tǒng)數(shù)據(jù)、重新完成未完成的操作、重建主CAT表、重建文件數(shù)據(jù)。實現(xiàn)的方法是訪問根目錄中所有目錄項及其相關(guān)的區(qū)域CAT表,沿著文件指針鏈表檢查簇指針的鏈接是否正確,并核對空閑簇的數(shù)量是否和主CAT表的一致。圖6給出了一個完整的系統(tǒng)文件檢錯并恢復(fù)的流程圖。
為了保護(hù)系統(tǒng)數(shù)據(jù),本文件系統(tǒng)使用了寫備份的方法,即在將數(shù)據(jù)寫入原始地址之前先寫入備份區(qū),當(dāng)數(shù)據(jù)發(fā)生錯誤時可以通過備份數(shù)據(jù)恢復(fù)文件。
在讀取數(shù)據(jù)時系統(tǒng)首先檢查區(qū)域CAT表的CRC值,如果不正確就從備份區(qū)讀出數(shù)據(jù),同時檢查備份區(qū)的CRC值;如果正確則讀出數(shù)據(jù)并把備份的數(shù)據(jù)寫入簇塊地址,否則文件數(shù)據(jù)無法恢復(fù)。對于根扇區(qū),由于它沒有簇塊,因而沒有備份區(qū)。系統(tǒng)選用分區(qū)表的第二個扇區(qū)作為根扇區(qū)的備份。主CAT表的備份方法與簇塊的方法相同。圖7、圖8分別為系統(tǒng)數(shù)據(jù)備份時的寫、讀流程。
5.2 PVR系統(tǒng)的節(jié)目操作與管理
節(jié)目操作與管理對應(yīng)PVR系統(tǒng)軟件層次上的節(jié)目管理層,該層用來完成節(jié)目記錄、回放、時移、特技播放等功能。
5.2.1節(jié)目流的記錄
TS流從外部接口進(jìn)入STi5518的解復(fù)用模塊,通過PID濾波器選出指定的一路節(jié)目并拆包成PES流。在錄制節(jié)目時需要將PES流數(shù)據(jù)寫入硬盤。由于硬盤的讀寫速度較慢,因此在系統(tǒng)中開辟一個PreBuffer來緩沖數(shù)據(jù)。當(dāng)PreBuffer中的數(shù)據(jù)達(dá)到門限值時,將其所存數(shù)據(jù)寫入硬盤。在設(shè)計時,寫PreBuffer與寫硬盤的操作采用兩個并行的Task來完成,任務(wù)間通過信號燈同步。記錄流程如圖9所示。
5.2.2節(jié)目流的回放
當(dāng)播放硬盤上的節(jié)目時,從硬盤中讀出的數(shù)據(jù)要放到讀緩沖區(qū)中。PES包的頭部信息中的stream_id字段標(biāo)明了PES包內(nèi)的信息類型。首先通過程序判別把視頻和音頻數(shù)據(jù)分開,送到視頻和音頻的Bit_buffer中,然后分別通過視頻和音頻解碼器解碼。Bit_buffer中的數(shù)據(jù)應(yīng)該始終保持一定的數(shù)量以保證有足夠的數(shù)據(jù)進(jìn)行解碼。因此程序要不斷檢測Bit_buffer的數(shù)據(jù)大小,如果小于一定門限值就通知數(shù)據(jù)傳輸Task把新的數(shù)據(jù)送到Bit_buffer中。節(jié)目回放流程如圖10所示。
5.2.3節(jié)目的時移播放
記錄在硬盤上的文件有兩種類型:常規(guī)文件和循環(huán)文件。正常錄制的節(jié)目為常規(guī)文件,文件的大小會隨著記錄時間的增長而增加,直到節(jié)目錄制完成或硬盤空間耗盡為止;而時移播放時使用一種特殊的文件記錄格式--循環(huán)文件,循環(huán)文件大小固定,有一個讀指針和一個寫指針。由于時移錄像的目的不是把節(jié)目錄下來回放而是使節(jié)目在硬盤上緩存一定的時間,因而播放過的部分就不再需要存儲了。當(dāng)開始時移錄像時,系統(tǒng)要把節(jié)目數(shù)據(jù)存儲到硬盤中,寫指針會向后移動,畫面靜止在錄像開始的時刻;當(dāng)恢復(fù)收看時,系統(tǒng)讀取硬盤中的節(jié)目數(shù)據(jù)播放,讀指針開始向后移動,此時讀指針和寫指針之間的距離就是節(jié)目的延時時間。當(dāng)指針到達(dá)文件尾時會回到文件頭部繼續(xù)移動,直到時移播放結(jié)束為止。由此可知,循環(huán)文件的大小決定了蘆目的最大時移。
5.2.4節(jié)目的特技播放
特技播放是指快放、慢放等非逗常速度的播放方式。它復(fù)磁帶式錄像機(jī)所具有的功能,在模擬的磁帶錄像機(jī)中可以通過改變磁帶的播放方向和速度來實現(xiàn)。但是在數(shù)字錄像機(jī)中,這個功能需要采用不同的方法來實現(xiàn)。數(shù)字視頻的動態(tài)圖像是由一幀一幀的畫面組成的,為了實現(xiàn)快速播放,解碼器需要跳過某些幀。根據(jù)播放的速度,可以計算出每個GOP中跳過的幀的數(shù)目,對剩下的幀以正常速度解碼,就可以實現(xiàn)快速播放。很明顯,速度越快,跳過不解碼的幀數(shù)就越多。同樣,慢放時可以讓解碼器每幀重復(fù)播放一次,就可以使播放速度放慢一倍,而實現(xiàn)慢放。
本課題在實現(xiàn)了標(biāo)準(zhǔn)清晰度數(shù)字電視信源解碼器的基礎(chǔ)上,完成了數(shù)字錄像機(jī)的功能,實現(xiàn)了數(shù)字電視節(jié)目的錄像和時移播放等功能,提高了機(jī)頂盒的應(yīng)用價值。本論文所介紹的內(nèi)容是天津市數(shù)字信息技術(shù)研究與開發(fā)中心的"標(biāo)準(zhǔn)清晰度數(shù)字電視機(jī)頂盒"項目的一部分,現(xiàn)已實現(xiàn)了由科研樣機(jī)向產(chǎn)品樣機(jī)的轉(zhuǎn)化。該項目技術(shù)已向相關(guān)企業(yè)進(jìn)行了技術(shù)轉(zhuǎn)讓。
評論