資源簡(jiǎn)介
實(shí)現(xiàn)將本地的H264文件打包成TS流,使用的C語(yǔ)言,程序在LINUX下編譯,可直接運(yùn)行
代碼片段和文件信息
#include?“Conversion.h“
FILE?*?OpenInputFile(FILE?*?FinputFilechar?*?InputFileName)?
{
FILE?*?inFile?=?NULL;
FinputFile?=?fopen(InputFileName“rb“);
if?(NULL?==?FinputFile)
{
printf(“打開(kāi)輸入文件TS失??!\n“);
return?NULL;
}
inFile?=?FinputFile;
?????????????????????????
fseek(FinputFile0LSEEK_END);?
inputfile_length?=?ftell(FinputFile);?
printf(“本測(cè)試文件的長(zhǎng)度是?%ld?個(gè)字節(jié)\n“inputfile_length);
? fseek(FinputFile0LSEEK_SET);??????????????????????//?文件指針移動(dòng)到文件首?
return?FinputFile;
}
FILE?*?OpenOutputFile(FILE?*?FOutputFilechar?*?OutputFileName)?
{
FOutputFile?=?fopen(OutputFileName?“w“);
if?(NULL?!=?FOutputFile)
{
fclose(FOutputFile);
fopen(OutputFileName?“w“);//文件清空
fclose(FOutputFile);
FOutputFile?=?NULL;
}
else
{
printf(“打開(kāi)輸出文件失敗!\n“);
}
FOutputFile?=?fopen(OutputFileName?“wb“);
return?FOutputFile;
}
FILE?*?OpenOutputNEWh264File(FILE?*?FOutputFilechar?*?OutputFileName)?
{
FOutputFile?=?fopen(OutputFileName?“w“);
if?(NULL?!=?FOutputFile)
{
fclose(FOutputFile);
fopen(OutputFileName?“w“);//文件清空
fclose(FOutputFile);
FOutputFile?=?NULL;
}
else
{
printf(“打開(kāi)輸出文件失敗!\n“);
}
FOutputFile?=?fopen(OutputFileName?“wb“);
return?FOutputFile;
}
int?CloseInputFile(FILE?*?FInputFile)
{
fclose(FInputFile);
return?1;
}
int?CloesOutputFile(FILE?*?FOutputFile)
{?
fclose(FOutputFile);
return?1;
}
TsPacketHeader?*?CreateTsHeader(TsPacketHeader?*?ts_headerunsigned?int?PIDunsigned?char?play_initunsigned?char?ada_field_Cunsigned?char?conti_cter)
{
ts_header->sync_byte?=?TS_SYNC_BYTE;
ts_header->tras_error?=?0x00;
ts_header->play_init?=?play_init;
ts_header->tras_prio?=?0x01;
ts_header->PID?=?PID;
ts_header->tras_scramb?=?0x00;
ts_header->ada_field_C?=?ada_field_C;
ts_header->conti_cter?=?conti_cter;
return?ts_header;
}
int?TsHeader2buffer(?TsPacketHeader?*?ts_headerunsigned?char?*buffer)
{
buffer[0]=ts_header->sync_byte;
buffer[1]=ts_header->tras_error<<7|ts_header->play_init<<6|ts_header->tras_prio<<5|((ts_header->PID>>8)&0x1f);
buffer[2]=(ts_header->PID&0x00ff);
buffer[3]=ts_header->tras_scramb<<6|ts_header->ada_field_C<<4|ts_header->conti_cter;
return?1;
}
int?CRC_crc32Calculate(unsigned?char??*buffer?unsigned?int?size?unsigned?int?*CRC32)
{
unsigned?int?crc32?=?0xFFFFFFFF;
unsigned?int?cntBytetemp1temp2temp3;
for?(cntByte?=?0;?cntByte? {
temp1?=?(crc32?<8?);
temp2?=?crc32_table[((crc32?>>?24)?^?*?buffer)?&?0xFF];
temp3?=?temp1^temp2;
crc32?=?(crc32?<8?)?^?crc32_table[((crc32?>>?24)?^?*?buffer++)?&?0xFF];
}
*CRC32?=?crc32;
return?1;
}
int?CreatePAT()
{
TsPacketHeader?*?ts_header;
TsPat?*?ts_pat;
unsigned?char?PatBuf[TS_PACKET_SIZE];
unsigned?char?*?pointer_pat;
unsigned?int?PAT_CRC?=?0xFFFFFFFF;?
ts_header?=?(TsPacketHeader?*)malloc(sizeof(TsPacketHeader)?*?1);
????ts_pat?=?(TsPat?*?)malloc(sizeof(TsPat)?*?1);
memset(PatBuf
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????47104??2012-09-28?12:53??TS_打包_本地文件_H264_1\TS_?PACK\Debug\TS_?PACK.exe
?????文件?????352256??2012-09-28?12:53??TS_打包_本地文件_H264_1\TS_?PACK\Debug\TS_?PACK.ilk
?????文件?????420864??2012-09-28?12:53??TS_打包_本地文件_H264_1\TS_?PACK\Debug\TS_?PACK.pdb
?????文件????3082081??2012-09-14?14:41??TS_打包_本地文件_H264_1\TS_?PACK\H264\44.264
?????文件????4258148??2012-09-24?10:54??TS_打包_本地文件_H264_1\TS_?PACK\H264\66.264
?????文件????3082081??2012-09-28?12:52??TS_打包_本地文件_H264_1\TS_?PACK\H264\NEW44.264
?????文件????4258148??2012-09-28?12:53??TS_打包_本地文件_H264_1\TS_?PACK\H264\NEW66.264
?????文件????3240180??2012-09-28?12:52??TS_打包_本地文件_H264_1\TS_?PACK\TS\44.ts
?????文件????4626868??2012-09-28?12:53??TS_打包_本地文件_H264_1\TS_?PACK\TS\66.ts
?????文件??????28728??2012-09-28?12:49??TS_打包_本地文件_H264_1\TS_?PACK\TS_?PACK\Conversion.c
?????文件???????3479??2012-09-27?16:42??TS_打包_本地文件_H264_1\TS_?PACK\TS_?PACK\Conversion.h
?????文件???????3286??2012-09-24?16:31??TS_打包_本地文件_H264_1\TS_?PACK\TS_?PACK\CRC.h
?????文件??????17844??2012-09-28?12:53??TS_打包_本地文件_H264_1\TS_?PACK\TS_?PACK\Debug\BuildLog.htm
?????文件??????40213??2012-09-28?12:53??TS_打包_本地文件_H264_1\TS_?PACK\TS_?PACK\Debug\Conversion.obj
?????文件???????7815??2012-09-28?12:53??TS_打包_本地文件_H264_1\TS_?PACK\TS_?PACK\Debug\main.obj
?????文件?????????65??2012-09-28?12:53??TS_打包_本地文件_H264_1\TS_?PACK\TS_?PACK\Debug\mt.dep
?????文件????????663??2012-09-28?12:53??TS_打包_本地文件_H264_1\TS_?PACK\TS_?PACK\Debug\TS_?PACK.exe.em
?????文件????????728??2012-09-28?12:53??TS_打包_本地文件_H264_1\TS_?PACK\TS_?PACK\Debug\TS_?PACK.exe.em
?????文件????????621??2012-09-28?12:53??TS_打包_本地文件_H264_1\TS_?PACK\TS_?PACK\Debug\TS_?PACK.exe.intermediate.manifest
?????文件??????44032??2012-09-28?12:53??TS_打包_本地文件_H264_1\TS_?PACK\TS_?PACK\Debug\vc90.idb
?????文件??????69632??2012-09-28?12:53??TS_打包_本地文件_H264_1\TS_?PACK\TS_?PACK\Debug\vc90.pdb
?????文件???????8452??2012-09-28?12:52??TS_打包_本地文件_H264_1\TS_?PACK\TS_?PACK\Information.h
?????文件???????1295??2012-09-27?16:43??TS_打包_本地文件_H264_1\TS_?PACK\TS_?PACK\main.c
?????文件???????4165??2012-09-24?16:57??TS_打包_本地文件_H264_1\TS_?PACK\TS_?PACK\TS_?PACK.vcproj
?????文件???????1407??2012-09-28?12:53??TS_打包_本地文件_H264_1\TS_?PACK\TS_?PACK\TS_?PACK.vcproj.HOLD.zhuwg.user
?????文件?????855040??2012-09-28?12:53??TS_打包_本地文件_H264_1\TS_?PACK\TS_?PACK.ncb
?????文件????????890??2012-09-24?10:26??TS_打包_本地文件_H264_1\TS_?PACK\TS_?PACK.sln
????..A..H.?????20480??2012-09-28?12:53??TS_打包_本地文件_H264_1\TS_?PACK\TS_?PACK.suo
?????文件?????????19??2012-09-29?20:53??www.opencvchina.com.txt
?????目錄??????????0??2012-09-28?12:53??TS_打包_本地文件_H264_1\TS_?PACK\TS_?PACK\Debug
............此處省略9個(gè)文件信息
- 上一篇:數(shù)字圖像處理mfc
- 下一篇:C語(yǔ)言名題精選百則 技巧篇+源碼
評(píng)論
共有 條評(píng)論