⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dvb_descriptor.c

📁 dvbsnoop is a DVB/MPEG stream analyzer program. The program can be used to sniff, monitor, debug, d
💻 C
📖 第 1 页 / 共 5 页
字号:
/*$Id: dvb_descriptor.c,v 1.41 2005/01/17 19:41:22 rasc Exp $  DVBSNOOP a dvb sniffer  and mpeg2 stream analyzer tool http://dvbsnoop.sourceforge.net/ (c) 2001-2005   Rainer.Scherg@gmx.de (rasc) -- DVB Descriptors  ETSI 300 468 -- EN/ISO/TR document references in comments may habe been changed -- during updates of documents by ETSI.$Log: dvb_descriptor.c,v $Revision 1.41  2005/01/17 19:41:22  rascBugfix: data broadcast descriptor (tnx to Sergio SAGLIOCCO, SecureLAB)Revision 1.40  2004/11/03 21:00:50  rasc - New: "premiere.de" private tables and descriptors (tnx to Peter.Pavlov, Premiere) - New: cmd option "-privateprovider <provider name>" - New: Private provider sections and descriptors decoding - Changed: complete restructuring of private descriptors and sectionsRevision 1.39  2004/08/27 23:25:52  rasc - Update: changes due to  EN 300 468 v1.6.1 - Bugfix: Multilingual component descriptor  (tnx to Karsten Siebert)Revision 1.38  2004/08/25 19:51:09  rasc - Update: EN 300 468 v1.6.1 Terrestrial delivery system descriptorRevision 1.37  2004/08/24 21:30:22  rascmore MetadataRevision 1.36  2004/08/22 18:36:45  rasc - Bugfix: multilang service descriptor fix  (tnx to Karsten Siebert) - New: MetaData Section  (Basic) (H.222.0 AMD1)Revision 1.35  2004/08/07 22:10:00  rascBugfix: NIT cable frequency display (reported by Karsten Siebert )Revision 1.34  2004/08/01 21:33:08  rascminor TVA stuff (TS 102 323)Revision 1.33  2004/07/25 20:12:58  rasc - New: content_identifier_descriptor (TS 102 323) - New: TVA_id_descriptor (TS 102 323) - New: related_content_descriptor (TS 102 323) - New: default_authority_descriptor (TS 102 323)Revision 1.32  2004/07/24 11:44:44  rascEN 301 192 update - New: ECM_repetition_rate_descriptor (EN 301 192 v1.4.1) - New: time_slice_fec_identifier_descriptor (EN 301 192 v1.4.1) - New: Section MPE_FEC  EN 301 192 v1.4 - BugfixesRevision 1.31  2004/04/15 03:38:50  rascnew: TransportStream sub-decoding (ts2PES, ts2SEC)  [-tssubdecode]checks for continuity errors, etc. and decode in TS enclosed sections/pes packetsRevision 1.30  2004/04/05 17:32:13  rascmass typo fix adaption --> adaptationRevision 1.29  2004/02/10 22:57:54  rascMHP descriptor, missing DVB descriptor doneRevision 1.28  2004/02/09 22:56:59  rascBugfix VBI Data descriptorRevision 1.27  2004/02/09 21:24:57  rascAIT descriptorsminor redesign on output routinesRevision 1.26  2004/01/02 16:40:34  rascDSM-CC  INT/UNT descriptors completeminor changes and fixesRevision 1.25  2004/01/01 20:35:26  rascPES program stream map, minor descriptor cleanupRevision 1.24  2004/01/01 20:31:22  rascPES program stream map, minor descriptor cleanupRevision 1.23  2004/01/01 20:09:19  rascDSM-CC INT/UNT descriptorsPES-sync changed, TS sync changed,descriptor scopeother changesRevision 1.22  2003/12/27 22:02:43  rascdsmcc INT UNT descriptors startedRevision 1.21  2003/12/27 14:35:00  rascdvb-t descriptorsDSM-CC: SSU Linkage/DataBroadcast descriptorsRevision 1.20  2003/12/26 23:27:39  rascDSM-CC  UNT sectionRevision 1.19  2003/11/26 23:54:47  rasc-- bugfixes on Linkage descriptorRevision 1.18  2003/11/26 16:27:45  rasc- mpeg4 descriptors- simplified bit decoding and output functionRevision 1.17  2003/11/24 23:52:16  rasc-sync option, some TS and PES stuff;dsm_addr inactive, may be wrong - due to missing ISO 13818-6Revision 1.16  2003/11/09 20:48:34  rascpes data packet (DSM-CC)Revision 1.15  2003/11/07 16:33:32  rascno messageRevision 1.14  2003/11/01 21:40:27  rascsome broadcast/linkage descriptor stuffRevision 1.13  2003/10/29 20:54:56  rascmore PES stuff, DSM descriptors, testdataRevision 1.12  2003/10/26 21:36:19  rascprivate DSM-CC descriptor Tags started,INT-Section completed..Revision 1.11  2003/10/26 19:06:27  rascno messageRevision 1.10  2003/10/25 19:11:49  rascno messageRevision 1.9  2003/10/24 22:45:04  rasccode reorg...Revision 1.8  2003/10/24 22:17:17  rasccode reorg...Revision 1.7  2003/10/21 21:31:29  rascno messageRevision 1.6  2003/10/21 19:54:43  rascno messageRevision 1.5  2003/10/19 22:31:38  rasc- some datacarousell stuff startedRevision 1.4  2003/10/19 22:22:57  rasc- some datacarousell stuff startedRevision 1.3  2003/10/19 21:05:53  rasc- some datacarousell stuff startedRevision 1.2  2003/10/16 19:02:28  rascsome updates to dvbsnoop...- small bugfixes- tables updates from ETR 162Revision 1.1  2003/07/08 19:59:50  rascrestructuring... some new, some fixes,trying to include DSM-CC, Well someone a ISO13818-6 and latest version of ISO 18313-1 to spare?*/#include "dvbsnoop.h"#include "descriptor.h"#include "dvb_descriptor.h"#include "private/userdefs.h"#include "strings/dvb_str.h"#include "strings/dsmcc_str.h"#include "misc/hexprint.h"#include "misc/output.h"/*  determine descriptor type and print it...  EN 300 468:  descriptor_tag: The descriptor tag is an 8-bit field which identifies  each descriptor. Those values with MPEG-2 normative meaning are described  in ISO/IEC 13818-1 [1].  return byte length*/int  descriptorDVB  (u_char *b){ int len; int id;  id  =  (int) b[0];  len = ((int) b[1]) + 2;  out_NL (4);  out_S2B_NL (4,"DVB-DescriptorTag: ",id, dvbstrDVBDescriptorTAG(id));  out_SB_NL  (5,"Descriptor_length: ",b[1]);  // empty ??  len = ((int)b[1]) + 2;  if (b[1] == 0)	 return len;  // print hex buf of descriptor  printhex_buf (9, b,len);  switch (b[0]) {     case 0x40:  descriptorDVB_NetName (b);  break;     case 0x41:  descriptorDVB_ServList (b);  break;     case 0x42:  descriptorDVB_Stuffing (b);  break;     case 0x43:  descriptorDVB_SatDelivSys (b);  break;     case 0x44:  descriptorDVB_CableDelivSys (b);  break;     case 0x45:  descriptorDVB_VBI_Data (b);  break;     case 0x46:  descriptorDVB_VBI_Teletext (b);  break;     case 0x47:  descriptorDVB_BouquetName (b);  break;     case 0x48:  descriptorDVB_Service (b);  break;     case 0x49:  descriptorDVB_CountryAvail (b);  break;     case 0x4A:  descriptorDVB_Linkage (b);  break;     case 0x4B:  descriptorDVB_NVOD_Reference (b);  break;     case 0x4C:  descriptorDVB_TimeShiftedService (b);  break;     case 0x4D:  descriptorDVB_ShortEvent (b);  break;     case 0x4E:  descriptorDVB_ExtendedEvent (b);  break;     case 0x4F:  descriptorDVB_TimeShiftedEvent(b);  break;     case 0x50:  descriptorDVB_Component(b);  break;     case 0x51:  descriptorDVB_Mosaic(b);  break;     case 0x52:  descriptorDVB_StreamIdent (b);  break;     case 0x53:  descriptorDVB_CAIdentifier (b);  break;     case 0x54:  descriptorDVB_Content (b);  break;     case 0x55:  descriptorDVB_ParentalRating(b);  break;     case 0x56:  descriptorDVB_Teletext (b);  break;     case 0x57:  descriptorDVB_Telephone (b);  break;     case 0x58:  descriptorDVB_LocalTimeOffset (b);  break;     case 0x59:  descriptorDVB_Subtitling (b);  break;     case 0x5A:  descriptorDVB_TerrestDelivSys (b);  break;     case 0x5B:  descriptorDVB_MultilingNetworkName (b);  break;     case 0x5C:  descriptorDVB_MultilingBouquetName (b);  break;     case 0x5D:  descriptorDVB_MultilingServiceName (b);  break;     case 0x5E:  descriptorDVB_MultilingComponent (b);  break;     case 0x5F:  descriptorDVB_PrivateDataSpecifier (b);  break;     case 0x60:  descriptorDVB_ServiceMove (b);  break;     case 0x61:  descriptorDVB_ShortSmoothingBuffer (b);  break;     case 0x62:  descriptorDVB_FrequencyList (b);  break;     case 0x63:  descriptorDVB_PartialTransportStream(b);  break;     case 0x64:  descriptorDVB_DataBroadcast(b);  break;     case 0x65:  descriptorDVB_CASystem(b);  break;    /* $$$ reserved now ?? */     case 0x66:  descriptorDVB_DataBroadcastID(b);  break;     case 0x67:  descriptorDVB_TransportStream(b);  break;     case 0x68:  descriptorDVB_DSNG(b);  break;     case 0x69:  descriptorDVB_PDC(b);  break;     case 0x6A:  descriptorDVB_AC3(b);  break;     case 0x6B:  descriptorDVB_AncillaryData(b);  break;     case 0x6C:  descriptorDVB_CellList(b);  break;     case 0x6D:  descriptorDVB_CellFrequencyLink(b);  break;     case 0x6E:  descriptorDVB_AnnouncementSupport(b);  break;     case 0x6F:  descriptorDVB_ApplicationSignalling(b);  break;     case 0x70:  descriptorDVB_AdaptationFieldData(b);  break;     case 0x71:  descriptorDVB_ServiceIdentifier(b);  break;     case 0x72:  descriptorDVB_ServiceAvailability(b);  break;		 // TV ANYTIME  TS 102 323     case 0x73:  descriptorDVB_DefaultAuthority(b);  break;     case 0x74:  descriptorDVB_RelatedContent(b);  break;     case 0x75:  descriptorDVB_TVA_ID(b);  break;     case 0x76:  descriptorDVB_ContentIdentifier(b);  break;		 // EN 301 192 v1.4.1  MPE_FEC     case 0x77:  descriptorDVB_TimesliceFecIdentifier(b);  break;     case 0x78:  descriptorDVB_ECM_RepetitionRate(b);  break;     default: 	if (b[0] < 0x80) {	    out_nl (0,"  ----> ERROR: unimplemented descriptor (dvb context), Report!");	}	// descriptor_any (b);	descriptor_PRIVATE (b, DVB_SI);	break;  }   return len;   // (descriptor total length)}/* ---------------------------------------------------------------   well known DVB descriptors   --------------------------------------------------------------- *//*  0x40 NetName  descriptor  (network name descriptor)  EN 300 468  -- checked v1.6.1*/void descriptorDVB_NetName (u_char *b){  int  len;  // tag	 = b[0];  len       	 = b[1];  print_text_468A (4, "Network_name: ", b+2,len);}/*  0x41 Service List Descriptor   EN 300 468  -- adapted v1.6.1*/void descriptorDVB_ServList (u_char *b){ int    len; // tag 	= b[0]; len 		= b[1]; b   += 2; len -= 2; indent (+1); while (len > 0) {   int	stype;   stype = b[2];   // prefetch service_type == (b, 16,8)   outBit_Sx (4,"service_ID: ", 	b,  0,  16);   if (stype != 0x04) {    // 0x04 = NVOD	out (4,	"[ --> refers to PMT program_number]");   }   out_NL (4);   outBit_S2x_NL  (4,"service_type: ", 	b, 16,  8,		 (char *(*)(u_long)) dvbstrService_TYPE );   b   += 3;   len -= 3;   out_NL (4); } indent (-1);}/*  0x42  Stuffing descriptor   ETSI EN 300 468  */void descriptorDVB_Stuffing (u_char *b){  descriptor_any (b);}/*  0x43 SatDelivSys  descriptor  (Satellite delivery system descriptor)  EN 300 468  -- adapted v1.6.1*/void descriptorDVB_SatDelivSys (u_char *b){ typedef struct  _descSDS {    u_int      descriptor_tag;    u_int      descriptor_length;		    u_long     frequency;    u_int      orbital_position;    u_int      west_east_flag;    u_int      polarisation;    u_int      modulation;    u_long     symbol_rate;    u_int      FEC_inner; } descSDS; descSDS  d; //int      i; d.descriptor_tag		 = b[0]; d.descriptor_length       	 = b[1]; d.frequency			 = getBits (b, 0, 16, 32); d.orbital_position		 = getBits (b, 0, 48, 16); d.west_east_flag		 = getBits (b, 0, 64, 1); d.polarisation			 = getBits (b, 0, 65, 2); d.modulation			 = getBits (b, 0, 67, 5); d.symbol_rate			 = getBits (b, 0, 72, 28); d.FEC_inner			 = getBits (b, 0, 100, 4); out_nl (4,"Frequency: %lu (= %3lx.%05lx GHz)",d.frequency,	 d.frequency >> 20, d.frequency & 0x000FFFFF ); out_nl (4,"Orbital_position: %u (= %3x.%01x)",d.orbital_position,	 d.orbital_position >> 4, d.orbital_position & 0x000F); out_S2B_NL (4,"West_East_flag: ",d.west_east_flag,	 dvbstrWEST_EAST_FLAG(d.west_east_flag)); out_S2B_NL (4,"Polarisation: ",d.polarisation,	 dvbstrPolarisation_FLAG(d.polarisation)); out_S2B_NL (4,"Modulation (Sat): ",d.modulation,	 dvbstrModulationSAT_FLAG(d.modulation)); out_nl (4,"Symbol_rate: %u (= %3x.%04x)",d.symbol_rate,	 d.symbol_rate >> 16, d.symbol_rate & 0x0000FFFF ); out_S2B_NL (4,"FEC_inner: ",d.FEC_inner,	 dvbstrFECinner_SCHEME (d.FEC_inner));}/*  0x44 CableDelivSys  descriptor  (Cable delivery system descriptor)  EN 300 468  -- adapted v1.6.1*/void descriptorDVB_CableDelivSys (u_char *b){ /* ETSI 300 468    6.2.xx */ typedef struct  _descCDS {    u_int      descriptor_tag;    u_int      descriptor_length;		    u_long     frequency;    u_int      FEC_outer;    u_int      reserved_1;    u_int      modulation;    u_long     symbol_rate;    u_int      FEC_inner; } descCDS; descCDS  d; //int      i; d.descriptor_tag		 = b[0]; d.descriptor_length       	 = b[1]; d.frequency			 = getBits (b, 0, 16, 32); d.reserved_1			 = getBits (b, 0, 48, 12); d.FEC_outer			 = getBits (b, 0, 60, 4); d.modulation			 = getBits (b, 0, 64, 8); d.symbol_rate			 = getBits (b, 0, 72, 28); d.FEC_inner			 = getBits (b, 0, 100, 4); out_nl (4,"Frequency: %lu (= %3lx.%04lx MHz)",d.frequency,	 d.frequency >> 16, d.frequency & 0x0000FFFF ); out_S2B_NL (4,"FEC_outer: ",d.FEC_outer,	 dvbstrFECouter_SCHEME (d.FEC_outer)); out_SB_NL (6,"reserved_1: ",d.reserved_1); out_S2B_NL (4,"Modulation (Cable): ",d.modulation,	 dvbstrModulationCable_FLAG(d.modulation)); out_nl (4,"  Symbol_rate: %u (= %4x.%04x)",d.symbol_rate,	 d.symbol_rate >> 16, d.symbol_rate & 0x0000FFFF ); out_S2B_NL (4,"FEC_inner: ",d.FEC_inner,	 dvbstrFECinner_SCHEME (d.FEC_inner));}/*  0x45  VBI Data  descriptor   ETSI EN 300 468  2.2.42  -- checked v1.6.1*/void descriptorDVB_VBI_Data  (u_char *b){ int           len1; // dtag	 = b[0]; len1       	 = b[1]; b += 2; indent (+1); while (len1 > 0) {	int  ds_id;	int  len2;    	out_NL (4); 	ds_id =	outBit_S2x_NL (4,"Data_service_id: ",			b,  0,  8,			(char *(*)(u_long)) dvbstrDataService_ID);	len2 = outBit_Sx_NL   (4,"Data_service_descriptor_length: ",	b,  8,  8);	b    += 2;	len1 -= 2;	if ((ds_id >= 1 && ds_id <= 7) && (ds_id != 3) ) {		indent (+1);		while (len2 > 0) {           		out_NL (4);			outBit_Sx_NL   (6,"reserved_1: ",	b,  0,  2);			outBit_Sx_NL   (4,"field_parity: ",	b,  2,  1);			outBit_Sx_NL   (4,"line_offset: ",	b,  3,  5);			b++;	   		len2--;			len1--;		} 		indent (-1);	} else {		print_databytes (6,"Reserved Data:", b,len2);		b += len2;		len1 -= len2;	} } indent (-1);}/*  0x46  VBI teletext descriptor   ETSI EN 300 468   6.2.xx*/void descriptorDVB_VBI_Teletext (u_char *b){  descriptorDVB_Teletext (b);}/*  0x47  Bouquet Name  descriptor   ETSI EN 300 468    6.2.xx*/void descriptorDVB_BouquetName  (u_char *b){  int len;  // tag	 = b[0];  len       	 = b[1];  print_text_468A (4, "BouquetName: ", b+2,len);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -