利用微软的avi文件操作函数读取avi文件
来源:互联网 发布:得利宝高收益网络理财 编辑:程序博客网 时间:2024/04/25 23:48
具体调用如下:
CFileDialog l_FileOpen(TRUE, NULL,
NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"AVI File(*.avi)|*.avi",
this);
UINT l_bFDRes=l_FileOpen.DoModal();
if(l_bFDRes==IDOK)
{
m_strFilePath = l_FileOpen.GetPathName();
}
else
{
m_strFilePath = _T("");
AfxMessageBox("请选择一个播放文件!");
}
AVIFileInit();
HRESULT hr;
PAVIFILE pAVIFile = NULL;
hr=AVIFileOpen(&pAVIFile,m_strFilePath,OF_READ,NULL);
if(hr != AVIERR_OK)
{
if(pAVIFile != NULL)
AVIFileRelease(pAVIFile);
return;
}
AVIFILEINFO avi_info;
AVIFileInfo(pAVIFile,&avi_info,sizeof(AVIFILEINFO));
CString szFileInfo;
szFileInfo.Format("Dimention: %d*%d/n"
"Length: %d frames/n"
"Max bytes per second: %d/n"
"Samples per second: %d/n"
"Streams: %d/n"
"File Type: %d",
avi_info.dwWidth,
avi_info.dwHeight,
avi_info.dwLength,
avi_info.dwMaxBytesPerSec,
(DWORD)(avi_info.dwRate / avi_info.dwScale),
avi_info.dwStreams,
avi_info.szFileType);
// AfxMessageBox(szFileInfo);
DWORD dwVideoWidth = avi_info.dwWidth;
DWORD dwVideoHeight = avi_info.dwHeight;
DWORD dwFrameRate = (DWORD)(avi_info.dwRate / avi_info.dwScale);
// Extract stream
PAVISTREAM pVideoStream;
hr=AVIFileGetStream(pAVIFile,&pVideoStream,streamtypeVIDEO,0);
if(hr != AVIERR_OK)
{
if(pVideoStream != NULL)
AVIStreamRelease(pVideoStream);
AVIFileExit();
return;
}
BYTE* pVideoStreamBuf = new BYTE[dwVideoWidth*dwVideoHeight*3];
if(pVideoStreamBuf == NULL)
return;
ZeroMemory(pVideoStreamBuf,dwVideoWidth*dwVideoHeight*3);
long lReadBytes = 0;
long lReadFrames = 0;
int i = 0;
for(i= AVIStreamStart(pVideoStream);i<AVIStreamEnd(pVideoStream);i++)
{
int nRet = AVIStreamRead(pVideoStream,i,1,pVideoStreamBuf,dwVideoWidth*dwVideoHeight*3,&lReadBytes,&lReadFrames);
Sleep(1000/dwFrameRate);
if(nRet == 0)
{
// 视频数据送去解码显示
}
}
//////////////////////////////////////////////////////////////////////////
//用于做测试,功能未完善,需要做音视频同步,而不是读完视频后再读音频
// Extract Audio stream
PAVISTREAM pAudioStream;
hr=AVIFileGetStream(pAVIFile,&pAudioStream,streamtypeAUDIO,0);
if(hr != AVIERR_OK)
{
if(pAudioStream != NULL)
AVIStreamRelease(pAudioStream);
AVIFileExit();
return;
}
AVISTREAMINFO AudioInfo;
AVIStreamInfo(pAudioStream,&AudioInfo,sizeof(AVISTREAMINFO));
CString strAudioInfo = _T("");
strAudioInfo.Format("Type:%d,dwRate:%d,dwSampleSize:%d,dwSuggestedBufferSize:%d",
AudioInfo.fccHandler,
AudioInfo.dwRate,
AudioInfo.dwSampleSize,
AudioInfo.dwSuggestedBufferSize);
// AfxMessageBox(strAudioInfo);
BYTE* pAudioStreamBuf = new BYTE[1024];
if(pAudioStreamBuf == NULL)
return;
ZeroMemory(pAudioStreamBuf,1024);
for(i= AVIStreamStart(pAudioStream);i<AVIStreamEnd(pAudioStream);i++)
{
int nRet = AVIStreamRead(pAudioStream,i,1,pAudioStreamBuf,8000,&lReadBytes,&lReadFrames);
if(nRet == 0)
{
DT("lReadBytes:%d",lReadBytes);
//m_MngPlay.DealAudioStream(pAudioStreamBuf,lReadBytes);
// 音频数据送去解码播放
}
}
if(NULL != pVideoStreamBuf)
{
delete[] pVideoStreamBuf;
pVideoStreamBuf = NULL;
}
AVIFileRelease(pAVIFile);
pAVIFile=NULL;
- 利用微软的avi文件操作函数读取avi文件
- AVI文件和AVI函数
- OpenCV读取AVI文件
- OpenCV读取AVI文件
- OpenCV读取AVI文件
- OpenCV读取AVI文件
- OpenCV读取AVI文件
- OpenCV读取AVI文件
- OpenCV读取AVI文件
- OpenCV读取AVI文件
- OpenCV 读取avi文件
- OpenCV读取AVI文件
- OpenCV读取AVI文件
- AVI文件数据流操作
- AVI编码方式及OpenCV读取AVI文件-解决opencv无法读AVI视频的问题
- AVI编码方式及OpenCV读取AVI文件-解决opencv无法读AVI视频的问题
- AVI文件的读取并显示
- AVI文件的读取并显示
- 深入Java关键字null
- Excel导入SQL方法
- Java中的Process和ProcessBuilder
- 2003系统启动项修改
- 大小端区别、Union和Struct的内存大小
- 利用微软的avi文件操作函数读取avi文件
- 有关Oracle 10g 更改字符集的问题
- Swing 记忆之给编辑框加上行号
- 如何编写Linux Daemon后台程序(守护进程)
- 软件开发行业之我见
- sql server2005 windows身份/sa 登陆失败解决 错误18456
- poj1006中国余数定理
- java类Timer和TimerTask的使用
- 求解tlc2543数据采集为什么用于显示1602没有反应