Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Проиграть видео (mp4, divx, xvid) ??????


Автор: Nicholas 26.10.2004, 10:30
Делаю так:

Кидаю на форму MediaPlayer1 и Panel1, в свойствах MediaPlayer1 Display ставлю Panel1, запускаю видео - видно, но некоторые файлы почему-то только звук слышен, хотя Windows Media Player установленный в Windows запускаю все работает????????

Но главное объясните как сделать так, что бы видео при максимизации формы тоже увеличивалось (вместе с фомой)??
У меня форму с панелью можно во весь экран развернуть, но видео остается маленьким если например у него размер 420х240 то так и отображается!
:sample

Автор: deMike 26.10.2004, 13:35
Во 1, у меня тоже проблемы с этим, что нету звука, во 2, Поставить Align на Client и она будет во всё форму всегда! :thumbs-up

Автор: Snowy 27.10.2004, 16:09
1. Воспроизводить через DirectX
2. Воткнуть на форму OLE контейнер в который запихнуть MediaPlayer

Автор: Nicholas 28.10.2004, 03:23
Цитата

Во 1, у меня тоже проблемы с этим, что нету звука, во 2, Поставить Align на Client и она будет во всё форму всегда!


Со звуком у меня порядок, у меня изображения не идет.

Яж не совсем тупой я ставил свойства и Panel действитель но во всесь экран, но видео свой размер не меняет!!! :stena

Автор: Nicholas 28.10.2004, 03:33
Цитата(Snowy @ 27.10.2004, 16:09)

1. Воспроизводить через DirectX
2. Воткнуть на форму OLE контейнер в который запихнуть MediaPlayer


Можно про DirectX пример кода увидеть?

Кстати насчет контейнера: MediaPlayer запихнуть ты имеешь ввиду, ток точ в системе т.е. стандартный с Win идеи, я так пробывал он запускается как обычно, а можно сделать чтобы он в окне моей проги запускался, если да то как ???????? :sample

Автор: Jey_k 28.10.2004, 18:32
Вот который раз вижу подобные темы... То мп3 как проиграть то MPEG4, да пофигу этому компоненту что играть, он это все воспроизводит по умолчанию, лишь бы кодеки стояли.
По крайней мере у меня проигрывал все.

Автор: Nicholas 30.10.2004, 07:40
Цитата(Jey_k @ 28.10.2004, 18:32)

По крайней мере у меня проигрывал все.


Ок. Все проигрывается, а каже видео растянуть во весь экран?
:sample

Автор: p0s0l 30.10.2004, 15:25
Сделай при старте программы и при OnResize у Panel1 такой код:
MediaPlayer1.DisplayRect := Panel1.ClientRect;

Автор: Nicholas 1.11.2004, 06:50
Цитата(p0s0l @ 30.10.2004, 15:25)

Сделай при старте программы и при OnResize у Panel1 такой код:
MediaPlayer1.DisplayRect := Panel1.ClientRect;


Сделал, но у меня теперь появляется новое окно, а в нем уже видео, но кнопка Maximize блокирована.
:qstn

Автор: Nicholas 1.11.2004, 07:09
Извеняюсь поторопился!!! Все работает.

Но теперь видео обрезается справа и слева, если не соответствует размерам экрана, как это исправить??

Автор: p0s0l 1.11.2004, 11:08
Хм... А как ты хочешь ? Чтобы было растянуто ?
Тут же пропорции сохраняются...
Как ты видео будешь глядеть, если оно будет сплющенным ?
Или тебе такое и надо ?

Автор: Nicholas 1.11.2004, 11:47
Цитата(p0s0l @ 1.11.2004, 11:08)

Или тебе такое и надо ?


Такого не надо.

Здесь пропорции-то сохраняются, но видео как бы приблежается и фокусируется на центре картинки.

К примеру у меня разрешение экрана 800*600, а видео 800*240 - обычно в проигрывателях мы видем черные полосы сверху и снизу - изображение пропорционально.

Я это ввиду имею, а в данном случае видео как бы приближено до верхней и нижней грани картинки.

Автор: p0s0l 1.11.2004, 23:09
Nicholas, хм...
Я у себя посмотрел - дык вообще фильм расстягивается во всю панель. Т.е. никаких чёрных полос, пропорции не сохраняются...
Тут значит надо DisplayRect указывать правильно, сохраняя пропорции.
(т.е. в твоём случае указать такой Rect: (0, 180, 800, 420) )
Для этого нужно знать ширину/высоту фильма... А как это сделать - надо смотреть... Возможно, можно как-то через MCI сделать...


Автор: Nicholas 3.11.2004, 08:25
Цитата(p0s0l @ 1.11.2004, 23:09)

(т.е. в твоём случае указать такой Rect: (0, 180, 800, 420) )


Ширина/ высота известны, знать бы где и как их задать?

:sample кода.

Автор: p0s0l 3.11.2004, 10:38
Цитата(Nicholas @ 3.11.2004, 08:25)

Ширина/ высота известны, знать бы где и как их задать?
Дык как где ?
В DisplayRect :)

MediaPlayer1.DisplayRect := Rect(х, y, w, h)
где x, y - координаты левого верхнего угла прямоугольника, в который будет выводиться фильм
w, h - ширина и высота прямоугольника

Если высота и ширина фильма тебе известны (ты так сказал), то делай так:
Код

procedure TForm1.Panel1Resize(Sender: TObject);
var
 vid_w, vid_h : integer;
 w, h : integer;
 kf, k : real;
 r : TRect;

begin
 vid_w := 528; // ширина фильма
 vid_h := 384; // высота фильма
 kf := vid_w / vid_h; // соотношение ширины к высоте (фильма)

 w := Panel1.ClientWidth;
 h := Panel1.ClientHeight;
 k := w / h; // соотношение ширины к высоте (панели)

 if kf >= k then // если пропорционально фильм шире панели
   h := Round( w/kf )
 else
   w := Round( h*kf );

 r := Rect((Panel1.ClientWidth-w) div 2, (Panel1.ClientHeight-h) div 2, w, h);
 MediaPlayer1.DisplayRect := r;
end;


Автор: Nicholas 4.11.2004, 07:42
Цитата(p0s0l @ 3.11.2004, 10:38)

Дык как где ?
В DisplayRect



Да, я вообще первый раз об этой штуке от тебя услышал!


Цитата(p0s0l @ 3.11.2004, 10:38)

Если высота и ширина фильма тебе известны (ты так сказал), то делай так:


Все так - бесконечно признателен за информацию!
:yasno

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)