社区
游戏开发
帖子详情
关于如何从文件内容识别多媒体文件类型?
liyi_cumtb
2002-03-27 10:34:57
对一个给定的文件,不从其后缀名(如AVI MPG DAT等)去判断它是何种多媒体文件,因为后缀是很容易被修改的。
我想请教的是,如何从文件内容本身去判断文件类型,也就是说对诸如AVI MPG 等的多媒体文件,其文件有什么特征?如何读取?
...全文
130
3
打赏
收藏
关于如何从文件内容识别多媒体文件类型?
对一个给定的文件,不从其后缀名(如AVI MPG DAT等)去判断它是何种多媒体文件,因为后缀是很容易被修改的。 我想请教的是,如何从文件内容本身去判断文件类型,也就是说对诸如AVI MPG 等的多媒体文件,其文件有什么特征?如何读取?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
DivXExtend
2002-03-29
打赏
举报
回复
//我写的函数,输入文件路径名。DirectShow
//输入的是文件路径名,后缀即使被改掉,它也认识流的类型。
bool RenderStream::JudgeMediatype(char *strFileName, CMediaType *mtiOutput)
{
HRESULT hr;
//初始化COM库
LPVOID pvReserved = NULL;
::CoInitialize(pvReserved);
CoInitialize(NULL);
//创建过滤器图
REFCLSID rclsid = CLSID_FilterGraph;
LPUNKNOWN pUnkOuter = NULL;
DWORD dwClsContext = CLSCTX_INPROC_SERVER;
REFIID riid = IID_IGraphBuilder;
IGraphBuilder *pGraph;
CoCreateInstance(rclsid, pUnkOuter, dwClsContext,
riid, (void **)&pGraph);
//字类型转化
USES_CONVERSION;
LPCWSTR lpcwstrFileName;
lpcwstrFileName = A2W(strFileName);
//增加源过滤器
LPCWSTR lpwstrFilterName = L"Source";
IBaseFilter *pFileSource;
hr = pGraph->AddSourceFilter(lpcwstrFileName, lpwstrFilterName,
&pFileSource);
if (FAILED(hr))
{
OutputDebugString("增加源过滤器出错!");
return 1;
};
//查询得到文件源过滤器接口
REFIID iid = IID_IFileSourceFilter;
IFileSourceFilter *pFileSourceFilter = NULL;
hr = pFileSource->QueryInterface(iid, (void **)&pFileSourceFilter);
if (hr != S_OK)
{
OutputDebugString("查询文件源过器出错\n");
return 1;
}
//得到媒体类型
LPOLESTR FileName;
AM_MEDIA_TYPE mti;
hr = pFileSourceFilter->GetCurFile(&FileName, &mti);
if (hr != S_OK)
{
OutputDebugString("取媒体流类型出错!\n");
return 1;
}
//释放接口
pFileSource->Release();
pFileSourceFilter->Release();
pGraph->Release();
CoUninitialize();
if (mti.majortype != MEDIATYPE_Stream)
{
return false;
}
else
{
mtiOutput->majortype = MEDIATYPE_Stream;
}
//mpeg1
if (mti.subtype == MEDIASUBTYPE_MPEG1System)
{
mtiOutput->subtype = MEDIASUBTYPE_MPEG1System;
return true;
}
//mpeg1
else if (mti.subtype == MEDIASUBTYPE_MPEG1VideoCD)
{
mtiOutput->subtype = MEDIASUBTYPE_MPEG1VideoCD;
return true;
}
//mpeg1
else if (mti.subtype == MEDIASUBTYPE_MPEG1Video)
{
mtiOutput->subtype = MEDIASUBTYPE_MPEG1Video;
return true;
}
//mpeg1
else if (mti.subtype == MEDIASUBTYPE_MPEG1Audio)
{
mtiOutput->subtype = MEDIASUBTYPE_MPEG1Audio;
return true;
}
//mpeg4
else if (mti.subtype == MEDIASUBTYPE_Avi)
{
mtiOutput->subtype = MEDIASUBTYPE_Avi;
return true;
}
//mpeg2
else if (mti.subtype == MEDIASUBTYPE_MPEG2_PROGRAM)
{
mtiOutput->subtype = MEDIASUBTYPE_MPEG2_PROGRAM;
return true;
}
//mpeg2
else if (mti.subtype == MEDIASUBTYPE_MPEG2_TRANSPORT)
{
mtiOutput->subtype = MEDIASUBTYPE_MPEG2_TRANSPORT;
return true;
}
else
{
return false;
}
return false;
}
DivXExtend
2002-03-29
打赏
举报
回复
30 分给我吧。
huqiming
2002-03-28
打赏
举报
回复
每个文件都有一个特征,即文件信息头。读取文件信息头到内存中再判断就可以了。
相关的特征字节自己多看几个就知道了。
Go语言 通过文件流判断文件头来
识别
文件类型
系统中需要用到文件上传的功能,但是从系统安全的角度上来说需要判断上传文件的格式,防止将病毒木马等有害的文件上传到服务器上。 判断
文件类型
有三种方式 1、通过文件后缀名 这个方法简单容易,但是也是最容易被...
Windows是以什么来
识别
文件类型
的
多媒体
文件:
多媒体
文件屮包含数字形式的音频和视频信息,如.avi、.mpeg、.rm、.wmv、.asf等格式的视频文件,以及.mp3、.wma等格式的音频文件都是
多媒体
文件。>文档文件:文档文件足由一些文字处理软件生成的文件,...
使用tika 判断
文件类型
使用tika 判断
文件类型
常用的
文件类型
有哪些?有什么类型,属于什么文件?
-- 常用文件扩展名解释 A 对象代码库文件 AAM Authorware shocked文件 AAS Authorware shocked包 ABF Adobe二进制屏幕字体 ABK CorelDRAW自动备份文件 ABS 该类文件有时用于指示一个摘要(就像在一篇有关科学方面的...
java-
文件类型
-
文件类型
判断
摘要:
文件类型
的判断:最直接的方法通过文件的后缀名字可以知道文件是sm
游戏开发
8,304
社区成员
23,682
社区内容
发帖
与我相关
我的任务
游戏开发
游戏开发相关内容讨论专区
复制链接
扫一扫
分享
社区描述
游戏开发相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章