資源簡介
基于C/C++提供一個PS流的打包庫PsMuxer.dll,并提供DEMO測試程序
代碼片段和文件信息
/*******************************************************************************
Copyright?(c)?wubihe?Tech.?Co.?Ltd.?All?rights?reserved.
--------------------------------------------------------------------------------
Date?Created: 2014-10-25
Author: wubihe?QQ:1269122125?Email:1269122125@qq.com
Description: PS流封裝庫PsMuxer使用Demo?試用版本Demo只能運行240S?需要授權庫或者
全部源碼請聯系作者
--------------------------------------------------------------------------------
Modification?History
DATE??????????AUTHOR??????????DEscriptION
--------------------------------------------------------------------------------
********************************************************************************/
#include?“excpt.h“
#include?“TIOBuffer.h“
#include?“IPsMuxer.h“
#define??MAX_BUFFER_SIZE?????(1024*8)
#define??MAX_OUT_BUFFER_SIZE?(1024*1024)
static?FILE?*gInputFile?=?NULL;
static?FILE?*gOutputFile?=?NULL;
//讀取H264數據緩存
unsigned?char gszReadBuffer[MAX_BUFFER_SIZE];
//解析h264數據緩存
comn::IOBuffer gH264ParserBuff;
struct?NaluPacket
{
unsigned?char*??data;
int length;
int prefix;
};
//幀類型定義
enum?NAL_type
{
NAL_IDR
NAL_SPS
NAL_PPS
NAL_SEI
NAL_Pframe
NAL_VPS
NAL_SEI_PREFIX
NAL_SEI_SUFFIX
NAL_other
NAL_TYPE_NUM
};
unsigned?char* g_pMuxBuf;
long g_Pts?=?0;
long g_Dts?=?0;
//判斷是否是264或者265幀如果是順便把NalTypeChar設置一下
bool?isH264Or265frame(unsigned?char*?buf?unsigned?char*?NalTypeCharint?*iHeadLen)
{
bool?bOk?=?false;
unsigned?char?c?=?0;
if?(buf[0]?==?0?&&?buf[1]?==?0?&&?buf[2]?==?0?&&?buf[3]?==?1)
{
if?(NalTypeChar)
{
*NalTypeChar?=?buf[4];
}
*iHeadLen?=?4;
bOk?=?true;
}
if?(buf[0]?==?0?&&?buf[1]?==?0?&&?buf[2]?==?1?)
{
if?(NalTypeChar)
{
*NalTypeChar?=?buf[3];
}
*iHeadLen?=?3;
bOk?=?true;
}
return?bOk;
}
NAL_type?getH264NALtype(unsigned?char?c)
{
switch(c?&?0x1f){
case?6:
return?NAL_SEI;
break;
case?7:
return?NAL_SPS;
break;
case?8:
return?NAL_PPS;
break;
case?5:
return?NAL_IDR;
break;
case?1:
return?NAL_Pframe;
break;
default:
return?NAL_other;
break;
}
return?NAL_other;
}
NAL_type?getH265NALtype(unsigned?char?c)
{
int?type?=?(c?&?0x7E)>>1;
if(type?==?33)
return?NAL_SPS;
if(type?==?34)
return?NAL_PPS;
if(type?==?32)
return?NAL_VPS;
if(type?==?39)
return?NAL_SEI_PREFIX;
if(type?==?40)
return?NAL_SEI_SUFFIX;
if((type?>=?1)?&&?(type?<=9))
return?NAL_Pframe;
if((type?>=?16)?&&?(type?<=21))
return?NAL_IDR;
return?NAL_other;
}
void?ProcessData(int?iHandle?int?iStreamunsigned?char*?buf?int?len)
{
PmframeInfo?stframeInfo;
stframeInfo.pframe =?buf;
stframeInfo.iframeLen =?len;
stframeInfo.lPts =?g_Pts;
stframeInfo.lDts =?g_Dts;
int?MuxOutSize?=?0;
PM_RESULT_TYPE?eResult;
int?iOutSize?=?MAX_OUT_BUFFER_SIZE;
eResult?=?PM_frameTrans(iHandle?iStream?stframeInfog_pMuxBuf?&iOutSize);
if?(eResult?==?PM_RESULT_OK?&&?iOutSize?>?0)
{
fwrite(g_pMuxBuf?iOutSize?1?gOutputFile);
fflush(gOutputFile);
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????9092080??2018-06-07?16:44??PsMuxer_Trial\bin\huangdun.264
?????文件????9157126??2018-06-19?22:24??PsMuxer_Trial\bin\huangdun.264.mpeg
?????文件??????45056??2018-06-19?22:25??PsMuxer_Trial\bin\PsMuxerDemo_T.exe
?????文件?????362380??2018-06-19?22:25??PsMuxer_Trial\bin\PsMuxerDemo_T.ilk
?????文件?????683008??2018-06-19?22:25??PsMuxer_Trial\bin\PsMuxerDemo_T.pdb
?????文件??????64512??2018-06-19?21:01??PsMuxer_Trial\bin\PsMuxer_T.dll
?????文件???????1429??2018-06-19?21:01??PsMuxer_Trial\bin\PsMuxer_T.exp
?????文件?????360352??2018-06-19?21:01??PsMuxer_Trial\bin\PsMuxer_T.ilk
?????文件???????2682??2018-06-19?21:01??PsMuxer_Trial\bin\PsMuxer_T.lib
?????文件?????691200??2018-06-19?21:01??PsMuxer_Trial\bin\PsMuxer_T.pdb
?????文件????1641793??2016-07-04?19:34??PsMuxer_Trial\doc\iso13818-1.pdf
?????文件?????304071??2016-07-04?19:34??PsMuxer_Trial\doc\PS流和TS流介紹.docx
?????文件?????354816??2017-02-22?14:09??PsMuxer_Trial\doc\視音頻數據PS封裝-offset.doc
?????文件????????227??2018-06-12?21:35??PsMuxer_Trial\Project\PsMuxer\PsMuxer.def
?????文件???????6828??2018-06-19?21:01??PsMuxer_Trial\Project\PsMuxer\PsMuxer.vcproj
?????文件???????1983??2018-06-19?20:51??PsMuxer_Trial\Project\PsMuxer\PsMuxer.vcproj.wubihe-PC.wubihe.user
?????文件????????229??2018-06-19?21:00??PsMuxer_Trial\Project\PsMuxer\PsMuxer_T.def
?????文件??????13688??2018-06-19?21:01??PsMuxer_Trial\Project\PsMuxer\Trial\BuildLog.htm
?????文件??????49302??2018-06-19?21:01??PsMuxer_Trial\Project\PsMuxer\Trial\LogMng.obj
?????文件?????????65??2018-06-19?21:01??PsMuxer_Trial\Project\PsMuxer\Trial\mt.dep
?????文件??????51467??2018-06-19?21:01??PsMuxer_Trial\Project\PsMuxer\Trial\PsMuxer.obj
?????文件??????82169??2018-06-19?21:01??PsMuxer_Trial\Project\PsMuxer\Trial\PsMuxerContext.obj
?????文件??????53198??2018-06-19?21:01??PsMuxer_Trial\Project\PsMuxer\Trial\PsMuxerContextMng.obj
?????文件??????11542??2018-06-19?21:01??PsMuxer_Trial\Project\PsMuxer\Trial\PsMuxerStream.obj
?????文件????????663??2018-06-19?21:01??PsMuxer_Trial\Project\PsMuxer\Trial\PsMuxer_T.dll.em
?????文件????????728??2018-06-19?21:01??PsMuxer_Trial\Project\PsMuxer\Trial\PsMuxer_T.dll.em
?????文件????????621??2018-06-19?21:01??PsMuxer_Trial\Project\PsMuxer\Trial\PsMuxer_T.dll.intermediate.manifest
?????文件???????8404??2018-06-19?21:01??PsMuxer_Trial\Project\PsMuxer\Trial\PsUtil.obj
?????文件?????658432??2018-06-19?21:01??PsMuxer_Trial\Project\PsMuxer\Trial\vc90.idb
?????文件?????266240??2018-06-19?21:01??PsMuxer_Trial\Project\PsMuxer\Trial\vc90.pdb
............此處省略53個文件信息
評論
共有 條評論