DirectShow打开mpg视频,get_StreamLength得到时间是负数
我用DirectShow打开mpg视频,能播放,但获取视频信息部分发现无法正确获得视频时间:
avi文件和大部分mpg都能正确获得时间,但对方给我的一个重要视频不能获得,但我用暴风影音打开它却能看到正确的时间
这个时间对于我后续处理很重要,请大家帮忙
代码如下:.....//前面RenderFile代码都能正常运行// 设置IMediaDet接口的文件关联
hr = pDet->put_Filename(openBSTR);
if (FAILED(hr))
return hr;

// 从影片中检索视频流和音频流
long lStreams;
    hr = pDet->get_OutputStreams(&lStreams);
    if (FAILED(hr))
return hr;

// 取出影片的视频流,因为帧的信息是保存在视频流中的
bool bFound = false;
for (int i=0; i<lStreams; i++)
{
GUID major_type;
hr = pDet->put_CurrentStream(i);
if (SUCCEEDED(hr))
hr = pDet->get_StreamType(&major_type);
if (FAILED(hr))
break;
// if (major_type == MEDIATYPE_Video || major_type==CLSID_WDM)
{
bFound = true;
break;
}
}
if (!bFound)
return VFW_E_INVALIDMEDIATYPE;//到这儿都是正常的,下面就怪了.
hr = pDet->get_StreamLength(&m_totalTime);//跟踪到这里发现m_totalTime是负数=-0.014秒.
if (FAILED(hr)));//跟踪到这里发现hr==0成功的!
return hr; hr = pDet->get_FrameRate(&m_Rate););//跟踪到这里发现m_Rate==0

解决方案 »

  1.   

    你看下微软的MediaPlay能不能显示时间?如果不能显示就是微软的解码不对,没法解决。
      

  2.   

    MediaPlaMediaPlay的确不能显示时间
    非常感谢 WaistCoat16的解答.我还想问2个问题:
    1.我能安装一个暴风影音解码器吗?或者别的什么解码器解决这个问题.
    2.我有个mpg视频一共46.7*21.7=1017帧
    但是每次->Run()播放到956帧的时候,就卡住停下了,不知道为什么.再一次非常非常感谢WaistCoat16的提示