¡¡¡¡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***/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/