资源简介
TS demux到ES流,然后ES到PES再到TS进行打包,童叟无欺。

代码片段和文件信息
#include
unsigned char Mbuf[10*188 * 1024];
//分离TS
int Tsdumx(char *srcfilechar *tsfileunsigned short pid)
{
unsigned char *p;
int Tssize=0;
FILE *fpd*fp;
unsigned short Pid;
fp = fopen(srcfile“rb“);
fpd = fopen(tsfile“wb“);
// if(fp==NULL )printf(“*********************“);
// if(fpd == NULL)printf(“*********************“);
if(fp==NULL || fpd == NULL)
{return -1;}
do{
Tssize = fread(Mbuf 1 sizeof(Mbuf) fp);
p = Mbuf;
while( p + 188 <= Mbuf + Tssize )//寻找TS包的起始点
{
if( p + 376 < Mbuf + Tssize )//TS超过3个包长
{
if( *p == 0x47 && *(p+188) == 0x47 && *(p+376) == 0x47 )
break;
}
else if( p + 188 < Mbuf + Tssize )//TS为两个包长
{
if( *p == 0x47 && *(p+188) == 0x47 )
break;
}
else if( *p == 0x47 )//ts为一个包长
break;
p++;
}
while( p < Mbuf + Tssize)//将视频流数据提取出来,写到另一个新的文件中
{
Pid = ((p[1] & 0x1f)<<8) | p[2];
if( Pid == pid)
fwrite(p1188fpd);
p += 188;
}
}while(! feof( fp ));
fclose(fp );
fclose(fpd );
printf(“TS包已经分离完!\n“);
return 0;
}
//提取PES
int Ts2Pes(char *tsfilechar *pesfileunsigned short pid)
{
FILE *fpd*fp;
int start = 0;
int sizenumtotal;
int count = 0;
unsigned char *p*payload;
unsigned short Pid;
unsigned char Lcounter = 0xff;
unsigned char Adapcontrol;
unsigned char counter; //计数器
fp = fopen( tsfile “rb“);
fpd = fopen( pesfile “wb“);
if(fp == NULL || fpd == NULL )
return -1;
//初始化设置值大小
total = 0;
num = 0;
size = 0;
while( ! feof( fp ))
{
size = fread(Mbuf 1sizeof(Mbuf) fp);
p = Mbuf;
do{
Pid = (((p[1] & 0x1f)<<8) | p[2]); //获取pid
Adapcontrol = (p[3]>>4)&0x3 ; //判断自适应区是否有可调整字段
counter = p[3]&0xf ; //提取连续计数器
if( Pid == pid)
{
payload = NULL;
switch(Adapcontrol)
{
case 0: //保留
case 2:
break; //2为只有调整无负载
case 1:
payload = p + 4; //无调整字段
break;
case 3:
payload = p + 5 + p[4]; //调整字段后是净荷
break;
}
if((p[1] & 0x40)!= 0 )//取出有效荷载单元起始指示符,确定TSpes数据开始
{
start = 1;
}
if(start && payload && fpd)//往fpd写pes包数据
{
fwrite(payload 1p+188-payload fpd);
}
if( Lcounter != 0xff && ((Lcounter + 1)&0xf) != counter)//判断数据是否丢失
{
///////////// printf(“%ddata lost\n“count);
count++;
}
Lcounter = counter ;
}
p += 188;
total += 188;
}while(p }
fclose( fp );
fclose( fpd );
printf( “PES包分离完!\n“ );
return 0;
}
//提取ES
int pes2es( char *pesfile char *esfile )
{
FILE *fpd *fp;
unsigned char *p *payload *tmp;
int size num rdsize;
unsigned int last = 0;
__int64 total = 0 wrsize = 0;
unsigned int Lenght;
unsigned char PES_extension_flag;
unsigned char PES_header_data_Lenghtgth;
unsigned char PTS_DTS_flags;
int k=0;
fp = fopen( pesfile “rb“ );
fpd = fopen( esfile “wb“ );
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 41984 2011-03-24 19:05 if
文件 176212 2011-03-25 08:48 if
文件 180392 2011-03-25 08:48 if
文件 20998 2011-03-25 08:48 if
文件 175484 2011-03-24 19:19 if
文件 353280 2011-03-25 08:48 if
文件 0 2011-03-24 19:05 if
文件 33792 2011-03-25 08:48 if
文件 53248 2011-03-25 08:48 if
文件 14246 2011-03-25 08:46 if
文件 3387 2011-03-24 19:23 if
文件 535 2011-03-24 21:13 if
文件 41984 2011-03-25 08:58 if
文件 53760 2011-03-25 08:58 if
文件 1541 2011-03-25 08:48 if
目录 0 2011-03-25 08:48 if
目录 0 2011-03-25 09:02 if
----------- --------- ---------- ----- ----
1150843 17
- 上一篇:fm_gui_v2.zip
- 下一篇:ADS1.2-ARM集成开发环境链接
相关资源
- Remote Desktop Organizer v1.4.7 支持win10
- res10_300x300_ssd_iter_140000.caffemodel与dep
- umeshmotion网格推移
- TSCC.exe
- 基于ACCESS的生产管理信息系统.mdb
- ACCESS财务报表(带数据).accdb
-
st
yles 引文样式语言( CSL ) 引文样 - The direction of synaptic plasticity mediated
- Reparatory Effects of Nicotine on NMDA Recepto
- Histamine excites rat lateral vestibular nucle
- 引力波是玻色-爱因斯坦凝聚物暗物质
- Fabrication and all-optical poling characteris
- VirTest5.0.rar
- ASUS BIOS 加NVME协议文件: Nvme.ffs NV
- vSphere6.06.56.7通用版注册机
- 一个超简单的企业管理系统(带ACCE
- 连续hopfield神经网络解决TSP问题
- 信号估计DOAmusicespritcapon
- Bresenham算法绘制线段并利用“橡皮筋
- DXperienceUniversal 10.1.6(2010年8月13日版
- 51单片机基于protues的几个仿真实例
- 韩国浦项MES系统架构(超靓)
- YS
- 步进电机protues仿真
- 现代谱估计算法 music ESPRIT 谐波分解
- 一个测试报告的模板,有点用
- VESA Computer Display Monitor Timing (DMT)
- Access数据库在线编辑器
- QQCOOKIES状态维护、防掉线
- 超市收银系统eclipse access大学课程设计
评论
共有 条评论