




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第一章MPEG-2簡介
什么是MPEG和MPEG-2?
MPEG是MovingPictureExpertsGroup的簡稱,MPEG-2是MPEG和ISO組織設計的
一個數(shù)字視頻壓縮規(guī)范,主要用于DVD和DVB上,當前的標準文檔是ISO13818.
什么是DVB?
DVB是DigtalVideoBroadcast的簡稱,是歐洲所有國家和其他部分國家和地區(qū)使用的數(shù)字電
視標準.其中美國的ATSC標準也是在DVB標準的基礎(chǔ)上實現(xiàn)的.
什么是TS碼流利PS流?
TS是transportstream的簡稱,就是“傳輸流”.DVB數(shù)據(jù)廣播采用的數(shù)據(jù)格式就是TS
碼流.
PS是programstream的簡稱,就是"節(jié)目流”.DVD中采用的數(shù)據(jù)格式就是PS流.
這兩種流的格式是不同的,TS格式具有很強的錯誤校正功能,適合傳輸,而PS格式適合
存儲在媒體中.在這里,著重描述的是TS碼流格式.
什么是PID?
PID是Packetidentification的簡稱,就是“包標志符”.DVB系統(tǒng)把不同的數(shù)據(jù)打包成
不同的數(shù)據(jù)包,用系統(tǒng)唯一的一個13bits數(shù)字標志該數(shù)據(jù)的類型.例如,PIDRxOO表示是
DVB系統(tǒng)中的PAT包,而PID=0xl0表示是DVB系統(tǒng)的NIT包.不同的節(jié)目(包括Video和
Audio)分別采用不同的PID,例如,我們在PMT表中如果檢測到PID=0x0120的PID是VIDEO
數(shù)據(jù),那么表示包號碼是0x0120的所有包都是Video數(shù)據(jù),其他依此類推.
什么是PAT?
PAT是ProgramAssociationTable的簡稱,即”節(jié)目關(guān)聯(lián)表”.PAT屬于DVB系統(tǒng)流中
的一個包,包號碼(PID)是OxOO.PAT表描述了DVB系統(tǒng)流中包含什么樣的PID,主要是描述當
前流的NIT表格的PID號碼是多少,當前流中有多少個不同類型PMT表,每個PMT表對應的
頻道號等信息.
什么是PMT?
PMT是ProgramMapTable的簡稱,即”節(jié)目影射表”.PMT的PID是服務器自由定
義的(但不會和系統(tǒng)保留的PID沖突).這個PID是在PAT表中描述的,比如,如果在FWT表中有
0x100項的內(nèi)容,那么說明所有PID是0x100的包都是PMT表.不同的頻道有不同的PMT,也
就是說,一個不同的PMT代表的是一個不同頻道.PMT表格和PAT表格配合在一起,就可以
檢測出DVB流中所有存在節(jié)目的所有P1D,因此,數(shù)字電視搜臺就是依靠這兩個表格數(shù)據(jù)完
成的.
什么是CAT?
CAT是ConditionalAccessTable的簡稱,即”條件訪問表”,PID是0x01.CAT攜帶的是
服務器的私有信息(CA系統(tǒng)就需要使用該表格實現(xiàn)節(jié)目的解密).
什么是SDT?
SDT是ServiceDescriptionTable的簡稱,即”服務器描述表”,PID是Oxll.SDT攜帶的
是電視臺名稱和電視節(jié)目名稱.DVB接收系統(tǒng)接收SDT表中的節(jié)目信息,實現(xiàn)比較友好的界
面顯示和操作.
什么是NIT和EIT?
NIT是NetworkInformationTable的簡稱,即”網(wǎng)絡信息表”.
EIT是EventInformationTable的簡稱,即”環(huán)境信息表”.
NIT可以提供當前流的節(jié)目信息,也可以提供和當前流有關(guān)聯(lián)的流的節(jié)目信息.
EIT提供的是流節(jié)目信息的改變,比如?個節(jié)目已經(jīng)開始,或者已經(jīng)結(jié)束的信息等.
什么是EPG?
EPG是ElectronicProgrammeGuides的簡稱,即“電子節(jié)目指南”.該功能可實現(xiàn)預告
近段時間即將播放的節(jié)目內(nèi)容,同時支持基于內(nèi)容的檢索.
什么是teletext?
Teletext就是我們常說的”圖文電視”,當然在MPEG-2中,圖文電視已經(jīng)數(shù)字化,也就
是說,圖文信息已經(jīng)做為數(shù)字化信息在TS流中傳播.但最終,數(shù)字化的圖文信息都將轉(zhuǎn)化為
模擬的VBI信息插入到正常的電視信號中實現(xiàn)圖文電視的顯示.圖文電視有很多標準,比如
closecaption,WSS等,歐洲的DVB使用的teletext標準是ITU-RSystemBTeletext規(guī)格.該規(guī)
格支持歐洲多種語言,支持簡單圖象和文本的混合顯示.
第二章DVB系統(tǒng)的構(gòu)成
[本文不詳細描述DVB系統(tǒng)的硬件構(gòu)成,只是根據(jù)ISO13818中的描述,詳細解釋TS碼流的格
式和解復用原理.(夠了,夠了呵呵)]
DVB的分類
DVB根據(jù)應用的不同,主要分為DVB-S,DVB-C,DVB-T,DVB-H等多種規(guī)格.不同的規(guī)格基本
原理都是相同的,不同的主要是調(diào)制方式不同:
DVB-S,S是Satelite的首字母,應用于數(shù)字電視衛(wèi)星廣播,調(diào)制方式是QPSK.
DVB-C,C是Cable的首字母,應用于城市有線廣播.調(diào)制方式是QAM所有格式:
16QAM,32QAM,64QAM,128QAM.256QAM.
DVB-T,T是Terrestrial的首字母,應用于陸地無線廣播,調(diào)制方式是QPSK或者16QAM和
64QAM.
DVB-H.H是Handheld的首字母,應用于手持無線廣播,調(diào)制方式和DVB-T相同.
總的來說,不同的DVB系統(tǒng)只有前端系統(tǒng)是不同的,最終的數(shù)字信息都是相同的,也就是都
是采用ISO13818描述的規(guī)格.前端系統(tǒng)主要是指調(diào)制方法和發(fā)射方法等.因此,這里所敘述
的內(nèi)容,全部適用于所有的DVB系統(tǒng),同時因為美國的ATSC系統(tǒng)也是在DVB系統(tǒng)上的小量
更改和小部分功能增加,因此也適用于ATSC標準.
基本系統(tǒng)描述如下:
(1)編碼系統(tǒng):
假設信號源有6個節(jié)目,則DVB系統(tǒng)先對這6個節(jié)目的所有數(shù)據(jù)(Video,Audio)進行壓縮
處理,然后經(jīng)過一個叫做"復用"的程序進行節(jié)目的復用(PID分配,即對6個節(jié)目分別分配不
同的PID號碼)形成叫做"PES”的包,然后再經(jīng)過TS流處理程序,把這些PES包全部封裝成TS
碼流格式,最后把獲得的TS格式的數(shù)字信號經(jīng)過調(diào)制(實現(xiàn)的是頻率的復用),然后經(jīng)過D/A
轉(zhuǎn)換成模擬信號,再次調(diào)制成高頻信號,經(jīng)傳輸系統(tǒng)發(fā)送出去.
(2)解碼系統(tǒng)
接收系統(tǒng)接收到高頻信號,先轉(zhuǎn)化為中頻信號,然后再經(jīng)過一個高速的A/D轉(zhuǎn)換成數(shù)字信
號,接著經(jīng)過一個反調(diào)制程序,這樣就得到了TS碼流.TS碼流進入一個稱為"解復用"的程序,
該程序?qū)崿F(xiàn)自動分析TS流中的表格信息,讀取所有可用的PID信息等,然后提取一個用戶指
定的PID(用戶選擇的節(jié)目),把該節(jié)目的數(shù)字信號全部接收而忽略其他不需要的信號,然后
Video,Audio信號分別進入不同的解壓縮程序,分別對Video,Audio信號進行解壓縮和顯示,
如果該節(jié)目包含了Teletext和EPG也有可能同時處理Teletext和EPG并且把處理的結(jié)果和
Video信號一起置加到屏幕上.
Packet的概念
(1)TS流是基于Packet的位流格式,每個包是188字節(jié)或者204字節(jié)(一般是188字節(jié),204字
節(jié)的格式僅僅是在188字節(jié)的Packet后部加上16字節(jié)的CRC數(shù)據(jù),其他格式是一樣的),整個
TS流組成如下所示:
Packet1Packet2.....Packetn
在實際使用中,因為TS流已經(jīng)內(nèi)部具有很強的錯誤處理能力,所以一般使用較多的是188字
節(jié)一個包的格式,204字節(jié)?個包的格式據(jù)說一般在高清節(jié)目中使用較多.
所有的Packet格式都是統(tǒng)一的,包括一個Packetheader和Packetdatas.其中Packetheader包
含了同步字節(jié)(該字節(jié)固定是0x47,表示這個包的數(shù)據(jù)開始是正確的),該Packet的唯一號碼(即
PID)和其他一些信息,格式如下(用C格式表示)
typedefstruct
unsignedsync_byte:8;/*8bits的同步字節(jié)*/
unsignedtransport_error_indicator:1;/*1bit的錯誤指示信息,1表示當前Packet至少有Ibit的
傳輸錯誤,0表示所有數(shù)據(jù)都正確*/
unsignedpayload_unit_start_indicator:1;/*負載單元開始標志晨請參考ISO13818-1了解該標志
作用*/
unsignedtransport_priority:1;/*1bit的傳輸優(yōu)先級標志,1表示高優(yōu)先級,0表示低優(yōu)先級*/
unsignedPID:13;/*13bits的PacketID號碼,唯一的號碼對應不同的包*/
unsignedtransport_scrambling_control:2;/*2bits的加密標志,00表示沒有加密,其他表示已被
加密*/
unsignedadaptation_field_control:2;/*2bits的附加區(qū)域控制,請參考ISO13818-1了解該標志
作用*/
unsignedcontinuity_counter:4;/*4bits的包遞增計數(shù)器*/
}PACKET_HEADER;
以上結(jié)構(gòu)剛好占用32bits,即4個字節(jié),因此一個TS流的Packet頭部的4字節(jié)是header信息,
分析該header信息就可以知道當前Packet的屬性.剩下的184字節(jié)有可能是Video數(shù)據(jù),也有
可能是Audio數(shù)據(jù),也有可能是DVBSI信息,怎么區(qū)分呢?其實很簡單,就是利用header中的
PID信息.上一章說了PAT是節(jié)目關(guān)聯(lián)表,它的PID是0x0000.這個PID就是對應這里header
的PID.換句話就是說,如果我們發(fā)現(xiàn)一個Packet的PID等于0x0000,那么說明這個Packet是
DVB的PAT表格而不是Video數(shù)據(jù)或者Audio數(shù)據(jù).
實際上,在信號編碼成TS碼流的時候,不同節(jié)目的Video,Audio等數(shù)據(jù)都分配了不同的PID.
例如,一個節(jié)目有兩路Video,三路Audio,那么分配PID的時候可能是Video
1=0x100,Video2==0x101,Audio1==0xl02,Audio2==0xl03,Audio3==0xl04,這樣傳輸?shù)?/p>
TS碼流中的PID就可能有以上的PID.因此,如果我們需要在程序中過濾出第一路Video和第
二路Audio就可以這樣處理了(偽代碼描述):
voidProcess_Packet(unsignedchar*buff)
intPID=GETPID(buff);/*從當前的188字節(jié)緩沖區(qū)中獲取PID信息*/
if(PID==0xl00)/*PID等于第一路Video的PID,說明當前數(shù)據(jù)是Video數(shù)據(jù)*/
SaveToVideoBuffer(buff+4);/*把header后部的數(shù)據(jù)存到Video緩沖區(qū),待后部處理*/
elseif(PID==0xl03)/*PID等于第二路Audio的PID,說明當前數(shù)據(jù)是Audio數(shù)據(jù)*/
SaveToAudioBuffer(buff+4);/*把header后部的數(shù)據(jù)存到Audio緩沖區(qū)*/
)
else/*其他PID則丟棄,當然如果PID是DVB系統(tǒng)保留的PID如PAT.PMT則必須處理*/
printf("unknownPlD!\n");
)
現(xiàn)在的問題是,編碼的時候分配好的PID,在解碼的時候是怎么知道什么PID對應什么數(shù)據(jù)
呢?這就是DVBSI表格的分析與處理了,請參考第三章.這里先看一個實際的TS碼流的例子.
這里的數(shù)據(jù)是用UltmEdit用16進制格式打開TS碼流文件得到的.文件是Taiwan-551.ts.
這里僅僅截取/3個Packet的信息,請注意圖中用紅色標注的部分,這就是TS流Packet的4
個字節(jié)的頭信息.這個TS流是采用每個包共188字節(jié)的格式,因為兩個頭信息的間隔是188
個字節(jié)(第一個0x47到第二個0x47的間隔).以后的所有的Packet都將是188字節(jié)的格式,這
是DVBTS標準規(guī)定的固定大小.那么這三個包分別包含的是什么數(shù)據(jù),下面我們可以自己
分析一下.
先看第一個包,頭信息數(shù)據(jù)是"0x470x070xe50x12",剛才已經(jīng)知道了,header信息都是按位
操作的(這就是為什么TS碼流也可以叫做位流的原因),特別要注意的是定義和傳輸?shù)臅r候
都是MSBfirst,也就是說,先出現(xiàn)的位是數(shù)據(jù)的最高位.先轉(zhuǎn)化成2進制格式:
01000111000001111110010100010010
請對照上面的PACKET_HEADER結(jié)構(gòu):
typedefstnact
{
unsignedsync_byte:8;
unsignedtransport_error_indicator:1;
unsignedpayload_unit_start_indicator:1;
unsignedtransport_priority:1;
unsignedPID:13;
unsignedtransport_scrambling_control:2;
unsignedadaptation_field_control:2;
unsignedcontinuity_counter:4;
}PACKET_HEADER;
那么對照一下,我們可以發(fā)現(xiàn):
sync_byte=01000111,就是0x47,這是DVBTS規(guī)定的同步字節(jié),固定是0x47.
transport_error_indicator=0,表示當前包沒有發(fā)生傳輸錯誤.
payload_unit_start_indicator=0,含義請參考ISO13818-1標準文檔
transport_priority=0,表示當前包是低優(yōu)先級.
P1D=OO11111100101即0x07e5,這代表是什么呢,暫時還不知道(實際上是VideoPID,參考下
圖)
lransport_scrambling_conlrol=00,表示節(jié)目沒有加密
adaptation_field_control=01即0x01,具體含義請參考ISO13818-1
continuity_counte=0010即0x02,表示當前傳送的相同類型的包是第3個
依此類推,再看一下第二個包”0x470x070xe50x13”,2進制是010001110000011111100101
00010011
sync_byte=01000111,就是0x47,這是DVBTS規(guī)定的同步字節(jié),固定是0x47.
transpon_error_indicator=0,表示當前包沒有發(fā)生傳輸錯誤.
payload_unit_start_indicator=0,含義請參考ISO13818-1標準文檔
transport_priority=0,表示當前包是低優(yōu)先級.
PID=0011111100101即0x07e5,這代表是什么呢,暫時還不知道(實際上是VideoPID,參考下
圖)
lransport_scrambling_control=00,表示節(jié)目沒有加密
adaptation_field_control=01即0x01,具體含義請參考ISO13818-1
continuity_counte=0011即0x03,表示當前傳送的相同類型的包是第4個(注意到了吧,以上兩
個包的PID都是0x07e5,所以這里的continuity_counte就遞增一次)
第三個包是“0x470x07Oxfl0x18”,2進制是01000111000001111111000100011000.
sync_byte=01000111,0x47,這是DVBTS規(guī)定的同步字節(jié),固定是0x47.
transport_eiror_indicator=0,表示當前包沒有發(fā)生傳輸錯誤.
payload_unit_start_indicator=0,含義請參考ISO13818-1標準文檔
transport_priority=0,表示當前包是低優(yōu)先級.
PID=0011111100101即0x07fl,這代表是什么呢,暫時還不知道(實際上是AudioPID,參考下
圖)
transport_scrambling_control=00,表示節(jié)目沒有加密
adaptation_field_control=01即0x01,具體含義請參考ISO13818-1
continuity_counte=1000即0x08,表示當前傳送的相同類型的包是第9個
請看解碼程序《SeekforMPEG-2decoder>>讀取該文件的結(jié)果:
上圖我們可以發(fā)現(xiàn),Taiwan-55l.ts有一個節(jié)目叫”DIMO",它的VideoPID是0x07e5,AudioPID
是0x07e6
還有一個節(jié)目叫"Service1",沒有VideoPID,它的AudioPID是0x07fl(說明是一個廣播節(jié)目而
非電視節(jié)目)
這個數(shù)據(jù)剛好和我們剛才的分析是吻合的.
但是我想大家還有疑問,為什么0x07e5代表VideoPlD,0x07e6代表其中一個AudioP1D呢?
這就是剛才提到的,這是TS流在編碼的時候就分配好了的.但是,在解碼的時候是怎么知道
0x07e5就代表的是Video而不是Audio呢?這就是第三章的內(nèi)容:DVBSI/PSI分析和處理.
第三章DVBSI/PS1分析和處理
SI是SpecificInformation的簡稱,PSI是programSpecificInformation.該機制允許DVB傳
送各種各樣的訊息,比如節(jié)目名稱,電視臺名稱,各種PID,私有信息,甚至單獨傳送數(shù)
據(jù)實現(xiàn)數(shù)據(jù)通信等.這些功能的實現(xiàn)都歸功于SI/PSL
在DVB標準中,定義了一個標準的PID用來實現(xiàn)SI/PSL這些PID是系統(tǒng)保留的,因此D
VB編碼的時候并不會用這些PID做為VideoPID或者AudioPID或者其他PID.在
一個簡單的解復用程序中,只需要提供處理PAT,PMT表格的程序即可實現(xiàn)解復用,當然如
果需要更友好的界面和實現(xiàn)更復雜的功能(如CA)則必須處理其他的SI表.在這里僅
僅分析PAT,PMT,SDT表格,其他SI表格的分析,請參考ISO13818-l(MPEG-2系統(tǒng)層標準)
和EN300468(DVBSI標準)文檔.
DVB定義的SI保留的P1D分別是:
上表格的P1D就是DVB保留的PID,分配的其他PID一定不會占用這些PID.解
復用程序需要使用到的表格只有PKT,PMT,SDT,而CA應用還需要使用CAT,EPG應用還需要
使用NIT,EIT,TDT,TOT等表格.所以在需要解復用的時候,偽代碼需要這樣寫:
voidProcess_Packet(unsignedchar*buff)
(
intPID=GETPID(buff);
if(PID==0x0000)/*這是PAT表*/
(
Process.PAT(buff+4);/*處理PAT表*/
)
elseif(PID==.....)/*Video或者Audio*/
else/*其他不支持的PID*/
printf("UnknownPID!");
所有的表格都開始于Packet中的184字節(jié)的數(shù)據(jù)部分,但有的時候一個表格沒有184字
節(jié),這時在Packet中就可能插入一些無效信息用來填充使整個Packet依然保持是188字
節(jié).也可能用頭信息中的payload_unit_start_indicator標志表格有個偏移位置(當
payload_unit_start_indicator=0表示表格數(shù)據(jù)直接從Packet區(qū)的第四個字節(jié)開始,否則表示有
一個偏移量位置開始,具體請參考1SO13818-1,第4字節(jié)到偏移量間的數(shù)據(jù)是系統(tǒng)填充的無
效數(shù)據(jù)).
下面針對解復用程序詳細分析一下PATPMT和SDT三類表格的格式.
PAT,ProgramAssociationTable,節(jié)目關(guān)聯(lián)表
PAT表攜帶以下信息:
(1)TS流ID---transport_stream_id,該ID標志唯一的流ID
⑵節(jié)目頻道號-program_number,該號碼標志TS流中的一個頻道,該頻道可以包含很多的
節(jié)目(即可以包含多個VideoPID和AudioPID)
(3)PMT的PID—program_map_PID,表示本頻道使用的哪個PID做為PMT的PID,因為
可以有很多的頻道,因此DVB規(guī)定PMT的PID可以由用戶自己定義.
PAT表定義如下:
各字段含義如下:
table_id:8bits,標志本表格的類型,應該是0x00
section_syntax_indicator:1bit,段語法標志,應該是T
’0':固定的'0',這是為了防止和ISO13818Vide。流格式中的控制字沖突而設置的.
Reserved:保留的2bits,保留位??般都是'0'
sectionjength:12bits的段大小,單位是Bytes.
transport_stream_id:16bits的當前流ID,DVB內(nèi)唯一.(事實上很多都是自定義的TSID)
version_number:5bits版本號碼,標注當前節(jié)目的版本.這是個非常有用的參數(shù),當檢測到
這個字段改變時,說明TS流中的節(jié)目已經(jīng)變化了,程序必須重新搜索節(jié)目.
current_next_indicator:1bit:當前還是未來使用標志符,一般情況下為"0,
section_number:8bits當前段號碼
last_section_number:8bits最后段號碼(section_number和last_section_number的功能是當PAT
內(nèi)容>184字節(jié)時,PAT表會分成多個段(sections),解復用程序必須在全部接收完成后再進行
PAT的分析)
從for()開始,就是描述了當前流中的頻道數(shù)目(N),每一個頻道對應的PMTP1D是什么.解
復用程序需要和上圖類似的循環(huán)來接收所有的頻道號碼和對應的PMTPID,并把這些信息在
緩沖區(qū)中保存起來.在后部的處理中需要使用到PMTPID.
CRC_32:本段的CRC校驗值,一般是會忽略的.N是一個變量,計算方法是
N=(section_length-9)/4.
從以上分析我們可以發(fā)現(xiàn),PAT表主要包含頻道號碼和每一個頻道對應的PMT的PID號碼,
這些信息我們在處理PAT表格的時候會保存起來,以后會使用到這些數(shù)據(jù).例如我們可以定義
這樣的數(shù)據(jù)結(jié)構(gòu)保存這些信息:
typedefstruct
intchannel_number;/*頻道號*/
intpmt_pid;/*對應channel_number頻道號的PMT的PID*/
}PMT」TEM;
PMT_ITEMpmt[64];/*定義最多64個頻道,這個結(jié)構(gòu)在分析PAT表格的時候會更新*/
PMT,ProgramMapTable,75目影射表
如果一個TS流中含有多個頻道,那么就會包含多個PID不同的PMT表.檢測是否PMT的偽
代碼如下:
voidProcess_Packet(unsignedchar*buff)
inti;
intPID=GETPID(buff);
if(PID==OxOOOO)/*PAT表格*/
(
Process_PAT(buff+4);
)
elseif(PID==.....)/*VideoPID或者AudioP1D*/
(
)
else
(
/*在這里檢測PID是否是PMT的PID*/
for(i=0;i<64;i++)
{
if(PlD==pmt[i].pmt_pid)/*PID等于在PAT檢測到的PMTPID相同*/
(
Process_PMT(buff+4);/*說明當前Packet是PMT,進入處理*/
break;
PMT表中包含的數(shù)據(jù)如下:
(1)當前頻道中包含的所有Video數(shù)據(jù)的PID
(2)當前頻道中包含的所有Audio數(shù)據(jù)的PID
(3)和當前頻道關(guān)聯(lián)在一起的其他數(shù)據(jù)的PID(如數(shù)字廣播,數(shù)據(jù)通訊等使用的PID)
PMT定義如下:
各字段含義如下:
table_id:8bits的ID,應該是0x02
section_syntax_indicator:Ibit的段語法標志,應該是T
’0':固定是'0',如果不是說明數(shù)據(jù)有錯.
reserved:2bits保留位,應該是‘00'
section_length:16bits段長度,從program_number開始倒CRC_32(包含)的字節(jié)總數(shù).
program_number:16bits的頻道號碼,表示當前的PMT關(guān)聯(lián)到的頻道.換句話就是說,當前描述
的是program_number頻道的信息.
reserved:2biis保留位,應該是‘00'
version_number:版本號碼,如果PMT內(nèi)容有更新,則version_number會遞增1通知解復用程
序需要重新接收節(jié)目信息,否則version_number是固定不變的.
current_next_indicator:當前未來標志符,一般是0
section_number:當前段號碼
last_section_number:最后段號碼,含義和PAT中的對應字段相同,請參考PAT部分.
reserved:3bits保留位,一般是‘000'.
PCR_PID:13bits的PCRPID,具體請參考ISO13818-1,解復用程序不使用該參數(shù).
reserved:4bits保留位,一般是‘0000'
program_info」ength:節(jié)目信息長度(之后的是N個描述符結(jié)構(gòu),一般可以忽略掉,這個字段就
代表描述符總的長度,單位是Bytes)
緊接著就是頻道內(nèi)部包含的節(jié)目類型和對應的P1D號碼了.
stream_type:8bits流類型,標志是Video還是Audio還是其他數(shù)據(jù).
reserved:3bits保留位.
elementary_PID:13bits對應的數(shù)據(jù)PID號碼(如果stream_type是Video,那么這個PID就是
VideoPID,如果stream_type標志是Audio,那么這個P1D就是AudioP1D)
reserved:4bits保留位.
ES_info」ength:和program_info」ength類似的信息長度(其后是N2個描述符號)
CRC_32:32bits段末尾是本段的CRC校驗值,一般忽略.
從以上的分析可以看出,只要我們處理了PMT,那么我們就可以獲取頻道中所有的PID信息,
例如當前頻道包含多少個Video,共多少個Audio,和其他數(shù)據(jù),還能知道每種數(shù)據(jù)對應的PID
分別是什么.
這樣如果我們要選擇其中一個Video和Audio收看,那么只需要把要收看的節(jié)目的VideoPID
和AudioPID保存起來,在處理Packet的時候進行過濾即可實現(xiàn).
比較全面實現(xiàn)解復用的偽代碼如下:
intVideo_PID=0x07e5,Audio_PID=0x07e6;/*一般是在PMT檢索后由用戶自己設置這兩個全
局值*/
voidProcess_Packet(unsignedchar*buff)
(
intI;
intPID=GETPID(buff);/*獲取當前Packet的PID*/
if(PID==0x0000)/*0x0000表示是PAT*/
Process_PAT(buff+4);
elseif(PID==Video_PID)/*和Video_PID相等,說明當前Packet是一個VideoPacket*/
SaveToVideoBuffer(buff+4);/*保存至ljVideo緩沖區(qū)*/
elseif(PID==Audio_PID)/*和Audio_PID相等,說明當前Packet是一個AudioPacket*/
SaveToAudioBuffer(buflf+4);/*保存至ljAudio緩沖區(qū)*/
else
for(i=0;i<64;i++)
if(PID==pmt[i].pmt_pid)
Process_PMT(buff+4);
Break;
以上偽代碼可以實現(xiàn)基本的解復用:檢測所有的頻道,檢測所有stream的PID,選擇特定的節(jié)目
進行播放.只要讀取每個Packet的188字節(jié)的內(nèi)容,然后每次都調(diào)用Process_Packet()即可實現(xiàn)
簡單的解復用.
介紹到這里,我們就可以總結(jié)一下DVB搜臺的原理了.(好!洗耳恭聽!)
機頂盒先調(diào)整高頻頭到一個固定的頻率(如498MHZ),如果此頻率有數(shù)字信號,則COFDM
芯片(如MT352)會自動把TS流數(shù)據(jù)傳送給MPEG-2decoder.MPEG-2decoder先進行數(shù)據(jù)
的同步,也就是等待完整的Packet的到來.然后循環(huán)查找是否出現(xiàn)PID==0x0000的Packet,如
果出現(xiàn)了,則馬上進入分析PAT的處理,獲取了所有的PMT的PID.接著循環(huán)查找是否出現(xiàn)
PMT,如果發(fā)現(xiàn)了,則自動進入PMT分析,獲取該頻段所有的頻道數(shù)據(jù)并保存.如果沒有發(fā)現(xiàn)
PAT或者沒有發(fā)現(xiàn)PMT,說明該頻段沒有信號,進入下一個頻率掃描.
從以上描述可以看出,機頂盒搜索頻率是隨機發(fā)生的,要使每次機頂盒都能搜索到信號,則
要求TS流每隔一段時間就發(fā)送?次PAT和PMT.事實上DVB傳輸系統(tǒng)就是這么做的.因此
無論何時接入終端系統(tǒng),系統(tǒng)都能馬上搜索到節(jié)日并正確解復用實現(xiàn)播放.不僅僅如此,其他
數(shù)據(jù)也都是交替?zhèn)魉偷?比如第一個Packet可能是PAT,第二個Packet可能是PMT,而第三個
Packet可能是Video1,第四個Packet可能是Video2,
只要系統(tǒng)傳輸速度足夠快(就是稱之為“碼率”的東東),實現(xiàn)實時播放是沒有任何問題的.
到這里雖然實現(xiàn)了解復用,但可以看出,使用的PID都是枯燥的數(shù)字,如果調(diào)臺要用戶自己輸
入數(shù)字那可是太麻煩了,而且還容易輸入錯誤,操作非常不直觀,即使做成一個菜單讓用戶選
擇也是非常的呆板.針對這個問題,DVB系統(tǒng)提出了一個SDT表格,該表格標志一個節(jié)目的名
稱,并且能和PMT中的PID聯(lián)系起來,這樣用戶就可以通過直接選擇節(jié)目名稱來選擇節(jié)目了.
SDT,Servicedescriptionsection,服務描述段
SDT可以提供的信息包括:
(1)該節(jié)目是否在播放中
(2)該節(jié)目是否被加密
(3)該節(jié)目的名稱
SDT定義如下:
各字段定義如下:
table_id:8bits的ID,可以是0x42,表示描述的是當前流的信息也可以是0x46,表示是其他流的
信息(EPG使用此參數(shù))
section_syntax_indicator:段語法標志,一般是T
reserved_future_used:2bits保留未來使用
reserved:Ibit保留位,防止控制字沖突,一般是O,也有可能是T
section_length:12bits的段氏度,單位是Bytes,從transport_stream_id開始,到CRC_32結(jié)束(包
含)
transport_stream_id:16bits當前描述的流ID
reserved:2bits保留位
version_number:5bits的版本號碼,如果數(shù)據(jù)更新則此字段遞增1
cuirent_next_indicator:當前未來標志,一般是O,表示當前馬上使用.
original_netword_id:16bits的原始網(wǎng)絡ID號
reserved_future_use:8bits保留未來使用位
接下來是N個節(jié)目信息的循環(huán):
service_id:16bits的服務器ID,實際上就是PMT段中的program_number.
reserved_future_used:6bits保留未來使用位
EIT_schedule_flag:Ibit的E1T信息,1表示當前流實現(xiàn)了該節(jié)目的EIT傳送
EIT_present_following_flag:Ibits的EIT信息」表示當前流實現(xiàn)了該節(jié)目的EIT傳送
running_status:3bits的運行狀態(tài)信息:1-還未播放2-兒分鐘后馬上開始,3-被暫停播出,4-正
在播放,其他一保留
free_CA_mode:1bits的加密信息,T表示該節(jié)目被加密.
緊接著的是描述符,一般是Servicedescriptor,分析此描述符可以獲取servive_id指定的節(jié)
目的節(jié)目名稱.具體格式請參考EN300468中的Servicedescriptor部分.分析完畢,則節(jié)目名稱
和節(jié)目號碼已經(jīng)聯(lián)系起來了.機頂盒程序就可以用這些節(jié)目名稱代替PID讓用戶選擇,從而
實現(xiàn)比較友好的用戶界面!
下面參考一下?SeekforMPEG2468(16?中的界面和顯示信息.
k圖是<<SeekforMPEG2decode〉〉打開三個不同的碼流文件(*.ts)形成的PID信息和節(jié)目
名稱.用戶可以通過切換節(jié)目名稱的下拉列表框切換節(jié)目,也可以通過“視頻流"和“音頻流”
下拉列表框切換Video和Audio!這些數(shù)據(jù)都是通過分析PAT,PMT和SDT得到的.
第四章Teletext原理
歐洲采用的Teletext標準叫做"ITU-RSystemBTeletext”,標準文檔是EN300472和EN300706.
該標準支持以下特性:
(1)24X40的文本字符顯示,也支持簡單的圖象信息的顯示.
⑵支持多頁碼,應用程序可以自由切換到任意選定的頁.
(3)支持多語言,可以在teletext中指定所使用的語言.
(4)文本支持自定義背景色,自定義前景色.支持長度,寬度加倍(doublewidth,doubleheight)
(5)所有數(shù)據(jù)采用了奇偶校驗和漢明碼編碼,具有比較強的錯誤處理功能.
(6)格式基本兼容模擬TTX,支持VBI插入teletext數(shù)據(jù).
Teletext數(shù)據(jù)是在TS流中和Video,Audio數(shù)據(jù)一起傳送的.EN300472規(guī)定采用以下方法識
別teletext數(shù)據(jù)的P1D:如果PMT段中的stream_type==Oxbd(private_stream_l),那么這個數(shù)據(jù)
流就是teletext或者subtitle數(shù)據(jù)(統(tǒng)稱為VBI數(shù)據(jù),具體區(qū)分還需要在teletext分析中處
理),VBI數(shù)據(jù)開始于PES包的數(shù)據(jù)部分.
Teletext在PES包中的格式如下:
各字段含義:
data_identifier:數(shù)據(jù)標志符,如果是teletext必須等于Ox10~0xIf.
data_unit_id:用來標志是teletext數(shù)據(jù)還是subtitle數(shù)據(jù).0x02表示是teletext,0x03表示是
subtitle.
data_field()是標準的teletext格式的數(shù)據(jù)包,參考下圖.實際上,一個data_field就是teletext的
一行數(shù)據(jù).
data_fiekl()的格式如下:
各字段含義如下:
reserved_future_use:2bits保留未來使用
field_parity:Ibit的奇偶標志,T表示是偶數(shù)場(下半場),0表示奇數(shù)場(上半場)
line_offset:5bits,在VBI插入時指定的場線數(shù)據(jù).(以上兩個參數(shù)在使用VBI硬件插入才需要
使用)
framing_code:8bits的幀同步代碼,必須是0xe4.
magazine_and_packet_address:16bits,指定當前傳送的雜志號碼和包號碼,采用的是漢明8/4
編碼.
其中的包號碼(Packetaddress)實際上代表的是TTX頁面的行號碼(0-24).
data_block:320bits,40Bytes的數(shù)據(jù)塊,全部采用奇偶校驗,對應TTX頁面的40列,范圍是
0x00-0x7f(最高位是奇偶校驗位).把這部分的數(shù)據(jù)全部提取出來,就可以獲得一個行的全部數(shù)
據(jù)(TTX是24行X40列).
因此,解teletext的軟件一般采用這樣的流程:
(1)分析PMT表,獲取代表teletext的PID,標注為TTX_pid;
⑵在解復用程序中過濾PID=TTX_pid的數(shù)據(jù),解出PES的數(shù)據(jù)部分.
(3)把第二步得到的數(shù)據(jù)部分全部保存到一個緩沖區(qū),直到所有的數(shù)據(jù)全部緩沖完畢.
(4)解出packetaddress,該數(shù)據(jù)代表當前的行號(0-24).如果是0,則本個datablock包含的是主
頁面代碼和
子頁面代碼.如果不是0(1-24),則說明datablock是對應頁的列數(shù)據(jù)(40個字節(jié)的ASCII),把這
些數(shù)據(jù)解出保存到緩沖區(qū).(這里必須和PID過濾一樣,過濾主頁面號碼和子貝面號碼,即沒有
選擇的頁面忽略掉)
(5)循環(huán)第(4)步直到所有的列數(shù)據(jù)全部解出.
(6)把緩沖區(qū)中的24X40的數(shù)據(jù)顯示出來.一般是在RAM中定義一個unsignedchar
TTX_DATA[24][40]數(shù)組保存.
Teletext是如何支持自定義前景色和背景色等特性的呢?實際上非常簡單,就包含在每一行數(shù)
據(jù)的40個字節(jié)中.我們知道可顯示ASCII的范圍是0x20~0x7f,小于0x20的代碼在teletext中
做為控制字符(需要在顯示程序中處理),具體規(guī)定如下:
0x00-0x07:設置前景色,顏色分別是黑,紅,綠,黃,藍,洋青,洋藍,白(設置后生效,也就是說,顯示
程序遇到這些代碼,在隨后的顯示中必須改變前景色到對應的顏色)
0x08:開始閃爍功能,設置后生效.
0x09:結(jié)束閃爍功能,設置后生效
0x0a:BOX結(jié)束,設置后生效.
OxOb:BOX開始,設置后生效.
0x0c:正常象素大小,設置后生效.
OxOd:寬度加倍,設置后生效.
OxOe:長度加倍,設置后生效.
OxOf:寬度和長度都加倍,設置后生效.
Ox10-0x17:設置馬塞克顏色,顏色代碼同0x00-0x07,設置后生效.
Ox18:以后固定是顯示空,直到遇到其他顏色屬性.設置后生效.
0xl9-0xlb:請參考EN300706標準.
0x1c:設置黑背景色.設置后馬上生效.
OxId:設置新的背景色,下一個字符指定背景顏色,代碼同0x0-0x07.
Oxle:保持馬塞克功能,設置后生效.
0x1f:取消馬塞克功能,設置后生效.
以上所描述的控制字符作用范圍僅僅是一行.也就是說如果遇到新行,則設置全部恢復默認
設置,EBUteletext的默認設置是:黑背景色,白前景色,無閃爍,無BOX,正常的象素大小,無任
何馬塞克功能.因此,teletext的顯示程序必須一個字符一個字符的分析數(shù)據(jù),直到所有的數(shù)據(jù)
全部顯示完畢.
實際上,EBUteletext使用了4個規(guī)格,包括VI.0,V1.5,V2.5,V3.5.V1.0只支持ASCII文本和基
本屬性,其他規(guī)格還支持簡單圖象和Objects,請參考EN300706獲取更多的信息.
EBUteletext格式使用了漢明編碼方法,具體編碼格式請參考EN300706.
下面可以參考一下<<SeekforMPEG-2decoder>>中處理teletext的效果:
(1)菜單上的數(shù)字是主頁面,下一級菜單是子頁面:
(2)teletext文字疊加在Video上的透明顯示效果:
(3)teletext文字疊加在Video上不透明的顯示效果:
(4)切換到其他頁面的顯示效果:
第五章EPG原理
EPG就是“電子節(jié)目指南”,相當于一個節(jié)目菜單的功能.在一個TS流中,可以提供當前流的
所有信息,如頻率,調(diào)制方式,頻道號,所有節(jié)目的PID,名稱等信息,也可以根據(jù)需要提供其他
相關(guān)聯(lián)的TS流(例如同一電視臺同步播放的其他頻率的節(jié)目信息)的信息.解碼器接收這些信
息,形成一個固定格式的菜單讓用戶選擇需要收看的頻道或節(jié)目,這就是"EPG”.不僅如
此,EPG還可以對節(jié)目進行分類,比如節(jié)目可以是電影,也可以是新聞,這樣,把屬于電影的節(jié)目
歸在一起,把屬于新聞的節(jié)目歸在一起,這樣對用戶來說檢索節(jié)目就變得非常的方便.
EPG的實現(xiàn)也歸功于DVB的SI信息.和EPG功能相關(guān)的SI有NIT(網(wǎng)絡信息表),EIT(環(huán)境
信息表),SDT(服務描述表),BAT(群組關(guān)聯(lián)表),TDT(日期時間表)和TOT(時間偏移表).下面簡
單分析這些表所攜帶的信息.
NIT,NetworkInformationTable,網(wǎng)絡信息表
NIT提供如網(wǎng)絡名稱(相當于電視臺名稱),傳輸參數(shù)(如頻率,調(diào)制方式等).這個表格一般是解
碼器內(nèi)部使用的數(shù)據(jù),當然也可以做為EPG的一個顯示數(shù)據(jù)提供給用戶做為參考.
NIT格式如下:
各字段含義如下:
table_id:8bits標志,應該是0x40或0x41.當table_id==0x40時候,這個N1T描述的是當前流
的網(wǎng)絡信息,否則描述的是其他流的網(wǎng)絡信息(一般是電視臺同步播放的其他TS流信息).
section_syntax_incicator:Ibit的段語法標志,應該是T
reserved_future_use:1bit保留未來使用位,一般是‘0'
reserved:2bits保留位,一般是D0',這是防止控制字沖突而設置的.
section_length:12bits段長度,從network_id開始,到CRC_32(包含)結(jié)束的字節(jié)總數(shù).
network_id:16bits的網(wǎng)絡ID號碼,DVB內(nèi)唯一的一個號碼,標志不同的電視臺.
Reserved:2bits保留意見位.
version_number:5bits的版本號碼,當NIT內(nèi)容有任何改變時,該字段會遞增1(提醒解碼器更
新NIT信息).
current_next_indicator:1bit的當前下次使用標志,■般是'O'
section_number:8bits的當前段號碼.
last_section_number:8bits的當前段號碼.
reserved_future_use:4bits保留未來使用,現(xiàn)在應該是‘0000'.
network_descriptors_length:12bits網(wǎng)絡描述符長度,單位是字節(jié).
descriptor():N個不同的描述符結(jié)構(gòu),一般是網(wǎng)絡名稱描述符,解碼器在此獲取當前的網(wǎng)絡名
稱(即電視臺名稱)
reserved_future_use:4bits未來保留位,當前應是‘0000’.
transport_stream_loop_length:12bits的字節(jié)總數(shù),就是隨后的循環(huán)的字節(jié)總數(shù).
transport_stream_id:16bits的網(wǎng)絡ID
original_network_id:16bits原始網(wǎng)絡ID.如果original_network_id==transport_stream_id說明
該TS流是直播節(jié)目,否則說明該TS流是轉(zhuǎn)播節(jié)目.
transport_descriptors_length:12bits的描述符長度,隨后的N個描述符占用的字節(jié)總數(shù).
descriptor。,N個描述符,可以有多個連續(xù)但不相同的描述符號,如網(wǎng)絡名稱描述符,傳輸系統(tǒng)
參數(shù)描述符,解碼器分析這些描述符獲取網(wǎng)絡的不同信息.
CRC_32:整個段的CRC校驗值,一般可以忽略.
EIT,EventInformationTable,環(huán)境信息表
環(huán)境信息表提供如下信息:節(jié)目段的標識號、起始時間、節(jié)目長度、播放狀態(tài)、是否加密;
指向特定信息的鏈接信息;節(jié)目段多語種的簡短介紹;節(jié)目段的詳細介紹;兩段同樣節(jié)目
段的時間偏移;基本碼流類型,如視頻的幅型比、伴音的類型、字幕的類型等;使用的加密
系統(tǒng):節(jié)目類型,如電影/戲劇、新聞、綜藝、體育、少兒、音樂、藝術(shù)、社會政治、文教
等;節(jié)目限定年齡的級別:給出實現(xiàn)交互式回傳信道的電話號碼;為滿足各節(jié)目段的碼率而
提供的緩存大小信息及私有數(shù)據(jù)等.
環(huán)境信息表中提供了類似于廣播電視報所提供的節(jié)目表的內(nèi)容,在SI中,只有EIT才有可
能被加密。根據(jù)EIT及其它表所提供的信息,可以出五花八門的電子節(jié)目指南。-如:按節(jié)
目類型檢索、按時間檢索及對某類節(jié)目的鎖定等.
EIT表格定義如下:
各字段定義如下:
table_id:8bits的表ID,如果當前表是重現(xiàn)/跟隨信息,則table_id是0x4e(當前流)或0x4f(其他
流),否則如果是時間段信息,則table_id是0x50~0x5f(當前流)或者0x60?0x6f(其他流).
section_syntax_indicator:1bit的段語發(fā)標志符,應該是T
reserved_future_use:1bit未來保留位,應該是'0'
reserved:2bits的保留位,應該是'00'
section_length:12bits的段長度,單位是bytes,從service_id開始到CRC_32(含)結(jié)束.
service_id:16bits的頻道號,同PMT中的program_number;
reserved:同上.
version_number:5bitsEIT版本號碼.內(nèi)容有更新則此字段遞增1,表示需要更新EIT信息.
current_next_indicator:1bit的當前下次應用標志,一般是'0'
section_number:8bits當前段號碼.
last_section_number:8bits最后段號碼.
transport_stream_id:16bits的TS流ID.
original_network_id:16bits的原始網(wǎng)絡ID.
segment」asl_seclion_number:未知功能.
last_table_id:未知功能.
隨后是N個Event的信息:
event_id:16bits環(huán)境ID,流唯一數(shù)字.
start_time:40bits的開始時間.UTC格式.
duration:24bits的持續(xù)時間(節(jié)目長度),BCD格式.
running_status:2bits運行狀態(tài),定義和PMT中的running_status相同.
free_CA_mode:Ibit的是否加密標志,’0'表示沒有加密.
descriptors_loop_length:12bits描述符總長度,單位Bytes.
descriptors():N個描述符列表.
TDT和TOT提供的是系統(tǒng)時間信息,結(jié)構(gòu)較簡單,請參考EN300468文檔!
RST,RunningStatusTable,播放狀態(tài)表
RST提供的是TS流中的節(jié)目播放狀態(tài)(是否正在播放等)的信息.
RST格式定義如下:
各字段含義如下:
table_id:8bits表ID標志,應該是0x71.
section_syntax_indicator:1bit的段語法標志,應該是T.
reserved_future_user:Ibit未來保留位
reserve:2bits保留位.
section」ength:12bits段長度,單位Bytes.實際就是隨后的for()循環(huán)中所有的字節(jié)數(shù)目.
transport_stream_id:16bits的TSID,DVB內(nèi)唯一.
original_network_id:16bits原始網(wǎng)絡ID.
serviced_id:16bits節(jié)目號,和PMT內(nèi)的program_number相同含義.
event_id:16bits環(huán)境ID,同EIT定義.
resen^ed_future_use:5bits未來保留位.
running_status:3bits運行狀態(tài).0x01表示不在播放中,0x02表示即將播放,0x03表示播放被暫
停,0x04表示正在正常播放,其他屬于未定義狀態(tài).
實際上,以上標準SI表提供出的EPG信息是比較少的,實際上有用的EPG信息都是包含在
描述符中,就是Table結(jié)構(gòu)內(nèi)部的descriptor。字段1)LDVB系統(tǒng)提供了很多標準的descriptor(),
不同的描述符展示不同的信息.具體的描述符結(jié)構(gòu)請參考EN300468.
標準描述符簡單介紹如下:
⑴Bouquetnamedescriptor:組名稱描述符,提供一個組的名稱符號.
⑵CAidentifierdescriptor:CA系統(tǒng)控制字描述符,提供CA的加密字.
(3)Componentdescriptor:組件描述符號,提供系統(tǒng)內(nèi)所有組件的名稱等信息.
(4)Contentdescriptor:內(nèi)容描述符號,提供系統(tǒng)節(jié)目的內(nèi)容信息(實現(xiàn)按內(nèi)容檢索功能)
⑸Countryavailabilitydescriptor:有效國家列表描述符號,提供該服務允許使用的國家名稱列
表.
(6)Databroadcastdescriptor:數(shù)據(jù)廣播描述符,提供數(shù)據(jù)廣播信息.
⑺Databroadcastiddescriptor:數(shù)據(jù)廣播標志描述符號.
(8)Cabledeliverysystemdescriptor:DVB-C傳輸系統(tǒng)參數(shù)描述符,提供DVB-C參數(shù)信息.
⑼Satellitedeliverysystemdescriptor:DVB-S傳輸系統(tǒng)參數(shù)描述符,提供DVB-S參數(shù)信息.
(10)TeiTestrialdeliverysystemdescriptor:DVB-T傳輸系統(tǒng)參數(shù)描述符,提供DVB-T參數(shù)信息.
(11)Extendedeventdescriptor:擴展環(huán)境描述符號.
(12)Frequencylistdescriptor瀕率列表描述符,提供所有的頻率信息.
(13)Linkagedescriptor:可連接描述符.
(14)Localtimeoffsetdescriptor:當前時間信息.
(15)Mosaicdescriptor:馬塞克描述符.
(16)Multilingualbouquetnamedescriptor:多語言代碼組名稱描述符.
(17)Multilingualcomponentdescriptor:多語言組件描述符號.
(18)Multilingualnetworknamedescriptor:多語言網(wǎng)絡名稱描述符.
(19)Multilingualservicenamedescriptor:多語?言月艮務名稱描述符.
(20)NVODreferencedescriptor:V0D點播參考描述符.
(21)Networknamedescriptor:網(wǎng)絡名稱描述符.
(22)Privatedataspecifierdescriptor:數(shù)據(jù)描述符.
(23)Shortsmoothingbufferdescriptor:傳輸速率描述符.
(24)Servicedescriptor:服務器描述符,提供電視臺名稱和電視節(jié)目名稱等信息.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 郵寄檢驗服務部工作技巧與客戶反饋計劃
- 《貴州美升能源集團有限公司六枝特區(qū)新興煤礦(變更)礦產(chǎn)資源綠色開發(fā)利用方案(三合一)》評審意見
- 膀胱部分切除后護理
- 高中地理 3.1 海水的溫度和鹽度教學實錄2 新人教版選修2
- 2025年三明道路運輸從業(yè)人員從業(yè)資格考試
- 2025年貴州貨運從業(yè)資格證模擬考試保過版
- 《人民幣兌換》(教學設計)-2024-2025學年五年級上冊數(shù)學北師大版
- 部隊違規(guī)使用檢討書
- 社區(qū)七夕節(jié)活動方案
- 四年級數(shù)學(四則混合運算)計算題專項練習與答案
- 初中物理公式MicrosoftWord文檔
- 冠心病臨床路徑
- 詐騙案件授課PPT課件
- 基于PLC的電梯控制系統(tǒng)設計
- 弗洛姆異化理論
- 園林噴灌工程施工方案(精編版)
- 碳納米管_ppt課件
- 【課件】第2課如何鑒賞美術(shù)作品課件-高中美術(shù)人教版(2019)美術(shù)鑒賞
- [康熙字典9畫五行屬金的字加解釋] 康熙字典五行屬金的字
- 托盤操作評分表
- 關(guān)于老年癡呆癥及其智能陪護設備的調(diào)查報告
評論
0/150
提交評論