Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 26.06.2009, 23:16   #1
xXBOBXx
 
Регистрация: 26.06.2009
Сообщений: 7
Репутация: 10
Восклицание перемотка 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
Адрес: Los Angeles, USA
Сообщений: 3,710
Репутация: 1457
По умолчанию

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

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
Репутация: 10
По умолчанию

затупил....
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
Репутация: 10
По умолчанию

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

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

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
Репутация: 10
По умолчанию

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
Адрес: Los Angeles, USA
Сообщений: 3,710
Репутация: 1457
По умолчанию

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

icq: 401708834
По умолчанию

Может там можно позицию в кадрах отслеживать, а не миллисекунды, и сравнивать позицию с общим кол-вом кадров?
mutabor вне форума   Ответить с цитированием
Старый 05.09.2009, 19:19   #10
xXBOBXx
 
Регистрация: 26.06.2009
Сообщений: 7
Репутация: 10
По умолчанию

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


07:01.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru