Как сделать шаг назад в DirectShow.NET? - PullRequest
1 голос
/ 15 февраля 2012

Полагаю, это должно быть сделано с IMediaSeeking SetPositions, но я не знаю, как определить параметры внутри.

Ответы [ 2 ]

2 голосов
/ 15 февраля 2012

В DirectShow нет выделенного метода возврата назад (как такового, существующего для перехода вперед). Да, вы можете использовать IMediaSeeking::SetPositions, но обратите внимание, что его реализует не сам DirectShow, а фактические базовые фильтры, поэтому поддержка перераспределения зависит от фильтров и реализации и может быть ограничена, например, пошаговым переходом по клавише. только кадры (точки сращивания). DirectShow.NET - это всего лишь оболочка над DirectShow, и она также не добавляет ничего поверх того, что DirectShow предлагает для перехода.

0 голосов
/ 21 февраля 2012
IBasicVideo                 *pBasicVideo=NULL;//Interface to the Ibasic Video
HRESULT                     hr;
REFTIME                     pavgfrt=0;//Get the reftime variable
REFERENCE_TIME      pnowrt=0;//Get the reference time variable
pBasicVideo->get_AvgTimePerFrame(&pavgfrt);
pBasicVideo->get_AvgTimePerFrame(&pavgfrt);//Get the avg time per frame in seconds

pSeek->GetCurrentPosition(&pnowrt);//Get the current time in the unit of 100 nanoseconds
REFERENCE_TIME temp=pnowrt;//store it in a temp variable
REFERENCE_TIME temp1=(REFERENCE_TIME)(pavgfrt*10000000);//convert avg time into the format of current time
pnowrt=temp+temp1;//Add to framestep forward and subtract to framestep backward
pSeek->SetPositions(&pnowrt,AM_SEEKING_AbsolutePositioning, NULL,AM_SEEKING_NoPositioning);//Set the seeking position to the new time
pnowrt=0;//Reset the time variable

Это работает для меня в C ++.Свернуть этот код в C # может быть не сложно для вас.Надеюсь, это поможет.

...