奇怪!DirectShow的IMediaSeeking得到的视频长度(帧数)不对?

tonnyue 2004-04-18 10:04:33
程序老是出现异常,调试半天才发现DirectShow得到的视频的帧数不对。我是用

CComQIPtr< IMediaSeeking, &IID_IMediaSeeking > pSeeking ( pGraph )

pSeeking->GetDuration( &m_llDuration )

但得到的长度不对。

有的视频又是对的,有的不行。这是为什么呢?

请高手指点!
...全文
387 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
tonnyue 2004-05-13
  • 打赏
  • 举报
回复
我发觉这可能是DirectShow 本身的问题了
我看了,在ACDSEE中播放时也存在这个问题
tonnyue 2004-05-06
  • 打赏
  • 举报
回复
请哪位高手指点一下:
精确的帧数如何获得呢?
lornasnet 2004-05-05
  • 打赏
  • 举报
回复
上述问题我也碰倒过,不知道为什么,不过那时我用的是mci!
tonnyue 2004-05-04
  • 打赏
  • 举报
回复
但我先查询了
支持后我才用的
fenglianghuai 2004-04-28
  • 打赏
  • 举报
回复
有的解码器是不支持精确到Frame定位
chenlangren 2004-04-26
  • 打赏
  • 举报
回复
hr = pSeeking->GetDuration( &Duration);
VIDEOINFOHEADER * vih = (VIDEOINFOHEADER*) mt.pbFormat;
REFERENCE_TIME TimePerFrame;
TimePerFrame = vih->AvgTimePerFrame;


LONGLONG frame = NULL;
frame = Duration/TimePerFrame;
tonnyue 2004-04-26
  • 打赏
  • 举报
回复
//Get the length of video
LONGLONG llDuration = 0;
hr = pSeeking->GetDuration( &llDuration );
if( FAILED( hr ) )
{
printf( "Failed in GetDuration! hr=0x%x\r\n", hr );
return hr;
}

GUID Frm_Format = TIME_FORMAT_FRAME;
pSeeking->ConvertTimeFormat(&m_llDuration, &Frm_Format, llDuration, NULL);

这样还是得不到m_llDuration
tonnyue 2004-04-26
  • 打赏
  • 举报
回复
hr = pSeeking->GetDuration( &Duration);
会根据不同的格式,返回不同的值。
但TimePerFrame = vih->AvgTimePerFrame;的格式是固定的
tonnyue 2004-04-24
  • 打赏
  • 举报
回复
DirectShow好象对前面的两个B帧解不出来
dongfa 2004-04-23
  • 打赏
  • 举报
回复
看看视频的制式,是PAL的还是NTSC的,制式不同换算的帧数是不一样的.
tonnyue 2004-04-23
  • 打赏
  • 举报
回复
to:dongfa(阿东)

DirectShow 对制式是怎么支持的?
tonnyue 2004-04-21
  • 打赏
  • 举报
回复
得到的长度还是不对,转换成帧后要少10帧。
我对几个视频文件测试都是这样了。
tonnyue 2004-04-21
  • 打赏
  • 举报
回复
我试一下
gxqcdit 2004-04-20
  • 打赏
  • 举报
回复
根据的到的格式转换.
tonnyue 2004-04-20
  • 打赏
  • 举报
回复

我设置了以帧为格式,但有时又设置不起。
如果不是以帧为单位,我怎么得到视频的帧长度呢?
huqiming 2004-04-18
  • 打赏
  • 举报
回复
IMediaSeeking::GetTimeFormat
看看支持什么方式再说,一般以时间为单位的,关键看sourcefilter是否支持。
gxqcdit 2004-04-18
  • 打赏
  • 举报
回复
问题说得不详细.

得到的文件长度有可能不是以帧为单位.有的文件是以Media_Time作为长度度量.

IMediaSeeking::GetDuration()
The GetDuration method retrieves the duration of the stream.

调用IMediaSeeking::GetTimeFormat()可以得到该文件的时间格式.

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧