资源简介
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集成开发环境链接
相关资源
- 用FileStream流读取二进制文件,16进制
- DevExpress 13.1.4 13.1.5 破解
- Lattice IPexpress使用指南
- Microsoft.Practices.ServiceLocation
- 模拟Digest认证的登录demo
- ArcGIS 10.2许可文件(LicenceManager+Deskt
- Altium designer 6.0网址
- JS实现的desktop桌面超炫
- 小班自动编号——ArcGIS Desktop 10插件
- MSP430G2系列代码(含MSP430G2553) Code
- 李炎恢bootstrap3视频 讲义 代码
- 51单片机 矩阵键盘 protues ISIS 源码和仿
- 低频信号发生器protues仿真与C程序
- Bootstrap可视化布局离线版
- 基于单片机的交通灯keil仿真程序和
- psd2uGUI的AssetStore版本
- ant design pro动态菜单
- PowerDesigner16.6 64位破解文件
- Unity3D中Blendshapes之间的过渡方式
- Barcode components for QuickReport.
- pycharm-professional-2018.1.3.tar.gz
- PowerDesigner16.5非破解版-win10可用
- DevExpress VCL 18.2.5 Full Sources and DxAutoI
- visio_professional_2013安装包
- Ansys.Products.PDF.Docs.2020R2第一部分用户
- 全网首发,ESXi670-202006001合成RealTek网
- STS spring-tool-suite 3.9.2 e4.7.2
- 旋转不变算法ESPRIT
- stata estout
- Freescale MC9S12XEP Bootloader 下位机
评论
共有 条评论