H2642PES

来源:互联网 发布:套淘宝保证金如何秒回 编辑:程序博客网 时间:2024/06/06 17:00

http://blog.csdn.net/nine_locks/article/details/46965885


[cpp] view plain copy
 print?
  1. int H2642PES()                                
  2. {  
  3.     Ts_Adaptation_field  ts_adaptation_field_Head ;   
  4.     Ts_Adaptation_field  ts_adaptation_field_Tail ;   
  5.   
  6.   
  7.     ts_video_pes->packet_start_code_prefix = 0x000001;  
  8.     ts_video_pes->stream_id = TS_H264_STREAM_ID;                               //E0~EF表示是视频的,C0~DF是音频,H264-- E0  
  9.     ts_video_pes->PES_packet_length = 0 ;// OneFrameLen_H264 + 8;              //一帧数据的长度 不包含 PES包头 ,这个8 是 自适应的长度,填0 可以自动查找  
  10.     ts_video_pes->Pes_Packet_Length_Beyond = OneFrameLen_H264;  
  11.   
  12.   
  13.     if (OneFrameLen_H264 > 0xFFFF)                                             //如果一帧数据的大小超出界限  
  14.     {  
  15.         ts_video_pes->PES_packet_length = 0x00;  
  16.         ts_video_pes->Pes_Packet_Length_Beyond = OneFrameLen_H264;  
  17.     }  
  18.     ts_video_pes->marker_bit = 0x02;  
  19.     ts_video_pes->PES_scrambling_control = 0x00;                               //人选字段 存在,不加扰  
  20.     ts_video_pes->PES_priority = 0x00;  
  21.     ts_video_pes->data_alignment_indicator = 0x00;  
  22.     ts_video_pes->copyright = 0x00;  
  23.     ts_video_pes->original_or_copy = 0x00;  
  24.     ts_video_pes->PTS_DTS_flags = 0x03;  
  25.     ts_video_pes->ESCR_flag = 0x00;  
  26.     ts_video_pes->ES_rate_flag = 0x00;  
  27.     ts_video_pes->DSM_trick_mode_flag = 0x00;  
  28.     ts_video_pes->additional_copy_info_flag = 0x00;  
  29.     ts_video_pes->PES_CRC_flag = 0x00;  
  30.     ts_video_pes->PES_extension_flag = 0x00;  
  31.     ts_video_pes->PES_header_data_length = 0x0a;                                //后面的数据 包括了  PTS和 DTS所占的字节数  
  32.   
  33.   
  34.     //清 0   
  35.     ts_video_pes->tsptsdts.pts_32_30  = 0;  
  36.     ts_video_pes->tsptsdts.pts_29_15 = 0;  
  37.     ts_video_pes->tsptsdts.pts_14_0 = 0;  
  38.     ts_video_pes->tsptsdts.dts_32_30 = 0;  
  39.     ts_video_pes->tsptsdts.dts_29_15 = 0;  
  40.     ts_video_pes->tsptsdts.dts_14_0 = 0;  
  41.   
  42.   
  43.     ts_video_pes->tsptsdts.reserved_1 = 0x0003;                                 //填写 pts信息  
  44.     // Videopts大于30bit,使用最高三位   
  45.     if(Videopts > 0x7FFFFFFF)  
  46.     {  
  47.         ts_video_pes->tsptsdts.pts_32_30 = (Videopts >> 30) & 0x07;                   
  48.         ts_video_pes->tsptsdts.marker_bit1 = 0x01;  
  49.     }  
  50.     else   
  51.     {  
  52.         ts_video_pes->tsptsdts.marker_bit1 = 0;  
  53.     }  
  54.     // Videopts大于15bit,使用更多的位来存储  
  55.     if(Videopts > 0x7FFF)  
  56.     {  
  57.         ts_video_pes->tsptsdts.pts_29_15 = (Videopts >> 15) & 0x007FFF ;  
  58.         ts_video_pes->tsptsdts.marker_bit2 = 0x01;  
  59.     }  
  60.     else  
  61.     {  
  62.         ts_video_pes->tsptsdts.marker_bit2 = 0;  
  63.     }  
  64.     //使用最后15位  
  65.     ts_video_pes->tsptsdts.pts_14_0 = Videopts & 0x007FFF;  
  66.     ts_video_pes->tsptsdts.marker_bit3 = 0x01;  
  67.   
  68.   
  69.   
  70.   
  71.     ts_video_pes->tsptsdts.reserved_2 = 0x0001;                                 //填写 dts信息  
  72.     // Videopts大于30bit,使用最高三位   
  73.     if(Videodts > 0x7FFFFFFF)  
  74.     {  
  75.         ts_video_pes->tsptsdts.dts_32_30 = (Videodts >> 30) & 0x07;                   
  76.         ts_video_pes->tsptsdts.marker_bit4 = 0x01;  
  77.     }  
  78.     else   
  79.     {  
  80.         ts_video_pes->tsptsdts.marker_bit4 = 0;  
  81.     }  
  82.     // Videopts大于15bit,使用更多的位来存储  
  83.     if(Videodts > 0x7FFF)  
  84.     {  
  85.         ts_video_pes->tsptsdts.dts_29_15 = (Videodts >> 15) & 0x007FFF ;  
  86.         ts_video_pes->tsptsdts.marker_bit5 = 0x01;  
  87.     }  
  88.     else  
  89.     {  
  90.         ts_video_pes->tsptsdts.marker_bit5 = 0;  
  91.     }  
  92.     //使用最后15位  
  93.     ts_video_pes->tsptsdts.dts_14_0 = Videodts & 0x007FFF;  
  94.     ts_video_pes->tsptsdts.marker_bit6 = 0x01;  
  95.   
  96.   
  97.     memcpy(ts_video_pes->Es,OneFrameBuf_H264,OneFrameLen_H264);  
  98.   
  99.   
  100.     //将数据存入新的H264 文件检测 中间步骤是否正确  
  101.     fwrite(ts_video_pes->Es,OneFrameLen_H264,1,FOutNEWH264);  
  102.   
  103.   
  104.     WriteAdaptive_flags_Head(&ts_adaptation_field_Head); //填写自适应段标志帧头  
  105.     WriteAdaptive_flags_Tail(&ts_adaptation_field_Tail); //填写自适应段标志帧尾  
  106.   
  107.   
  108.     EnterCriticalSection(&Cs);  
  109.     PES2TS(ts_video_pes,TS_H264_PID,&ts_adaptation_field_Head,&ts_adaptation_field_Tail);   
  110.     LeaveCriticalSection(&Cs);  
  111.     return 1;  
  112. }  






原创粉丝点击