Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2009, 23:16   #1
xXBOBXx
 
Регистрация: 26.06.2009
Сообщений: 7
Восклицание перемотка avi или начать воспроизведение с середины...

воспроизвожу видео разделяя на потоки:

var tmp:WideString;
fl:PWideChar;
...
begin
...

CoInitialize(nil);
CoCreateInstance(CLSID_FilterGraph, nil,CLSCTX_INPROC_SERVER,IID_IGraph Builder,MyGraphBuilder);
fl:=PWideChar(tmp);
MyGraphBuilder.RenderFile(fl,nil);
MyGraphBuilder.QueryInterface(IID_I MediaControl,MyMediaControl);
MyGraphBuilder.QueryInterface(IID_I VideoWindow,VideoWindow);
VideoWindow.put_Owner(Self.Panel1.H andle);
VideoWindow.put_WindowStyle(WS_CHIL D OR WS_CLIPSIBLINGS);
VideoWindow.GetWindowPosition(Left, Top,Width,Height);

NewWidth := Panel1.Width-4;
NewHeight := round((NewWidth * Height) / Width);
NewLeft:=2;
NewTop:=round( (Panel1.Height - NewHeight)/2);

VideoWindow.SetWindowPosition(NewLe ft,NewTop,NewWidth,NewHeight);
MyMediaControl.Run;
CoUninitialize;
...
end;
...

где fl - путь до файла
panel1 - собственно на ней воспроизводится, в зависимости от размера видео маштабируется

вопрос: видео воспроизводится сначала. Как сделать, чтобы воспроизведение начиналось не сначала, а скажем по истечении 15 минут (т.е. что-то вроде перемотки) ...
поможите товарищи, не могу разобраться уже два дня....
xXBOBXx вне форума Ответить с цитированием
Старый 27.06.2009, 00:54   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Нужен интерфейс IMediaPosition. там есть get_duration и set_current_position (пишу тут, не смотря в код, так что с названиями (с точностью) я наверное ошибся, но когда увидите список методов IMediaPosition, думаю вопросов не будет)
BOBAH13 вне форума Ответить с цитированием
Старый 27.06.2009, 18:11   #3
xXBOBXx
 
Регистрация: 26.06.2009
Сообщений: 7
По умолчанию

BOBAH13
спасибо за отзывчивость, возник встречный вопрос
к вышеуказанному коду добавил
...
var
Fcurrent_position : double;
position : double;
peremotka :IMediaPosition;
...
begin
...
peremotka.get_Duration( position ); // вычисляю длину видео
Fcurrent_position:=( position / 5 );

peremotka.put_CurrentPosition( Fcurrent_position ) ; //перемотка


вопрос что то не доделал, как привязать peremotka к моему воспроизводимому видео, делаю так

peremotka.QueryInterface(IID_IMedia Control,MyMediaControl);
peremotka.QueryInterface(IID_IVideo Window,VideoWindow);

ругается компиллятор...
xXBOBXx вне форума Ответить с цитированием
Старый 27.06.2009, 18:17   #4
xXBOBXx
 
Регистрация: 26.06.2009
Сообщений: 7
По умолчанию

затупил....
peremotka.QueryInterface(IID_IMedia Control,MyMediaControl);
peremotka.QueryInterface(IID_IVideo Window,VideoWindow);
муть написал, давно программил
надо было просто

MyGraphBuilder.QueryInterface(IID_I MediaPosition, peremotka);
xXBOBXx вне форума Ответить с цитированием
Старый 27.06.2009, 18:18   #5
xXBOBXx
 
Регистрация: 26.06.2009
Сообщений: 7
По умолчанию

BOBAH13
спасибо друх! Да прибудит с тобой великая сила delphi и клавиатуры!!!
xXBOBXx вне форума Ответить с цитированием
Старый 04.09.2009, 21:54   #6
xXBOBXx
 
Регистрация: 26.06.2009
Сообщений: 7
По умолчанию

в продолжение темы...
как отследить конец видео?

MyGraphBuilder.QueryInterface(IID_I MediaPosition, peremotka);
peremotka.get_Duration(duration); - продолжительность видео
peremotka.get_CurrentPosition(posit ion); - как я понял "покадровая" позиция

сломал мозг в попытках отследить, когда у меня видео закончилось...
BOBAH13, друг, спасай...
xXBOBXx вне форума Ответить с цитированием
Старый 04.09.2009, 23:18   #7
xXBOBXx
 
Регистрация: 26.06.2009
Сообщений: 7
По умолчанию

var d, p : int64;
duration, position : integer;
..........
MyGraphBuilder.QueryInterface(IMedi aSeeking, FMediaSeeking);
FMediaSeeking.GetDuration(d);
duration := Cardinal(d div 10000); //дюрэйшн в миллисекундах

FMediaSeeking.GetCurrentPosition(p) ;
position := Cardinal(p div 10000); // текущее положение в миллисекундах

duration показывает, position всегда 0 ......
xXBOBXx вне форума Ответить с цитированием
Старый 05.09.2009, 07:34   #8
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

В свое время делал так. Узнаеш при старте длину видео videoLen (в миллисекундах). Далее запоминаеш текущий тик - т.е. startAt = GetTickCount(). Ставиш таймер ну к примеру пусть тикает каждые 500 миллисекунд. В таймере проверяеш if(GetTickCount() - srartAt >= videoLen) то твое видео закончилось. Вроде работает думаю погрешность менее 500 миллисекунд большую роль не с играет
BOBAH13 вне форума Ответить с цитированием
Старый 05.09.2009, 19:15   #9
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Может там можно позицию в кадрах отслеживать, а не миллисекунды, и сравнивать позицию с общим кол-вом кадров?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 05.09.2009, 19:19   #10
xXBOBXx
 
Регистрация: 26.06.2009
Сообщений: 7
По умолчанию

BOBAH13, хитрец!!! Мозг ломал, а про такой способ даже не подумал....
БОЛЬШОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО!!!!!
xXBOBXx вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перемотка (прокрутка) в плеере NBSTUDIO Мультимедиа в Delphi 12 08.05.2009 18:37
перемотка в mp3 плеере Mazaxaka Мультимедиа в Delphi 21 27.02.2009 01:09
незнаю с чего начать... а начать очень нужно ОСЯНЯ Помощь студентам 2 26.11.2008 20:08
Перемотка в mP3 плеере lionman Мультимедиа в Delphi 3 27.10.2008 21:21
Перемотка в TMediaPlayer Kn793 Компоненты Delphi 0 10.07.2008 11:02