Вход


Главная страница >> Учебный процесс >> Конспекты >> Delphi. Библиотека визуальных компонентов VCL >> Описание компонентов VCL >> Мультимедиа >> Мультимедиа. TMediaPlayer
Переход на главную страницу

Сервер поддерживается
кафедрой информатики и вычислительной техники ГрГУ
тел. +375-(0)152-445-101
E-mail :
kadan@grsu.grodno.by


[Назад]    [Содержание ]    [Вперед]

  


Мультимедиа. TMediaPlayer


TObject => TPersistent => TComponent => TControl => TWinControl => TCustomControl => TMediaPlayer
Модуль MPLAYER
Страница Палитры компонентов System

В VCL имеется специальный компонент для работы с мультимедиа - TMediaPlayer. Для пользователя он выглядит как набор кнопок, с помощью которых можно интерактивно управлять устройством. Программист может модифицировать реакцию на нажатия кнопок и другие события, в зависимости от специфики задачи.

Под типом устройства мультимедиа подразумеваются как аппаратные, так и программные средства. В компоненте TMediaPlayer тип устройства представлен свойством:

(Pb) property DeviceType: TMPDeviceTypes;

TMPDeviceTypes = (dtAutoSelect, dtAVIVideo, dtCDAudio, dtDAT, dtDigitalVideo, dtMMMovie, dtOther, dtOverlay, dtScanner, dtSequencer, dtVCR, dtVideodisc, dCWaveAudio) ;

Тип может быть задан как явно пользователем, так и автоматически (по расширению файла) ? в этом случае нужно задать тип dtAutoSelect. Для устройств, не работающих с файлами, тип всегда надо задавать явно.

Набор возможностей устройства определяется свойством:

(Ro) property Capabilities: TMPDevCapsSet;

TMPDevCaps = (mpCanStep, mpCanEJect, mpCanPlay, mpCanRecord, mpUsesWindow) ;

TMPDevCapsSet = set of TMPDevCaps;

mpCanStep ? устройство имеет пошаговый режим;

mpCanEJect ? имеет возможность извлечения носителя;

mpCanPlay ? имеет режим воспроизведения;

mpCanRecord ? имеет режим записи;

mpUsesWindow ? устанавливается для устройств вывода видео, использующих окно.

В таблице приведены методы и свойства, обеспечивающие выполнение основных команд интерфейса MCI:

procedure Open; Производит открытие устройства. Если свойство AutoOpen установлено в True, открытие осуществляется автоматически при создании объекта типа TMediaPlayer. Большинство остальных методов могут работать только с открытым устройством, так как используют полученный при открытии идентификатор DeviceID. Их вызов при неоткрытом устройстве приводит к генерации исключительной ситуации EMCIDeviceError. Если объект перед этим был связан с открытым устройством MCI, оно при этом закрывается.
procedure Close; Производит закрытие устройства.
procedure Play; Включает режим воспроизведения (для устройств, имеющих опцию mpCanPlay в свойстве Capabilites).
procedure StartRecording; Включает режим записи (для устройств, имеющих опцию mpCanRecord в свойстве Capabilites).
property StartPos: Longint;

property EndPos: Longint;

Предназначены только для работы с методами Play и StartRecording. Определяют начало и конец фрагмента, который необходимо воспроизвести (или записать). После каждой операции (Play/StartRecording) свойства сбрасываются, и их нужно переустанавливать. Могут применяться как в паре, так и по отдельности. При установке этих свойств свойство Position не изменяется вплоть до начала операции. Если свойства не устанавливались, то воспроизведение и запись начинаются с текущей позиции данных (см. свойство Position).
(Pb) property AutoRewind: Boolean;

procedure Rewind;

Если перед воспроизведением носитель данных находится в крайнем положении (и при этом не используются свойства StartPos и EndPos), то при свойстве AutoRewind, равном True, перед началом проводится перемотка в начальное положение (Rewind).
Procedure Stop; Останавливает работу в режиме воспроизведения или записи.
Procedure Pause;

procedure PauseOnly;

procedure Resume;

Три метода предназначены для временной остановки (Pause, PauseOnly) и возобновления (Resume) работы в режимах воспроизведения/записи. Отличие Pause от PauseOnly в том, что происходит при втором вызове метода: если повторно вызвать Pause, то останов снимается (вызывается Resume), a если устройство остановлено посредством PauseOnly, то Resume нужно вызывать самому.
procedure Step;

procedure Back;

Перемещают позицию данных вперед/назад на число кадров, равное значению свойства Frames (см. ниже). Методы имеют смысл только для устройств, поддерживающих покадровый режим (пока это только устройства видео).
procedure Next;

procedure Previous;

Если данные на устройстве имеют дорожки, то эти методы перемещают текущую их позицию к началу следующей (предыдущей) дорожки. При вызове Next на последней дорожке или при вызове Previous на первой ? дорожка не меняется, происходит позиционирование к ее началу. Для устройств, не имеющих разбивки на дорожки, происходит перемещение к началу (концу) данных соответственно.
procedure Eject; Извлекает носитель данных из устройства (например, компакт-диск). Действителен только для устройств с опцией mpCanEject).
procedure Save; Для тех устройств, которые хранят информацию в файлах, сохраняет ее в файле с именем, содержащимся в свойстве FileName.

Каждая операция MCI возвращает код завершения. В случае необходимости проверки программист может получить и проанализировать его, используя два свойства:

(Ro) property Error: Longint; Код ошибки, возвращаемый функцией MCI.
(Ro) property ErrorMessage: string; Соответствующая этому коду строка-сообщение об ошибке. Если ее невозможно получить от драйвера MCI, возвращается сообщение о неизвестной ошибке.

 

Пользуясь свойством Mode, можно узнать текущее состояние устройства. Смысл режимов ясен из названий соответствующих констант:

(Ro) property Mode: TMPModes;

TMPModes = (mpNotReady, mpStopped, mpPlaying, mpRecording, mpSeeking, mpPaused, mpOpen) ;

Следующие свойства дают информацию о характеристиках и состоянии устройства:

(Ro) property Start: Longint;

? начальная позиция данных (если имеются дорожки ? позиция первой дорожки);

(Ro) property Length: Longint;

? длина данных;

(Ro) property Position: Longint;

? текущая позиция данных относительно начала (если имеются дорожки ? относительно начала текущей дорожки).

Эти три свойства зависят от носителя данных (например, от вставленного компакт-диска или загруженного файла AVI). Значение свойств, хотя и имеет тип Longint, представлено и должно интерпретироваться в зависимости от формата представления времени (свойство TimeFormat).

Если у устройства имеются дорожки (как, например, у аудиоплейера), то информацию о них можно получить через свойства:

(Pb) property Tracks: Longint;

? число дорожек;

(Pb) property TrackLength[TrackNum: Integer]: Longint;

? длина дорожки с номером TrackNum. По умолчанию используется формат времени tfMSF (см. ниже);

(Pb) property TrackPosition[TrackNum: Integer]: Longint;

? начальное положение заданной дорожки.

Число кадров, на которое перемещается позиция устройства при шаге вперед/назад (операциях Step/Back), определяется свойством:

property Frames: Longint;

По умолчанию оно равно Length/10. Свойство

property Wait: Boolean;

устанавливает состояние ожидания окончания операции. Если оно установлено в True, функции MCI (Open, Play и т. п.) вернут управление только по завершении операщш. В противном случае отследить конец операции можно, используя свойство:

property Notify: Boolean;

Если это свойство установлено в True, драйвер MCI посылает медиаплейеру специальные извещения о завершении каждой операции. Результат операции присваивается свойству:

(Ro) property NotifyValue: TMPNotifyValues;

TMPNotifyValues = (nvSuccessful, nvSuperseded, nvAborted, nvFailure) ;

nvSuccessful ? успешное окончание;

nvSuperseded ? устройство получило еще одну команду, требующую извещения, и извещение от данной операции не будет получено;

nvAborted ? операция прервана;

nvFailure ? ошибка во время выполнения операции;

Программист также имеет возможность получить управление в этот момент, предусмотрев обработчик события:

(Pb) property OnNotify: TNotifyEvent;

Если программист хочет использовать свойства Wait и Notify, он должен устанавливать их значения специально перед каждой операцией MCI. После ее завершения их значения более не актуальны и не принимаются во внимание, пока снова не будут переустановлены. Когда свойства не действуют, устройство ожидает конца операции и не посылает извещений (как если бы Wait = True и Notify = False).

Идентификатор устройства, получаемый им при открытии (вызове метода Open), равен значению свойства:

(Ro) property DeviceID: Word;

Он необходим, когда программист хочет сам вызвать функцию API mciSendCommand для выполнения действий, не предусмотренных методами данного класса. В качестве примера приведена функция, позволяющая узнать наличие носителя данных в устройстве (такая возможность в компоненте TMediaPlayer, к сожалению, отсутствует):

function TFormI.MediaPresent: boolean;
═════var StatusParm: TMCI_Status_Parms;
begin
═════StatusParm.dwItem := mci_Status_Media_Present;
═════mciSendCommand(MediaPlayerl.DeviceID, mci_Status, mci_Wait or mci_Status_Item, Longint(@StatusParm)) ;
═════Result := StatusParm.dwReturn<>0;
end;

Перейдем к рассмотрению единиц измерения интервалов и форматам их представления. Их устанавливает свойство:

property TimeFormat: TMPTimeFormats;

TMPTimeFormats = (tfMilliseconds, tfHMS, tfMSF, tfFrames, tfSMPTE24, tfSMPTE25, tfSMPTE30, tfSMPTE30Drop, tfBytes, tfSamples, tfTMSF);

Такие свойства, как Length, Position и другие возвращают значения типа Longint. В зависимости от TimeFormat они могут быть проинтерпретированы как:

tfMilliseconds ? число миллисекунд;

tfHMS ? младший байт: часы/минуты/секунды. Старший байт не задействован;

tfMSF ? младший байт: минуты/секунды/кадры. Старший байт не задействован;

tfFrames ? число кадров;

tfSMPTE24, tfSMPTE25, tfSMPTE30, tfSMPTE30Drop ? младший байт: часы/минуты/секунды/кадры. Числа 24, 25 и 30 означают число кадров в секунду;

tfBytes ? число байт;

tfSamples ? число отсчетов;

tfTMSF ? младший байт: дорожки/минуты/секунды/кадры.

Для кодирования и декодирования информации в этих форматах используйте модуль MMSystem, где предусмотрены соответствующие функции. Для устройств, имеющих дорожки (типов dtCDAudio и dtVideoDisc), в конструкторе устанавливается формат tfTMSF.

Два свойства предназначены специально для устройств видео (таких, как dtAVIVideo, dtDigitalVideo, dtOverlay, dtVCR, dtVideodisc). Первое из них

(Pb) property Display: TWinControl;

задает окно (оконный элемент управления), в котором будет производиться отображение видеоданных. Если это свойство равно nil, то драйвер устройства создаст собственное окно. Если устройство не поддерживает альтернативные окна, свойство игнорируется. Прямоугольная область окна Display, в которой должно происходить отображение, задается вторым свойством:

property DisplayRect: TRect;

Если значение свойства не определено, вывод в область не производится.

Уже говорилось о том, что для пользователя компонент TMediaPlayer выглядит как набор кнопок, каждая из которых соответствует команде MCI. Все типы кнопок определены в множестве:

TMPBtnType = (btPlay, btPause, btStop, btNext, btPrev, btStep, btBack, btRecord, btEject);

TButtonSet = set of TMPBtnType;

Отображением кнопок в составе TMediaPlayer во время выполнения управляют три свойства:

(Pb) property VisibleButtons: TButtonSet;

определяет множество видимых кнопок. По умолчанию видны все кнопки, но программисту имеет смысл удалить те, операции которых не поддерживаются данным устройством. Кнопки можно удалить и на стадии разработки, и во время исполнения. Например:

if not (mpCanRecord in Capabilities) then VisibleButtons := VisibleButtons-[btRecord] ,

Свойство

(Pb) property ColoredButtons: TButtonSet;

определяет цветовую раскраску кнопок. Каждой операции (как это принято, например, в бытовой технике) соответствует свой цвет. Значок операции на кнопках, попавших в это множество, в случае их видимости также будет цветным. По умолчанию все кнопки имеют это свойство. Следующее свойство

(Pb) property EnabledButtons: TButtonSet;

определяет множество разрешенных кнопок. Оно должно изменяться в зависимости от выполняемой операции (например, при нажатии Pause запрещается и Stop). Объект сам может управлять состоянием своих кнопок, если его свойство:

(Pb) property AutoEnable: Boolean;

установлено в True. Еще три опубликованных свойства:

(Pb) property AutoOpen: Boolean;

? если это свойство установлено в True, устройство автоматически открывается сразу после загрузки TMediaPlayer;

(Pb) property FileName: string;

? имя файла. Используется в том случае, если данные мультимедиа хранятся в файле (например, для dtAVIVideo и dtWaveAudio);

(Pb) property Shareable: Boolean;

? используется при открытии устройства. True означает возможность одновременного открытия его другими задачами (другими объектами TMediaPlayer).

Пара событий, возникающих при нажатии кнопок TmediaPlayer, определяется свойствами:

(Pb) property OnClick: EMPNotify;

EMPNotify = procedure (Sender: TObject; Button: TMPBtnType; var DoDefault: Boolean) of object;

(Pb) property OnPostClick: EMPPostNotify;

EMPPostNotify = procedure (Sender: TObject; Button: TMPBtnType) of object;

Обработчику события OnClick передается тип нажатой кнопки в параметре Button. В результате обработки он должен вернуть значение в параметре DoDefault. Если оно равно True, вызывается соответствующая кнопке функция MCI и после этого ? OnPostClick. Если оно равно False, ничего не происходит (подразумевается, что пользователь сам вызвал требуемые функции MCI).



[Назад]    [Содержание ]    [Вперед]

  


Для комментария : kadan@grsu.grodno.by

  
За содержание страницы отвечает Гончарова М.Н.
©
Кафедра СПиКБ, 2002-2017