版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、dvb over ip 详解TS系统解码11 TS流的内容41.1 ES41.2 PES41.3 TS62 TS流的解码过程(只考虑本地文件,解码只涉及到系统层打包的解码,不涉及到编码 的解码)72.1 PAT 解码:82.2 PMT 解码82.3 音视频解码83 TS流解码93.1 总用例图93.2 各解码类的 UML图93.2.1 解码主类1.03.2.2 事件管理类 113.2.3 各类包解析的关系图 1.23.2.4 输入输出类133.2.5 解析PAT、PMT、私有数据等 .1 43.2.6 解析 TS 包153.2.7 解析 PES 包1.63.2.8 PCR 时钟类1.73.2.
2、9 CRC 校验类1.83.3 解码流程图.183.3.1 TS包解析流程图 1.93.3.2 Section解码流程图203.3.3 PES解码流程图 2.14 TS流合成(编码)224.1 各编码类的UML图224.1.1 编码主类224.1.2 合成各类之间的关系 234.2 编码主要流程234.2.1 TS编码流程图 244.2.2 负载(pes、 section )打包过程25附表一:26附表二:301 TS流的内容TS->PES->ES->NALESAn elementary stream (ES) is defined by MPEG communication
3、 protocol is usually the output of an audio or video encoder.PESallows an Elementary stream to be divided into packets.F 中'R <iciiihL REiemk图一:PES结构图PES结构各字段的具体含义见附表一。由图一可见,1个PES包是由包头、ES特有信息和包数据 3个部分组成。由于包头和ES特有信息二者可合成1个数据头,所以可认为1个PES包是由数据头和包数据 (有效载 荷)两个部分组成的。包头由起始码前缀、数据流识别及PES包长信息3部分构成。包起始码前
4、缀是用23个连续“ 0”和1个“1”构成的,用于表示有用信息种类的数据流识别,是 1个8 bit的整 数。由二者合成 1个专用的包起始码,可用于识别数据包所属数据流(视频,音频,或其 它)的性质及序号。例如:比特序1 1 0 x x x x x是号码为x xxx蒯PEG-2音频数据流; 比特序1 1 1 0 xxx x是号码为x x x x的MPEG-2视频数据流。PES包长用于包长识别,表明在此字段后的字节数。如, PES包长识别为2 B,即2X 8 = 16 bit 字宽,包总长为 216-1=65535 B ,分给数据头 9 B (包头6 B + ES 特有信息3 B ),可变长度的包数
5、据最大容量为65526 B。尽管PES包最大长度可达 (216 -1 )=65535B (Byte ),但在通常的情况下是组成ES的若干个AU中的由头部和编码数据两部分组成的1个AU长度。1个AU相当于编码的1幅视频图像或1个音频帧,参见图一右上角从 ES到PES的示意图。也可以说,每个 AU实际上是编码数据流的显示单元,即相当于解码 的1幅视频图像或1个音频帧的取样。ES特有信息是由PES包头识别标志、PES包头长信息、信息区和用于调整信息区可变 包长的填充字节 4部分组成的PES包控制信息。其中,PES包头识别标志由12个部分组成: PES加扰控制信息、PES优先级别指示、数据适配定位指示
6、符、有否版权指示、原版或拷贝 指示、有否显示时间标记(PTS-Presentation Time Stamp ) /解码时间标记(DTS-Decode Time Stamp)标志、PES 包头有否基本流时钟基准(ESCR-Elementary Stream ClockReference)信息标志、PES包头有否基本流速率信息标志、有否数字存储媒体( DSM )特 技方式信息标志、有否附加的拷贝信息标志、PES包头有否循环冗余校验( CRC-CyclicRedundancy Check )信息标志、有否 PES扩展标志。有扩展标志,表明还存在其它信息。 如,在有传输误码时,通过数据包计数器,使接
7、收端能以准确的数据恢复数据流,或借助计数器状态,识别出传输时是否有数据包丢失。其中,有否PTS/DTS标志,是解决视音频同步显示、防止解码器输入缓存器上溢或下 溢的关键所在。因为, PTS表明显示单元出现在系统目标解码器( STD-System Target Decoder )的时间,DTS表明将存取单元全部字节从STD的ES解码缓存器移走的时刻。视频编码图像帧次序为 I1P4B2B3P7B5B6I10B8B9 的ES,力口入 PTS/DTS后,打包成一个 个视频PES包。每个PES包都有一个包头,用于定义PES内的数据内容,提供定时资料。每个I、P、B帧的包头都有一个 PTS和DTS,但PT
8、S与DTS对B帧都是一样的,无须标 出B帧的DTS。对I帧和P帧,显示前一定要存储于视频解码器的重新排序缓存器中,经 过延迟(重新排序)后再显示,一定要分别标明PTS和DTS。例如,解码器输入的图像帧次序为I1P4B2B3P7B5B6I10B8B9,依解码器输出的帧次序,应该 P4比B2、B3在先,但显示时P4 一定要比B2、B3在后,即P4要在提前插入数据流中的时间标志指引下,经过缓存器重新排序,以重建编码前视频帧次序I1B2B3P4B5B6P7B8B9I10 。显然,PTS/DTS标志表明对确定事件或确定信息解码的专用时标的存在,依靠专用时标解码器, 可知道该确定事件或确定信息开始解码或显
9、示的时刻。例如,PTS/DTS标志可用于确定编码、多路复用、解码、重建的时间。TSTransport stream将具有共同时间基准或者具有独立时间基准的一个或者多个PES组成的单一数据流。1 R1 >11 bit1 bitl3biT2 bit4 bit周母而1误眄有效磁载单元作施|saa连接升字节!甯示符_优先犹樟制散揩二 H代入IS4 B11;日后应返1可11)1广心.1 f.iJU ' 'jf/i k 迈克君据区长 1|山丘出有关,If 1 bilU biitbit一 |1 tMl1 bu1 1 bittbii1帅间闿格 示荷出机存储 指示行化指示存 IPCR际志整
10、点 轲志1传输专用限的PCR通应於 triMSfcRCRPnfmn Ckvk RckreDce ©T目日才辨解淮 图二:TS包结构TS结构各字段的具体含义见附表二。由图二可见,TS包由包头、自适应区和包数据 3部分组成。每个包长度为固定的188 B,包头长度占4 B,自适应区和包数据长度占184 B o 184 B为有用信息空间,用于传送已编码 的视音频数据流。当节目时钟基准( PCR-Program Clock Reference )存在时,包头还包 括可变长度的自适应区,包头的长度就会大于4 Bo考虑到与通信的关系,整个传输包固定长度应相当于4个ATM包。考虑到加密是按照 8 B
11、顺序加扰的,代表有用信息的自适应区和 包数据的长度应该是 8 B的整数倍,即自适应区和包数据为23X8 B =184 B 。TS包的包头由如图所示的同步字节、传输误码指示符、有效载荷单元起始指示符、传 输优先、包识别(PID-Packet Identification )、传输加扰控制、自适应区控制和连续计数器8个部分组成。其中,可用同步字节位串的自动相关特性,检测数据流中的包限制,建立 包同步;传输误码指示符,是指有不能消除误码时,采用误码校正解码器可表示1bit的误码,但无法校正;有效载荷单元起始指示符,表示该数据包是否存在确定的起始信息;传输优先,是给TS包分配优先权;PID值是由用户确
12、定的,解码器根据 PID将TS上从不同ES来的 TS包区别出来,以重建原来的 ES;传输加扰控制,可指示数据包内容是否加扰,但包头和 自适应区永远不加扰;自适应区控制,用 2 bit表示有否自适应区,即(01)表示有有用信 息无自适应区,(10)表示无有用信息有自适应区,(11 )表示有有用信息有自适应区, (00)无定义;连续计数器可对 PID包传送顺序计数,据计数器读数,接收端可判断是否有 包丢失及包传送顺序错误。显然,包头对TS包具有同步、识别、检错及加密功能。TS包自适应区由自适应区长、各种标志指示符、与插入标志有关的信息和填充数据4部分组成。其中标志部分由间断指示符、随机存取指示符、
13、ESa化指示符、PCR标志、接点标志、传输专用数据标志、原始 PCR标志、自适应区扩展标志 8个部分组成。重要的是标志 部分的PCR字段,可给编解码器的 27MHz时钟提供同步资料,进行同步。其过程是,通过 PLL,用解码时本地用PCR相位与输入的瞬时PCR相位锁相比较,确定解码过程是否同步, 若不同步,则用这个瞬时PCR调整时钟频率。因为,数字图像采用了复杂而不同的压缩编码 算法,造成每幅图像的数据各不相同,使直接从压缩编码图像数据的开始部分获取时钟信息 成为不可能。为此,选择了某些(而非全部)TS包的自适应区来传送定时信息。于是,被选中的TS包的自适应区,可用于测定包信息的控制bit和重要
14、的控制信息。自适应区无须伴随每个包都发送,发送多少主要由选中的TS包的传输专用时标参数决定。标志中的随机存取指示符和接点标志,在节目变动时,为随机进入I帧压缩的数据流提供随机进入点,也为插入当地节目提供方便。自适应区中的填充数据是由于 PES包长不可能正好转为TS包的整数 倍,最后的TS包保留一小部分有用容量,通过填充字节加以填补,这样可以防止缓存器下 溢,保持总码率恒定不变。2 TS流的解码过程 (只考虑本地文件,解码只涉及到系统层打 包的解码,不涉及到编码的解码)TS流的基本解码过程:PAT节目关联表-PMT节目映射表-» PES音频、视频包。首先,从PAT获取TS流中所有节目映
15、射表.PMT )数据(视然后,从节目映射表中获取每个节目(本设计为本地文件,只含有一个频和音频)的PID。最后,根据传输过来的数据PID对视频数据和音频数据进行系统层复用解码。系统层复用解码:循环:TS-» PES-ESoPAT解码:PAT表携带以下信息:(1) TS 流 ID - transport_stream_id ,该 ID 标志唯一的流 ID 。(2)节目频道号-program_number ,该号码标志 TS流中的一个频道,该频道可以包含很多的节目(即可以包含多个 Video PID 和Audio PID)(3) PMT 的PID-program_map_PID,表示本频
16、道使用的哪个PID做为PMT 的,因为PID可以有很多的频道,因此DVB规定PMT的PID可以由用户自己定义.PMT解码PMT表中包含的数据如下:(1)当前频道中包含的所有 Video数据的PID(2)当前频道中包含的所有 Audio数据的PID(3)和当前频道关联在一起的其他数据的PID(如数字广播,数据通讯等使用的PID)音视频解码音视频解码的数据如下:(1)根据音频PID解码音频数据到缓存区(2)根据视频PID解码音频数据到缓存区(3)和当前频道关联在一起的其他数据放到数据区中3 TS流解码总用例图Decoder 首先调用事件管理器注册各类事件(事件类型见3.2.2 ),然后调用read
17、_packet函数读取指定文件中的TS包进行分析,根据 PID值不同分别对TS进行不同的处理。Parse_PAT/PMT/._packet 把PAT(注:PAT的PID为0)和PMT的携带的相关节目流 PID的信息(包括视频,音频,私有数据等)存入 Directory 中,之后Parse_ts_packet通 过Directory 中提供的PID信号分别对不同的 TS分别处理。各解码类的UML图3.1.1解码主类今三1主WCcinsurnefRecord -STS3E的再匚町f对工笆C白力,1E日.innj I Ld<H£dfn nT B SnAMCcniijim*rRe ec
18、rd 锤表=inAal_jxofl i£i±MAPS F 安热箱前 者的书"豆的京-Cons urn rRec-ard* tr TS+ pid; int+ cons- Con&uTier+ rext dec: ConsumB-Reco "d*Co n su n- rR-cord (c-haT, inlj*ml- fiwnigir Ev%niM«Dag«<- dir Ducsciy事Q"; llnputP©Pfrnet_pid' int- pst cons: Consumer*- C3_cons
19、: Cdnsu me1*- -Hssd_crec: CansurterReca rd>* BtODderfE ve ntMi n*g s r)* EGHflicnpnpijiPmrt* mH+ flu 曲(J ; g id+ 0日d.pB成: g汨 mslsil'nelpidfint): void+ msisl_dinfDirerfDry*):诵ad inialHll_prDg(PMjyiomi . rod+ geE_d<(i. Directory*rtqp d<0 : 1nt gtt-mansgtrO " E«ntMsffiB8*r*+ a
20、87;i_tsO ; T3*+ gel_ts(iit): TS*+ gst_pes(int) : PES-* gsl_co n s(in t| . Cea 口 su me r*+ pmt_prf&0 : void* idd_«ins(Conm«i* . inir mH wehlUprog_on_cijnintiai(Progru): wid-tn sla li jp rQgonn«WMl®t(Co nsu n»rR<co rd* . 3 reg ram*) ; Co-nfiu ni-rR»CDrd"- fnO-
21、Becfffnt,: Gg nsme rR里g B”- fridwandwremae_ic«?(int): ConsumerReca rdfeoThe Decoder object manages such global information as the Network Table pid value, the current packet number and the number of programs and streams per program (as represented in the Directory structure)。主要函数介绍:read_packet
22、() : Called to read a new transport packet 。install_dir (Directory*) : install Directory, Directory是一个节目单(比如湖南卫视,星空卫视,东方卫视,CCTV)。install_prog (Program*) : install program(如湖南卫视 )to Directory 。install_netpid ():表示网络信号的来源,当这个更新时,需要重新安装目录。install_prog_on_current_list安装节目到当前列表。install_prog_on_new_list安装
23、节目到新的列表。3.1.2事件管理类aeTuneTB':ianiEvemtType"S=-g wad n 二£ I-七 ad-rPaT=sd PATParBed TJgDFaedCe lib a rnb«rE veniTypes: GI IgokR* co fd*+ Eve nt Ms negert)+ Re-g :>ter(EverftT-p«. Cfilbsck. void void4 Tngg»rf£vSFitTypfi,: TOdGAP a-«d BadGG Disoo ntinu ty Randor-
24、iAw4w nCREvent TSD75En| Um 冲费刖比d PE ''ernninatinn 'J j Fbw rEv* ntT/a*!Call ba e k Re cord* 'type Ev*niTyp«* CAfcack. 9 Iback *Jtent_data. >tnd*+ CatthackRscoidwefitType. Sc lib白ck, vcitl*lWrapperL Tit c: Ghsr* W胃 ppRrQnt)+ ,已p。善r的号qtypedef void (*Callback)(EventType, void*,
25、void*):回调函数模板。void Register (EventType t, Callback f, void* d):注册事件。void Trigger (EventType, void*):触发事件。3.1.3类包解析的关系图飞Gdr-iur-w,子=青5附fikH 二*东£者, TSCcFrftH 及 T%£MT:- - - 7 =F L = .; 分就归可司色Fflt9.378 PK.像X兄匹工工氟 wl-Pffdial 子生 MWF- 先工界FCBM解仁酮iHnf*1n髀干Vt aonCovnawn4MNI y TT 司把 W廿司兰T立片己/弓心日崇内,三事
26、.忏,'IKek_曜附(用三 F7 Se-i-ar-Dci-surrvConsumer设置和获取状态。rK 丽wnwF»5C4 Mo m h:UFLA: - T£j <H!-FriOiRirrwi%日vadEw_3es6nr-iJMrlitfi" bi<lN144,vj!(E二日 p;相S 'Ett g =的SbbG/6*. 口figfl总产HlS.hSgJ.g _ iriidEiBfl_S=;哂 BE ht«der b2A£cin=u7ieTt; Jn油*fi jT_rdii SHE XhjqFk f*5: DE_
27、El13g:ad*e 口 Ed rtti3_"<io_ii3g 24 卑.GLt q4 F工曰HMIFHJ. pHT/, *. £1尾口 Kfc F 0g Wg#-te_ * fe Tie nta >_!£: re 3ffFi_-Qnurt:t*i- 1ClStf. MtHi- r口QACbnahmcpfCASwIni* DrcDdciconnect (InputPort*):连接到输入接口。set_cstateget_cstate 表示Sectionconsumerread_partial 表示读取 TS 的 payload.read_header_
28、a 、read_header_b 表示读取负载的头部分。read_section 根据读取的负载,更新节目。各个子类分别实现。PES同上。3.1.4 输入输由类EpiFglF*,鹏_,忖*11« »cjf Pfliy小I 二nriPremFiFT 专 AJtfMSA- HriFh&tnRffoi 型里 队由冷y袅. 丁丁?不无号号 至毛吉,"三不 =-. wf, 是:mmcr¥ n-Duf_J(!/f .=hf h-廿4卜* mMGKio* iesc_ti<: : disr+ 隼咱JWw。步射+ Wi*c!_pin ch-sr*j mi)
29、«e.Eika% K ir<+ TSiE_re se wtddts"tTL&t_ ntrt3i'n5 - chonTifcftfl日 ir; Kill gu*HRr.uiFsP七h 广 nt;,-vcE十PuLE5t9i1*rpZT_pe:5iCEFt U FiF5mBlT MJnMkwnpQ工Thm S;1arap 7* * &s_tn*c EtaiFpW。:七 加昧cnGO em diect_CTci rnt f DdnLcrc© . fwiD* 题口cret 司。Q1P中U串at»ThT« »oy
30、Poy* E干cluulFL'dCinL)* viw_&riicli*n:,3d+ j 针。.加 n:+ "阳Fc_ riq rtahti it|_ /口 d* edgc.tsEsfaf币n七,H* *flrbe uifrfnt. lit) : voidtie hied_3 tWiiti vod+ 2*立事中30归1*写1»,口50 第d+imc e| Rnp 7rm st TimaGkij rppBF*, * * 日+ 'jihrtGtims rta Tp27_S,£fo!nai,:(T mt3lsaEpBG。- 1rtMd* rtnrt
31、_crcte 再* siep_«(e 诃*WK_GHGfig d¥ 。如“_凄1对。,阀山M巾J也/JDFim当。庭MiP-crd-ramFil-eRofITcRnE-。冏-瓯ini- fiiP_n3Tiie- 时 sr"- w- fitm; FILE-1bijf|C«h5Eiz£ 0 卜 r - fer: nt * Owtpg ins » Ww dw才酊川匚/而qIDIE'C:l_ JJ _JFcrtFrcm RLimb而附产"叩廿I int- b!rts_pLr. ill- AH* 5A- M工由I Bug
32、9;. m-MQWi ml-tiK" eh# "-)"_'!1并九rnt bt&jdH mtM ”也十汹0 EmjI PprtFr?« mRairnC r?t 曲 A 7* inq_ii*。. irt*. EI3干 DFc rtc R.3 m'iTt; ini. Him产)fl. k 总 加步巾匚0小和口 MKs 心,1必£.9誓|1|0 加力0* U工会办Ef Rd口 FartTMilPM<J 5M-nexLout "-TS nl- M 上 FILE*-ehar- farn: int- bcFaas-:
33、 ri OPoiTd-ii rn. cn*n-r T?尸 7 mF* 口# cl/js Ji_tiif-ca ri zsnB! CLJ 打 回n” 2试按要求从缓冲区中读入规定的位,或者字节数。比如函数read_bit ()表示从缓冲区中读入一个bit的数据(注意缓冲区中以byte对齐),读入时生成CRC。所有从缓冲区读出数据的方式( bitbytenbits )基函数都是这个。函数read_byte 从缓冲区读取一个字节。read_pattern 表示读取指定字符串。read_reserved_bits读取填充数据。read_uimsbf(int nbits, char* message)读
34、取n位转化为无符号整形,高位在前。read_tcimsbf(int nbits, char* message)读取n位转化为有符号整形,高位在前。check crc 表示CRC校验。3.1.5 解析PAT、PMT、私有数据等Dir“<«nu munition*StreamTypeLPEGGIVIDEO = 1M=EG2VICEOMSES1 AUDIOMP UG2Agic3M3EGPRIVATEccsnuwe rsttsin»Prog ra m Sta fee曲bIM巨NOTACT IVEDiEctoiy。8dd_progr3im(Prugr3ifTi*) : rod
35、陪Ecr.si rpg ra m;P nag rs m*); vq刃 reiTC«_prDgrarTi(int) : gid get_p rag ramfint) Pragram*ge 1_n u mpTEgra nntsC1 : 1tProgram+ pragiBamnu mber rnt斗 pid: ini+ nesd=enec: ESlr&smReoard'>+ SGtrra; ini+ acr 工11esirrL EStres1*+ PnogramO+ P no g rani(rit)+ Progrsnumt, mt)t acftryateQ. roel
36、* dactp/attQ . void+ ftddMtreflrnfEStnBamr) void* ne mcve_estrea e偃 Stna a: *o id* Mt_pai_*strearn(EStr«ami,): mF* * rwv»_*£tr* a i*i(int): ve-吕中 白电匚名必晤3m(int) : E5VlTT* ML1n um-ME'E,。: mt* print。: vod+ print。: void+ EWHEBrREnulEVimEFJF f 口 r n Rech F :n m口旧 e=prqg-smz PnjgraffTT*
37、 nextprec: Pnogr+ EStrsmfrit, rnt- s*mType)+ pMntQrvoidestreamz EStn&sm*,next erac: E Strss mRscoTl"+ siieam_type SlieamiType bandwrsdth: int* p»d: hlP reg ram RetardE 3 ire am Record解析PMT中携带的节目信息到program ,再把program 插入到directory 。类似于机顶盒的搜台系统。Dirrctory : 函 数 add_program 、remove_program
38、表示添 加和删除节目。 get_program表示获取节目,get_num_programs表示获取节 目数,Program :函数 active、deactivate 表示添加激活和停止节目, add_estream 、 remove_estream 表示给节目添加和删除 ES流,set_pcr_estream 表示设置该流含有 PCR, get_estream 表示获取 ES流,get_num_streams 表示获取节目中含流的数目。3.1.6 解析TS包他帮洗JS肉蛙.里舍一4运二号Ad-aptationField+ adaptatnn_eKie n»n_lengtii: m
39、t* a d ptatiofi_i!etd_le ng th: rii+ dtuonliniifty_oode: cher+ elefn_9tfVArn_pnonty_oode: char* 叫± r_Nuffing_byl«i: mH 口二R: Tir*wStamps"+ rand4m_ao« : cfiir+ apiiot_coLi nldown: in*+ tra n&pcrLpn/fl ats_lengftti: ini* OPC-R. Time Sum p27p+ Ad»ptAlicnF«dQ* g«t_f
40、eids._ngthO: mi+ g«t_lMigttiD: intt prinLD : void* adsp:-Bton: Adsotstio-ed -* pflflgad_u;廿+ ad: kit* aayk>ad_cod«: dn»r* itTslnS-SS-ds; char* In hbpo r1_*pjcod«: char* dd_ptrfTirri»Stsmp2 7) : WDid4Ht. nt Ft, it. T f 兮乜7, 5£匕 ehir, 50 vodt canfig-tjasicfctisr, mt. c
41、harr charr charr chit) : gid+ d* « ttt_pcr() : vod+ g»t_h'6fldtf_itnflthO - int+ mc_cc) void print。: voidTS包结构,函数 get_header_length 表示TS包头的长度,config_basic 表示TS包 基本标志参数设置,config_adaptation表示适应字段设置,inc_cc表示包数量增加,add_pcr , delete_pcr 添加和删除 PCR。get_fields_length表示调整字段长,不包括标志位,get_length 表示
42、total length of the adaptation field3.1.7 解析PES包LPESEKtensionpp_seq pp_=eq PES+ o ng ins l_stu ff_ n gth. ml+ F_STD_bufferecode. char P_STD_buffele. chtr+ F&STD-Sdu 肝jy mt+ ;p sck-fwkd ifi n gth- int9目©/_11(学。看匚 char*PES prtfatE dsta: 时7.+ a dd i-D n a i_m p»y_rifo :田启,+ a g n nrent_in
43、d ca co r_co de 后台3喈 8PmgM_8d*:卅r+ DTS: E»Stmp9Q+ ES.rat#- Kt+ ESCR; Time Sts n27+ extenskun: PESExtentn *+ n umbe rstuffrng_!b)i1es; int+ a-ginsloa-de: char+ P ±S_p acket_te n gth: int+ pn®v)aus_CRC: nl+ 口PMy_Ed卓.ehar+ PTS. TEeSfmp90 irmb'irig_cQdi tiitr+tnt- triok_moc!e TrickMod
44、s "+ fife name: ch ar *unten intnter_cade: chareftBiOn_fte kfl_ilengfl3h! inigjrf_iengthO: mt "ESEKten&iDniO printQ : void+ co nfig_bs Bic(cti b r, 1nL -ctisr, TmeStanip 7*, TtmeStampQD *, TimeS Is mp 90*, ch sr, char, ctiar, char, chsr, int, int) : vatd* co nfig_ffl3d:&in ek> n
45、() : g»d+ config_Lr>cK(inL char char, char, char) : void* gt sdf_diit8i_lenfl in 0 : ini* ”Lh"d,F_*nQthO : int* gftkingthQ : int+ PESO+ PES (pe& *)+ print。: voidstream68 "和"对PES包进行解析。解析出头部数据,解析后的数据分别存贮在”stream69 ” 2个文件中。函数get_length表示包总长度。get_header_data_length 表示PES头长度,不包
46、括填充字段。get_header_length 表示PES头长度,包括填充字段。config_basic 表示PES参数设置。NPCFl时钟耳步.分别为PCR BASE':PCR EXT3.1.8 PCR时钟类TiirrtStarnpQO- + brts0_31: ynsgngd lang号 t)rt32: ml- priniQ: v©idl+ TimStmpSD tariig- + Ti me S-t.3 mp 99 rmt long )- + TimeSlgrripSO (TionsStgFnp27;Ti me Si mpJ7- «xt.: shod;+ >
47、;?prate r -fTrnneS-lamp 2 7f TrmBStampJ?); Ti:Stamp27* op-srstcir4(TirrwStiimpS7, Trrr«SLaE27) : TmneStamp27*- u p电 rata r =Ti rw St amp2 7): Tire Sts mp2 7+ QptratD r»tang) : TirnftSlamp27步>(Tim«StBimp27, Tfmegtamg27) : icl+ print。: void* Tirra3tBmp2704 TimeStemp27(bng) : void* Ti
48、m#-3tftmp27(short long)+ TimsStfcrnpSTfihiort. int, long)系统时钟的相关的类,对系统时钟进行比较。其中对27MHZ的时钟算术和逻辑运算符进行了重载。注:PCR的校正一直是学术界研究的热点。3.1.9 CRC校验类二江吧v二Poly- crc; unfiigiq«d tong鼻 ihrft_F«g32p uhe -gnfid ehii r+ pcly_cmp(chai :色汨* pAnt_biH0: eid+ pniih_brt(ch»r): gid每位进行异或运算后存储在一个4BYTE的数组中。函数poly_
49、cmp 作CRC验证。函数 push_bit 作CRC的生成。解码流程图3.1.10TS包解析流程图Packet+3.1.11 Section 解码流程图3.1.12PES解码流程图i+4 TS流合成(编码)各编码类的UML图4.1.1编码主类Encoder4Ensder,!室提的索里图与漫.En coder E伯 ntiMa n sger* m)的构三 西 紫三台与T JPedug台社象.- maria>gen EventMs nsgef"- dir DiTecldry*-isppd: "SPitbducer* oport. Odl|>dtFofi'*
50、 bitrate : nt* ps_rsl«. ini-TimeStimpS7o-PradL>c«rR«cord- type: ProdTypHS- is: TS*- pCr_flag: ifTt- nejctjucr TimStAmp27- orod: Produoef*一 景性自用_50舞比iflt- g«p: dem心0" cugap. daubh iwxtjna PrnduMrR»oord-+ Eo8dTEve!ntMn*g巧+ bftha电时。;mg id s<pid_ich«<ju tad_p
51、Bok«tO _ vo id+ 鼻司d.p&心ket(int)二 void+ 31b直值EEl:hnt:gid+ in,Ld:ir(Dimtoiy*) ; gid+ get_diT() , Drre-cia ry* get_tsilnl): TS*+ gel_pesj rnt + : PES*+ TiebV_pdi j : mt+ m nd_ p a ck-et(Pf(Mluce rRecs rd") : w<d+ 19dd_p rod (imt, Pr&dTypa Pteduce r". TS*) : P rod ucerRscoff, d
52、$bgtfi!_pfcidi|jnt). mid+: Prod woe r*+ findfflcfint): F rod uce 出世8 rd .+ 9 urdsQ : vc id+ csfc_rrxjxG: fit+ Prod UMrR»cord(PrtidTyBe ProdJMf". S")函数install_dir 首先安装PAT函数send_packet 表示按PID发送TS包函数send_scheduled_packet表示按一定的规律轮流发送TS包。函数recalc_mux 表示节目复用4.1.2 合成各类之间的关系函数get_nready 获取已经填
53、充的字节长度函数 fill_buffer 填充 buffer.函数send_payload发送负载.函数 send_section 发送 section packet.编码主要流程4.1.3 TS编码流程图遍历生产者链表4.1.4负载(pes、section )打包过程发送3B长的同步字节友运节日类型stream_id 和 PESi1长根据各个Pes的初始 化信息,发送pes的 头部信息和填充字段是否有负载连接到负载输入口发送负载返回附表PES分组字段packet_start_code_prefix(24)开始码字为 0X00 00 01stream_id(8)原始流的类型和数目,取值从 10
54、11 1100到1111 1111 之间。各值含义具体见13818-1 。PES_packet_length(16)表示从此字节之后 PES包长(单位字节)。0表示PES包长不限制,且只能用于视频PES。10填充字节。PES_scrambling_control(2)PES有效负载的加密模式。00表示不加密,其余表示用户自定义。PES_priority(1)PES数据包的优先级。类似于 TS的此字段。data_alignment_indicator(1)为1时,表明此分组头部之后紧跟着 数据流描述子中定义的访问单元类型。copyright(1)版权,1表示 有版权,具 体见版权 描述 子13818-1 1-2-6-24。 0 表示没有。original_or_copy(1)1表示原始数据,0表示备份PTS_DTS_flag(2)10表示含有 PTS字段,11表示含有 PTS和DTS字段,00表示不含有 PTS和DTS, 01无 定义。ESCR_flag(1)1表示ESCR在PES首部出现,0表示不出现ES_rate_flag(1)1表小PES分组石有 ES_rate子段。0表小不含有。DSM_trick_mode_flag(1)1表示有8位的trick_mode_flag 子段,0表示不出现此字段。只对 DSM 有效。在广播中 不用。add
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度法律咨询企业法律风险防范与处理服务合同3篇
- 拆迁工程劳务合同样本
- 2024房地产商转让协议书
- 钢结构工程解除合同
- 商务出行专用聘用驾驶员合同
- 制造业生产经理聘用合同
- 设计专业教师聘用协议
- 2025年度UPS不间断电源设备研发与生产技术转移合同3篇
- 2024某科技公司关于提供区块链技术服务的合同
- 2024年航空器融资租赁合同3篇
- 灌溉用水循环利用技术
- 泌尿科一科一品汇报课件
- 2024年江西省三校生高职英语高考试卷
- 中国古代文学智慧树知到期末考试答案章节答案2024年广州大学
- 重庆市南岸区2022-2023学年五年级上学期期末语文试卷
- 现浇钢筋混凝土整体式肋梁楼盖结构-课程设计
- 服务器维保应急预案
- 烟花爆竹经营
- 药房库存盘点与管理培训
- 手消毒液使用率低品管圈课件
- 偏身舞蹈症的护理查房
评论
0/150
提交评论