您现在的位置是:首页 > 网络趣梗网络趣梗

TS文件什么意思(ts的格式)

2022-09-21 16:02:38网络趣梗0人已围观

简介  TS文件什么意思(ts的格式),新营销网红网本栏目通过数据整理汇集了TS文件什么意思(ts的格式)相关信息,下面一起看看

  TS文件什么意思(ts的格式),新营销网红网本栏目通过数据整理汇集了TS文件什么意思(ts的格式)相关信息,下面一起看看。

   1.ts格式TS介绍:全称为MPEG2-TS。TS传输流的缩写。是分包发送的,每个包长188字节(也有192和204字节的包)。数据包的结构是,报头是4个字节(第一个字节是0x47),有效载荷是184个字节。TS流可以填充许多类型的数据,例如视频、音频、定制信息等。MPEG-2 TS主要用于实时传输节目,如实时广播电视节目。MPEG-2 TS格式的特点是要求视频流的任何一段都可以独立解码。简单来说,剪掉DVD上VOB文件的前部(或者数据损坏)会导致整个文件无法解码,而电视节目只要打开电视就可以解码(观看)。

   2.TS流的内容TS流必须包含PAT包、PMT包、多个音频包、多个视频包、多个PCR包和其他信息包。

   TS流数据解析的流程:找到PID为0x0的包,解析PAT,PAT包中的program_map_PID表示PMT的PID;找PMT。PMT包中的elementary_PID表示音视频包的PID,PMT包中的PCR_PID表示PCR的PID。有时PCR的PID与音频或视频的PID相同,说明PCR会被集成到音频和视频包中。注意分析,有时候PCR是自己单独的包。CAT、NIT、SDT和EIT的PID分别为:0x01、0x10、0x11和0x12。

   3.TS头分析TS头有4个字节。

   //transportstreamheadertypedefstructs _ header { unsignedsync _ byte :8;//同步字节,固定为0x47,表示后面是TS包。当然后面面包里的数据是无符号transport _ error _ indicator 33601没有0x47//传输错误标志位。一般情况下,如果出现传输错误,此数据包将不会被处理。无符号有效载荷_单元_开始_指示符33601;//有效载荷的开始标志根据后面有效载荷的内容有不同的作用。//当payload _ unit _ start _ indicator为1时,前4个字节后会有一个调整字节,其值决定了净荷内容的具体起始位置。unsignedtransport _ priority :1;//传输优先级位,1表示高优先级unsignedPID:13//净荷数据类型为无符号transport _ scrambling _ control 33602;//加密标志位,00表示未加密未签名adaptation _ field _ control33602//调整字段控件,01仅包含有效载荷,10仅包含调整字段,11包含调整字段和有效载荷。00,解码器不会对其进行处理。unsigned continuity _ counter :4;//4-4位计数器,范围0-15 } TS _ header;//特殊参数描述://sync _ byte:0x 47//payload _ unit _ start _ indicator:0x 01表示包含PSI或PES头。//PID:0x0表示后面的载荷内容是PAT,不同的PID代表不同的载荷。//adaptation _ field _ control://0x 03360//ReservedForFutureusebyiso/IEC//0x 1://无调整字段,只有净荷//0x2://只有调整字段,没有净荷//0x3://净荷//parsetsheiderrintservice _ ts _ header(unsigned char * pts buf,ts _ header * p header){ p header-sync _ byte=pts buf[0];if(pheader- sync_byte!=0x47)返回-1;p header-transport _ error _ indicator=pts buf[1]7;p header-payload _ unit _ start _ indicator=pts buf[1]60x 01;p header-transport _ priority=pts buf[1]50x 01;p header-PID=(pts buf[1]0x1F)8

   pts buf[2];p header-transport _ scrambling _ control=pts buf[3]6;p header-adaption _ field _ control=pts buf[3]40x 03;p header-continuity _ counter=pts buf[3]0x0F;return0}4.TS有效载荷格式分析4.1 PAT分析

  接收音频和视频开发学习材料:https://docs.qq.com/doc/DQm1VTHBlQmdmTlN2

   TS_header头中的PID值为0x0,表示当前负载为PAT(程序关联表)。PAT数据的信息可以理解为包含在整个TS流中的节目信息。

   //ProgramAssociationTabletypedefstructPAT _ Packet _ tag { unsigned table _ id :8;//固定为0x00,标志为表为PatunsignedSection _ syntax _ indicator 33601;//段语法标志位,固定为1unsignedzero:1//0 unsignedreserved _ 1:2;//保留位未签名

  dsection_length:12;//表示有用的字节数,包括CRC32unsignedtransport_stream_id:16;//该传输流的ID,区别于一个网络中其它多路复用的流unsignedreserved_2:2;//保留位unsignedversion_number:5;//范围0-31,表示PAT的版本号unsignedcurrent_next_indicator:1;//发送的PAT是当前有效还是下一个PAT有效unsignedsection_number:8;//分段的号码。PAT可能分为多段传输,第一段为00,以后每个分段加1,最多可能有256个分段unsignedlast_section_number:8;//最后一个分段的号码//for(i=0;i i++)//{unsignedprogram_number:16;unsignedreserved_3:3;unsignednetwork_PID:13;//或者program_map_PID//}unsignedCRC_32:32;}PAT_Packet;//ParsePATintParse_PAT(unsignedchar*pTSBuf,PAT_Packet*packet){TS_headerTSheader;if(Parse_TS_packet_header(pTSBuf, TSheader)!=0)return-1;if(TSheader.payload_unit_start_indicator==0x01)//表示含有PSI或者PES头{if(TSheader.PID==0x0)//表示PAT{intiBeginlen=4;intadaptation_field_length=pTSBuf[4];switch(TSheader.adaption_field_control){case0x0://reservedforfutureusebyISO/IECreturn-1;case0x1://无调整字段,仅含有效负载iBeginlen+=pTSBuf[iBeginlen]+1;//+pointer_fieldbreak;case0x2://仅含调整字段,无有效负载return-1;case0x3://调整字段后含有效负载if(adaptation_field_length 0){iBeginlen+=1;//adaptation_field_length占8位iBeginlen+=adaptation_field_length;//+adaptation_field_length}else{iBeginlen+=1;//adaptation_field_length占8位}iBeginlen+=pTSBuf[iBeginlen]+1;//+pointer_fieldbreak;default:break;}unsignedchar*pPAT=pTSBuf+iBeginlen;packet- table_id=pPAT[0];packet- section_syntax_indicator=pPAT[1] 7;packet- zero=pPAT[1] 6 0x1;packet- reserved_1=pPAT[1] 4 0x3;packet- section_length=(pPAT[1] 0x0F) 8

  pPAT[2];packet- transport_stream_id=pPAT[3] 8

  pPAT[4];packet- reserved_2=pPAT[5] 6;packet- version_number=pPAT[5] 1 0x1F;packet- current_next_indicator=(pPAT[5] 7) 7;packet- section_number=pPAT[6];packet- last_section_number=pPAT[7];intlen=0;len=3+packet- section_length;packet- CRC_32=(pPAT[len-4] 0x000000FF) 24

  (pPAT[len-3] 0x000000FF) 16

  (pPAT[len-2] 0x000000FF) 8

  (pPAT[len-1] 0x000000FF);intn=0;for(n=0;n (packet- section_length-12);n+=4){packet- program_number=pPAT[8+n] 8

  pPAT[9+n];packet- reserved_3=pPAT[10+n] 5;if(packet- program_number==0x00){packet- network_PID=(pPAT[10+n] 0x1F) 8

  pPAT[11+n];}else{//有效的PMT的PID,然后通过这个PID值去查找PMT包program_map_PID=(pPAT[10+n] 0x1F) 8

  pPAT[11+n];}}return0;}}return-1;}

  4.2 PMT解析

  由PAT包中的program_map_PID可以确定PMT(Program Map Table)的PID。PMT数据的信息可以理解为这个节目包含的音频和视频信息。

  //ProgramMapTabletypedefstructPMT_Packet_tag{unsignedtable_id:8;unsignedsection_syntax_indicator:1;unsignedzero:1;unsignedreserved_1:2;unsignedsection_length:12;unsignedprogram_number:16;unsignedreserved_2:2;unsignedversion_number:5;unsignedcurrent_next_indicator:1;unsignedsection_number:8;unsignedlast_section_number:8;unsignedreserved_3:3;unsignedPCR_PID:13;unsignedreserved_4:4;unsignedprogram_info_length:12;//for(i=0;i i++)//{unsignedstream_type:8;unsignedreserved_5:3;unsignedelementary_PID:13;unsignedreserved_6:4;unsignedES_info_length:12;//}unsignedCRC_32:32;}PMT_Packet;//ParsePMTintParse_PMT(unsignedchar*pTSBuf,PMT_Packet*packet){//参考Parse_PAT()来做就行了//...return0;}

  4.3 PES解析

  根据文档参考PAT、PMT的解析流程就能完成PES的解析了。

  需要注意的是PES中PTS的解析,一般来说在90 kHz 中,PTS/9000的值为秒单位。

  unsignedlonglongParse_PTS(unsigned*pBuf){unsignedlonglongllpts=(((unsignedlonglong)(pBuf[0] 0x0E)) 29)

  (unsignedlonglong)(pBuf[1] 22)

  (((unsignedlonglong)(pBuf[2] 0xFE)) 14)

  (unsignedlonglong)(pBuf[3] 7)

  (unsignedlonglong)(pBuf[4] 1);returnllpts;}PES结构详解

  领取音视频开发学习资料:https://docs.qq.com/doc/DQm1VTHBlQmdmTlN2

  PES前面几个字段填写 :

  //生成pes头数据buffer[0]=0x00;buffer[1]=0x00;buffer[2]=0x01;buffer[3]=(unsignedchar)(pes- stream_id);buffer[4]=(unsignedchar)((pes_header_len_syt 8) 0xff);buffer[5]=(unsignedchar)(pes_header_len_syt 0xff); buffer[6]=(1 7)//2-checkbits 10

  ((prc- encrypt 0x03) 4)//2-PES_scrambling_control(0)

  ((pes_priority 1) 3)//1-PES_priority(0)

  (((~stuff_flag) 1) 0x04)//1-data_alignment_indicator(0)

  0//1-copyright(0)

  0;//1-original_or_copy(0) buffer[7]=(((unsignedchar)pes- add_pts) 7)

  ((unsignedchar)pes- add_user_data);// buffer[7]=((unsignedchar)pes- add_pts) 7;//2-PTS_DTS_flags() //1-ESCR_flag(0) //1-ES_rate_flag(0) //1-DSM_trick_mode_flag(0) //1-additional_copy_info_flag(0) //1-PES_CRC_flag(0) //1-PES_extension_flag()buffer[8]=(unsignedchar)pes_header_ext_len; //8-PES_header_data_length pos=9;if(pes- add_pts){pts=prc- ptime_stamp;buffer[pos++]=(pts 28 0x0e)

  0x21; //4- 0010 //3-PTS[32..30] //1-marker_bit buffer[pos++]=(pts 21); //8-PTS[29..22] buffer[pos++]=(pts 13 0xfe)

  0x01; //7-PTS[21..15] //1-marker_bit buffer[pos++]=(pts 6); //8-PTS[14..7] buffer[pos++]=(pts 2 0xfc)

  0x01; //7-PTS[6..0] //1-marker_bit}

  接收方PTS时间戳的获取PTS和DTS字段,本来有效信息是33位,扩展至5个字节,也就是40位。扩展方式:

  通过上边这个图可以清楚地看到,PTS的33位的各部分,如果从左至右的绿色部分分别为PTS1,PTS2,PTS3的话,那么PTS的计算:

  PTS = (PTS1 0x0e) 29 + (PTS2 0xfffe) 14 + (PTS3 0xfffe ) 1;

  DTS(如果有)紧接着后边读取5个字节的数据,也是这样求出来的。

   相关文章

  十大巅峰网游小说(十大公认网游小说神作推荐)

  百度网盘登陆入口(百度网盘共享群的正确使用方法)

  恶人传评价(《恶人传》以暴制暴成了救赎)

  百度网盘登录入口(百度网盘安装方法)

  番禺中学排名(番禺区热门学校盘点)

  马路标志(交通安全标示大全及图解)

  苹果序列号是哪个(iPhone序列号知识扫盲)

  故宫太和殿介绍(故宫的太和殿为什么叫金銮殿)

  东营人均gdp(中国人均GDP前15强城市)

  陆贞原型(陆贞传奇的原型各个奇葩)

  硫酸铜什么颜色(硫酸铜的用途与危害)

  小米平板4参数(小米平板4参数全曝光)

  更多TS文件什么意思(ts的格式)相关信息请关注本文章,本文仅仅做为展示!

Tags: 网络趣事  

很赞哦! ()

留言与评论 (共有 条评论)
验证码:

本栏推荐