我有一个avi视频文件,mpg4压缩。
需要播放其中的某一段。
我没什么思路,请大家指点。。
需要播放其中的某一段。
我没什么思路,请大家指点。。
解决方案 »
- MFC无法关联按钮控件
- _bstr_t类型如何转换为CString类型???
- vc中用serialport类实现串口通信时,连续的发送多次命令后,再次发送数据失败 急!!!!!!!!!!!
- Windows2003的数据执行保护
- 用vs2005的弟兄们,你们的自定义控件都会自动添加到工具箱上吗?
- 如何在word中实现手写批注功能
- 数据库问题
- 500分求教Lame问题结帖给分:sinqi请进(1)
- 急~!我编写的VC DLL很简单,为什么在VB调用中返回的数值错误呢?等待。。。。。
- 画图程序的颜色设置
- 请问这个DOS版的大小才71K的QQ是怎样写的,有人可以共享下代码吗?
- 一个程序启动另一个程序的问题,刚注意到的,大家来```讨论讨论``指点指点 顺祝大家新年快乐
通过IMediaSeeking::SetPositions方法设置开始和结束时间
hr = pigb->QueryInterface(IID_IMediaSeeking, (void **)&pims);设置时间格式。
hr = pims->SetTimeFormat(&TIME_FORMAT_FRAME);申明并初始化开始和结束变量:
LONGLONG start = 5L;
LONGLONG stop = 15L;通过IMediaSeeking::SetPositions方法设置开始和结束时间, AM_SEEKING_AbsolutePositioning标志意味着这是一个绝对的位置(不是相对于媒体文件现在的位置)。在这个例子中,媒体文件就在第5帧开始,在15帧结束,持续时间是10帧。具体的时间长度要看视频帧的播放速率了。
pims->SetPositions(&start, AM_SEEKING_AbsolutePositioning, &stop, AM_SEEKING_AbsolutePositioning);最后释放接口。
pims->Release();当然你也可以设置别的格式,和别的开始结束的信息。例如5秒到7秒。
hr = pims->SetTimeFormat(&TIME_FORMAT_FRAME);
LONGLONG start = 50000000L;
LONGLONG stop = 70000000L;
非常感谢!
我现在在索引表中存储了帧号。播放连续的有用帧。
再有问题是请指教。
HWND ghApp;
HINSTANCE ghInst;
HRESULT hr;
LONG evCode;
LONG evParam1;
LONG evParam2;
RECT grc;
IGraphBuilder *pigb = NULL;
IMediaControl *pimc = NULL;
IMediaEventEx *pimex = NULL;
IVideoWindow *pivw = NULL;CString szFile;
szFile.Format("C:\\2.avi");
WCHAR wFile[MAX_PATH];
MultiByteToWideChar( CP_ACP, 0, szFile, -1, wFile, MAX_PATH );
hr = CoCreateInstance(CLSID_FilterGraph,
NULL,
CLSCTX_INPROC_SERVER,
IID_IGraphBuilder,
(void **)&pigb);
pigb->QueryInterface(IID_IMediaControl, (void **)&pimc);
pigb->QueryInterface(IID_IMediaEventEx, (void **)&pimex);
pigb->QueryInterface(IID_IVideoWindow, (void **)&pivw);
hr = pigb->RenderFile(wFile, NULL);
pimex->SetNotifyWindow((OAHWND)m_AVI.m_hWnd, WM_GRAPHNOTIFY, 0);
pivw->put_Owner((OAHWND)m_AVI.m_hWnd);
pivw->put_WindowStyle(WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS);
::GetClientRect(m_AVI.m_hWnd, &grc);
pivw->SetWindowPosition(grc.left, grc.top, grc.right, grc.bottom);IMediaSeeking *pims;
hr = pigb->QueryInterface(IID_IMediaSeeking, (void **)&pims);
hr = pims->SetTimeFormat(&TIME_FORMAT_SAMPLE);
LONGLONG start = 5L;
LONGLONG stop = 15L;
pims->SetPositions(&start, AM_SEEKING_AbsolutePositioning, &stop, AM_SEEKING_AbsolutePositioning);
hr = pimc->Run();