2015-04-20 3 views
0

Я пишу этот вопрос, чтобы узнать, может ли кто-нибудь узнать, что происходит с этим фрагментом кода. Написал следующие строки с целью удаления битов заголовка пакета TS, но у меня есть несколько проблем с кодом.Проблемы с заголовком ts

Это код:

static GstPadProbeReturn TS_Packet (GstPad *padd, GstPadProbeInfo *info, gpointer user_data) 
{ 
     guint8 *byte; 
     gchar *paquete; 
     gsize count_print=0; 

     GstBitReader *bytes_cabecera; 

     GstMapInfo map; 
     GstBuffer *buffer; 

     if (GST_EVENT_TYPE (GST_PAD_PROBE_INFO_DATA (info)) != GST_EVENT_EOS){ 

      buffer = GST_PAD_PROBE_INFO_BUFFER (info);    
      buffer = gst_buffer_make_writable (buffer); 

      gst_buffer_map (buffer, &map, GST_MAP_WRITE); 
      byte=(guint8 *)map.data; 

      while(count_print<map.size){ 

       g_print("\n"); 
       g_print("-Paquete numero del paquete: %d-\n",i); 
       i=i+1; 

       for(n=0; n<8 ;n++){ 
        paquete[n]=byte[n+count_print]; 
        g_print(" %02x ",byte[count_print+n]); 
       }/*for*/ 
       g_print("\n"); 

       bytes_cabecera=gst_bit_reader_new(paquete, map.size); 
       g_print("  ->stream header (32bits)-\n"); 
       guint8 sync = gst_bit_reader_get_bits_uint8_unchecked(bytes_cabecera,8); 

       if(sync==71){ 
        g_print("   Sync_byte: %02x (available) \n",sync); 
       }else{ 
        g_print("   Sync_byte: %02x (no available) \n",sync); 
       }/*else*/ 

       guint8 transport_error_indicator = gst_bit_reader_get_bits_uint8_unchecked(bytes_cabecera,1); 
       if(transport_error_indicator==0){ 
        g_print("   Transport_error_indicator: %d (No_error)\n", transport_error_indicator); 
       }else if (transport_error_indicator==1){ 
        g_print("   Transport_error_indicator: %d (Error)\n", transport_error_indicator); 
       }/*cierro casos de error*/ 

       guint8 Payload_start_indicator = gst_bit_reader_get_bits_uint8_unchecked(bytes_cabecera,1); 

       if(Payload_start_indicator==0){ 
        g_print("   Payload_start_indicator: %d (No_Star_indicator_avalible)\n", Payload_start_indicator); 
       }else if (Payload_start_indicator==1){ 
        g_print("   Payload_start_indicator: %d (Start_indicator_avalible)\n", Payload_start_indicator); 
       }/*cierro casos de payload start indicator*/ 

       guint8 transport_priority = gst_bit_reader_get_bits_uint8_unchecked(bytes_cabecera,1); 

       if(transport_priority==0){ 
        g_print("   Transport_priority: %d (No_Priority_avalibe)\n", transport_priority); 
       }else if (transport_priority==1){ 
        g_print("   Transport_priority: %d (Priority_avalible)\n", transport_priority); 
       }/*cierro casos de Priority*/ 

       guint16 pid_ts= gst_bit_reader_get_bits_uint16_unchecked(bytes_cabecera,13); 
       g_print("   PID: %02d \n",pid_ts); 

       guint8 scramblin_control= gst_bit_reader_get_bits_uint8_unchecked(bytes_cabecera,2); 

       if(scramblin_control==0){ 
       g_print("   Scrambling control: %d (Not scrambled)\n", scramblin_control); 
       }else if (scramblin_control==1){ 
       g_print("   Scrambling control: %d (Reserved for future use)\n", scramblin_control); 
       }else if (scramblin_control==2){ 
       g_print("   Scrambling control: %d (Scrambled with even key)\n", scramblin_control); 
       }else if (scramblin_control==3){ 
       g_print("   Scrambling control: %d (Scrambled with odd key)\n", scramblin_control); 
       }/*cierro el if del scramblin*/ 

       guint8 Adaptation_field_exist= gst_bit_reader_get_bits_uint8_unchecked(bytes_cabecera,1); 

       if(Adaptation_field_exist==0){ 
       g_print("   Adaptation field_exist: %d (No exist)\n", Adaptation_field_exist); 
       }else if (Adaptation_field_exist==1){ 
       g_print("   Adaptation field_exist: %d (Exist)\n", Adaptation_field_exist); 
       }/*cAdaptation field*/ 

       guint8 Contains_payload= gst_bit_reader_get_bits_uint8_unchecked(bytes_cabecera,1); 

       if(Contains_payload==0){ 
       g_print("   Contains payload: %d (No exist)\n", Contains_payload); 
       }else if (Contains_payload==1){ 
       g_print("   Contains payload: %d (Exist)\n", Contains_payload); 
       }/*cAdaptation field*/ 

       guint8 Continuity_counter= gst_bit_reader_get_bits_uint8_unchecked(bytes_cabecera,4); 
       g_print("   Continuity counter: %d \n",Continuity_counter); 



       if(Adaptation_field_exist==1){ 
        g_print("   ->Adaptation Field-\n"); 

        guint8 Adaptation_field_lenght= gst_bit_reader_get_bits_uint8_unchecked(bytes_cabecera,8); 
        g_print("   Adaptation field lenght: %d \n",Adaptation_field_lenght); 

        guint8 Discontinuity_indicator= gst_bit_reader_get_bits_uint8_unchecked(bytes_cabecera,1); 
        g_print("   Discontinuity indicator: %d \n",Discontinuity_indicator); 

        guint8 Random_acces= gst_bit_reader_get_bits_uint8_unchecked(bytes_cabecera,1); 
        g_print("   Random Access indicator: %d \n",Random_acces); 

        guint8 Stream_priority= gst_bit_reader_get_bits_uint8_unchecked(bytes_cabecera,1); 
        g_print("   ES_priority indicator: %d \n",Stream_priority); 

        guint8 PCR_Flag= gst_bit_reader_get_bits_uint8_unchecked(bytes_cabecera,1); 
        g_print("   Flag PCR: %d \n",PCR_Flag); 

        guint8 OPCR_Flag= gst_bit_reader_get_bits_uint8_unchecked(bytes_cabecera,1); 
        g_print("   Flag OPCR: %d \n",OPCR_Flag); 

        //guint8 Splicing_point_flag= gst_bit_reader_get_bits_uint8_unchecked(bytes_cabecera,1); 
        //g_print("   Flag Splicing point: %d \n",Splicing_point_flag); 

        //guint8 Transport_private_data_flag= gst_bit_reader_get_bits_uint8_unchecked(bytes_cabecera,1); 
        //g_print("   Flag Transport private data point: %d \n",Transport_private_data_flag); 

        //guint8 Adaptation_field_extension_flag= gst_bit_reader_get_bits_uint8_unchecked(bytes_cabecera,1); 
        //g_print("   Adaptation field extension flag: %d \n",Adaptation_field_extension_flag); 

       }/*cierro el caso para mi adaptation field*/ 

       g_print("\n"); 

       count_print=count_print+188; 

      }/*cierro el while*/ 

      gst_buffer_unmap (buffer, &map); 

     }/*general*/ 

     return GST_PAD_PROBE_OK; 

}/*pad probe*/ 

проблемы и сомнения:

1) при добавлении более элемента анализа "Сращивание Flag Point" затмение не выполняет код, somo показывает строку g: печать и завершение.

2) имеет ли условное значение if (n, n < 8; n ++) значение, превышающее 8, только показывает ограниченное количество пакетов файла ts, но не всех. Кто-нибудь знает, почему эти проблемы или другой способ сделать то же самое по-другому?

ответ

0

ОК, я чувствую себя очень глупо. Я нашел проблему. Проблема состоит в том, чтобы определить переменную в виде пакета, когда окончательный gchar при работе должен быть определен как guint8 и с определенным размером. Если мы создадим конвейер с ts demux, мы можем поместить эту строку кода в визуализацию и изучение битов, составляющих заголовок TS.

с этой модификацией, теперь я могу изменить размер одного из 8 188 и увидеть все предметы.

Смежные вопросы