TS 标头的问题
Problems with ts header
我写这个问题是想看看是否有人知道这段代码会发生什么。编写了以下行,目的是删除 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)当我添加更多分析元素"拼接点标志"日食不执行代码时,somo显示行g:打印,并完成。
2)条件if(n,n<8;n ++)是否给它一个大于8的值只显示一个TS文件的有限数量的包,而不是全部。有谁知道为什么会出现这些问题,或者另一种以不同方式做同样事情的方法?
好吧,我觉得很愚蠢。我发现了问题。问题是将变量定义为一个包,当必须工作时,最终的 gchar 应该定义为 guint8 并具有一定的大小。如果我们使用 ts 解复用器创建一个管道,我们可以将这行代码用于可视化和研究构成 TS 标头的位。
通过此修改,我现在可以调整 8 188 个中的一个的大小并查看所有项目。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- TS 标头的问题
- 使用 FFMPEG 库到 UDP 流 mpeg2 ts 视频延迟/初始连接问题