Проблема с получением времени из IMediaSeeking

 
Начать новую тему   Ответить на тему    Список форумов DirectShow форум -> Общий
Предыдущая тема :: Следующая тема  
Автор Сообщение
skyfire
Новенький


Зарегистрирован: 26.05.2008
Сообщения: 3

СообщениеДобавлено: Пн Май 26, 2008 5:27 pm    Заголовок сообщения: Проблема с получением времени из IMediaSeeking Ответить с цитатой

Может кто сталкивался и знает как это лечить. Нужно получить время видео потока, использовал IMediaSeeking->GetCurrentPosition.
Проблема возникает, когда видео тормозит или просто затыкается где-то. Время бежит с постоянной скоростью, соответственно доходит до конца и останавливается, но видео при этом все еще продолжает проигрываться.
Есть ощущение, что система просто продолжает отрисовывать кадры.
Может быть нужно как то заставить граф пропускать кадры, не знаю.
Точно проблема возникала на XVid файлах высокого разрешения. Но нет уверенности, что это не повторится на других, если проигрывание будет происходить на слабой машине.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
roma
Активный


Зарегистрирован: 03.04.2007
Сообщения: 31
Откуда: Донецк

СообщениеДобавлено: Пн Май 26, 2008 6:07 pm    Заголовок сообщения: Ответить с цитатой

Либо проблемы с кодеками установленными в системе, либо высокое разрешение и система не тянет (у меня такое было на машине Celeron 1000)
Попробуй протестировать файл на другой машине...
_________________
vromav@rambler.ru
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
skyfire
Новенький


Зарегистрирован: 26.05.2008
Сообщения: 3

СообщениеДобавлено: Пн Май 26, 2008 8:25 pm    Заголовок сообщения: Ответить с цитатой

В том то и дело, что хотелось бы найти более надежный способ получения времени потока. Чтобы не зависеть от кодека и системы.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
LWN
Новенький


Зарегистрирован: 26.05.2008
Сообщения: 3
Откуда: г.Арзамас

СообщениеДобавлено: Пн Май 26, 2008 8:56 pm    Заголовок сообщения: Ответить с цитатой

Попробуй так:
private
{ Private declarations }
MyGraphBuilder : IGraphBuilder;
MediaSeeking:IMediaSeeking;
ReferenceClock: IReferenceClock;

procedure TForm1.Timer1Timer(Sender: TObject);
var
i, j: int64;
begin
//время проигрывания видео
(MyGraphBuilder as IMediaSeeking).GetPositions(i,j);
Label1.Caption := TimeToStr(RefTimeToMiliSec(i) / MiliSecPerDay) + '/' +TimeToStr(RefTimeToMiliSec(j) / MiliSecPerDay);

//произвольное время
(MyGraphBuilder as IMediaFilter).GetSyncSource(ReferenceClock);
ReferenceClock.GetTime(i);
Label2.Caption := TimeToStr(RefTimeToMiliSec(i) / MiliSecPerDay);
end;
_________________
- У вас есть лыжные ботинки 55-го размера?
- Какого???
- 55-го…
- А зачем вам лыжи?!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов DirectShow форум -> Общий Часовой пояс: GMT + 4
Страница 1 из 1
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB


Рейтинг@Mail.ru