| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
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 |
|
| Вернуться к началу |
|
 |
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-го…
- А зачем вам лыжи?! |
|
| Вернуться к началу |
|
 |
|