Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

проигрывание Mpeg на панели Delphi

20K
20 ноября 2006 года
leola
9 / / 20.11.2006
Файлы mpeg проигрываются обычным Windows Media проигрывателем, а вот в моей программе с помощью компонента TMediaPlyer на панель выводится только черное окно и никакой картинки. В чем проблема?:confused: :confused:
2.6K
20 ноября 2006 года
sql-injection
46 / / 22.03.2005
если ты пытаешся проиграть мпег через медиаплеер, то можешь забить на это занятие. для этого надо использовать MCI. в принципе могут подойти функции для работы с ави. исходник прилагаю.
20K
20 ноября 2006 года
leola
9 / / 20.11.2006
Не могу скачать Ваш архив, почему то нет доступа. Я на этом сайте первый раз может что делаю не так.
С AVI файлами никаких проблем, все играет, а необходимо именно mpg (не mpeg. Прошу прощенья за ошибочку) кодек как я понимаю установлен, иначе не проигрывался бы файл другими средствами.
на других форумах все сводится к тому что если кодек установлен, все должно быть по правилам а в реальности черная панель, хотя по значкам компонента что-то проигрывается.
Если есть шансы решить эту проблему пошлите на мой email: [email]leolas@list.ru[/email]
3.2K
21 ноября 2006 года
Sania
186 / / 28.10.2006
Кодеки могут и глючить (например видео не выводится на экран, но выводится на проектор)...
Windows Media Player выводит видео сразу на видекарту (overlay) может с этим какие проблеммы.
2.6K
21 ноября 2006 года
sql-injection
46 / / 22.03.2005
вот исходник

Код:
{
MCI-проигрыватель видеофайлов

Данный проигрыватель использует интерфейс командный строк
}
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, MMSystem, ComCtrls, ExtCtrls, Spin;

type
  TFormMain = class(TForm)
    BitBtnPlay: TBitBtn;
    BitBtnStop: TBitBtn;
    Timer: TTimer;
    Label1: TLabel;
    StatusBar: TStatusBar;
    BitBtnLoadFile: TBitBtn;
    OpenDialog: TOpenDialog;
    ScrollBar: TScrollBar;
    StaticTextTime: TStaticText;
    StaticTextPos: TStaticText;
    Label2: TLabel;
    Label3: TLabel;
    procedure BitBtnPlayClick(Sender: TObject);
    procedure BitBtnStopClick(Sender: TObject);
    procedure TimerTimer(Sender: TObject);
    procedure BitBtnLoadFileClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure ScrollBarScroll(Sender: TObject; ScrollCode: TScrollCode;
                              var ScrollPos: Integer);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    ErrMsg     : array[0..4095] of Char;
    ErrMsgStr  : String;
    AVILength : Cardinal;                           // Длина видео
  public
    { Public declarations }
    ErrorID      : DWORD;                           // ID ошибки
    FlgOpen      : Boolean;
    CommandStr   : String;                          // Командная строка
    ReturnStr    : array[0..50] of Char;            // Возвращаемая строка
    Ret          : String;                          // Возвращаемая строка

    Procedure OpenFile(FileName : String);          // Инициализация MCI
    Procedure CloseMCIDevice;
    Procedure ShowMCIError;
    // Проиграть с заданной позиции
    procedure Play(Position : Cardinal);
    // стоп
    Procedure Stop;
    // Проигрыватель играет - да / нет
    Function  IsPlay : Boolean;
    // Разрешение / запрет кнопок
    Procedure OnOff(Value : Boolean);
  end;
var
  FormMain: TFormMain;

implementation

uses Wind,UnitStr;

{$R *.dfm}

function MillisecondsToTimeStr(TimeSec: Cardinal): String;
var
  H,M,S  : Integer;
  HStr,MStr,SStr : String[2];
begin
  TimeSec := TimeSec div 1000; // в секунды
  // Кол-во часов
  H  := (TimeSec div 60) div 60;
  // минуты - (кол-во часов *  60)
  M  := (TimeSec div 60) - (60*H);
  // Cек - общее кол-во секунд + (кол-во мин. *  60))
  S  := TimeSec  - ((TimeSec div 60) * 60);
  HStr := IntToStr(H);
  IF Length(HStr)=1 then HStr := '0' + HStr;
  MStr := IntToStr(M);
  IF Length(MStr)=1 then MStr := '0' + MStr;
  SStr := IntToStr(S);
  IF Length(SStr)=1 then SStr := '0' + SStr;

  Result := Format('%S:%S:%S',[HStr,MStr,SStr]);
end;

procedure TFormMain.FormCreate(Sender: TObject);
begin
 OnOff(False);
end;

procedure TFormMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  IF FlgOpen then
  begin
     CloseMCIDevice;
     FlgOpen      := False;
  end;
end;

// Закрываем устройство

procedure TFormMain.CloseMCIDevice;
begin
  Stop; // Остановить на всякий сучай

  // Закрыть
  CommandStr   := Format('Close video',[]);
  ErrorID := mciSendString(PChar(CommandStr),nil, 0, 0);
  IF ErrorID <> 0 then
  begin
     ShowMCIError; Exit;
  end;

  OnOff(False);
end;

// Загрузить

procedure TFormMain.BitBtnLoadFileClick(Sender: TObject);
begin
  IF FlgOpen Then
  begin
     CloseMCIDevice;
  end;
  IF OpenDialog.Execute then
  begin
    OpenFile(OpenDialog.FileName);
  end;
end;

// Открыть MCI устройство и загрузить файл

procedure TFormMain.OpenFile(FileName: String);
var
  Coord : TSepRec;
begin
  // Загружаем файл
  CommandStr   := Format('Open "%S" type avivideo alias video Parent %D style child',[FileName, Window.Handle]);
  ErrorID := mciSendString(PChar(CommandStr),nil, 0, 0);
  IF ErrorID <> 0 then
  begin
     ShowMCIError; Exit;
  end;

  // Устанавливаем формат времени

  CommandStr   := Format('Set video time format milliseconds',[]);
  ErrorID := mciSendString(PChar(CommandStr),nil, 0, 0);
  IF ErrorID <> 0 then
  begin
     ShowMCIError; Exit;
  end;

  // Получаем длину проигрываемого файла в

  CommandStr   := Format('Status video length',[]);
  ErrorID := mciSendString(PChar(CommandStr),ReturnStr, Length(ReturnStr), 0);
  IF ErrorID <> 0 then
  begin
     ShowMCIError; Exit;
  end;
  SetString(Ret, ReturnStr, StrLen(ReturnStr));

  // Получить длину
  AVILength := StrToInt(Ret);
  ScrollBar.Min := 0;
  ScrollBar.Max := AVILength;
  ScrollBar.Position := ScrollBar.Min;

  StaticTextTime.Caption := MillisecondsToTimeStr(AVILength);
  StatusBar.SimpleText := FileName;
  FlgOpen      := True;

  // Определяем высоту и ширину выводимого изображения
  CommandStr   := Format('Where video destination',[]);
  ErrorID := mciSendString(PChar(CommandStr),ReturnStr, Length(ReturnStr), 0);
  IF ErrorID <> 0 then
  begin
     ShowMCIError; Exit;
  end;
  SetString(Ret, ReturnStr, StrLen(ReturnStr));

  // Разбиваем строку на элементы
  Coord := GetSeparatorRec(Ret,' ');

  // Нестраиваем окно проигрыватель
  Window.Width  := StrToInt(Coord.Rec[3]) + 7;  // поправки
  Window.Height := StrToInt(Coord.Rec[4]) + 24;
  Window.Left   := (Left + (Width div 2)) - (Window.Width Div 2);
  Window.Top    := top - Window.Height;

  Window.Show;
  // Обновляем окно видео
  CommandStr   := Format('put video window at %S',[Ret]);
  ErrorID := mciSendString(PChar(CommandStr),nil, 0, 0);
  IF ErrorID <> 0 then
  begin
     ShowMCIError; Exit;
  end;

  OnOff(True);
end;

// Проиграть

procedure TFormMain.BitBtnPlayClick(Sender: TObject);
begin
 Play(ScrollBar.Position);
end;

procedure TFormMain.Play(Position: Cardinal);
begin
  // Загружаем файл
 CommandStr   := Format('Play video from %D',[Position]);
 ErrorID := mciSendString(PChar(CommandStr),nil, 0, 0);
 IF ErrorID <> 0 then
 begin
    ShowMCIError; Exit;
 end;
 Timer.Enabled:= True;
end;

// Стоп

procedure TFormMain.Stop;
begin
 CommandStr   := Format('Stop video',[]);
 ErrorID := mciSendString(PChar(CommandStr),nil, 0, 0);
 Timer.Enabled := False;
end;

procedure TFormMain.BitBtnStopClick(Sender: TObject);
begin
  Stop;
end;

// ОПРЕДЕЛЕНИЕ ТЕКУЩЕЙ ПОЗИЦИИ В МЕДИА-ДАННЫХ

procedure TFormMain.TimerTimer(Sender: TObject);
begin
  // Получаем текущею позицию в медиа-данных
  CommandStr   := Format('Status video Position',[]);
  ErrorID := mciSendString(PChar(CommandStr),ReturnStr, Length(ReturnStr), 0);
  IF ErrorID <> 0 then
  begin
     ShowMCIError; Exit;
  end;
  SetString(Ret, ReturnStr, StrLen(ReturnStr));
  ScrollBar.Position := StrToInt(Ret);
  StaticTextPos.Caption := MillisecondsToTimeStr(ScrollBar.Position);
end;

// ПОКАЗ ОШИБОК

procedure TFormMain.ShowMCIError;
begin
  mciGetErrorString(ErrorID, ErrMsg, SizeOf(ErrMsg));
  SetString(ErrMsgStr, ErrMsg, StrLen(ErrMsg));
  ShowMessage('Ошибка MCI!' + #10#13 +  ErrMsgStr);
end;

/ Проигрыватель играет (ДА/НЕТ)

function TFormMain.IsPlay: Boolean;
begin
  Result := False;

  CommandStr   := Format('Status video Mode',[]);
  ErrorID := mciSendString(PChar(CommandStr),ReturnStr, Length(ReturnStr), 0);
  IF ErrorID <> 0 then
  begin
     ShowMCIError; Exit;
  end;
  SetString(Ret, ReturnStr, StrLen(ReturnStr));
  Result := Trim(Ret) = 'playing';
end;

// СМЕНА ПОЗИЦИИ

procedure TFormMain.ScrollBarScroll(Sender: TObject;
          ScrollCode: TScrollCode; var ScrollPos: Integer);
begin
  // Конец перетаскивания бегунка
  IF ScrollCode = scEndScroll then
  Begin
     // Если проигрыватель играет то продолжить игру с позиции бегунка
     // иначе
     //   Просто позиционирование на выбранное время
     IF IsPlay then
     begin
        Play(ScrollBar.Position)
     end
     else
     begin
        CommandStr   := 'seek video to ' + IntToStr(ScrollBar.Position);
        ErrorID := mciSendString(PChar(CommandStr),nil, 0, 0);
        IF ErrorID <> 0 then
        begin
           ShowMCIError; Exit;
        end;

    end;
  end
  else
    Timer.Enabled := False;
end;

procedure TFormMain.OnOff(Value: Boolean);
begin
 BitBtnPlay.Enabled := Value;
 BitBtnStop.Enabled := Value;
 ScrollBar.Enabled  := Value;
end;

end.
20K
21 ноября 2006 года
leola
9 / / 20.11.2006
Что то глючит у меня этот сайт. Второй раз набираю ответ.
Ваши функции все работают! Большое спасибо за Вашу помощь. При замене Window.Handle на Handle моей панели видео выводится куда надо. Но задача у меня смотреть два файла на разных панелях, а через mciSendString это не удается вторая панель не работает до тех пор пока не выключена первая. Так что пришлось таки использовать TMediaPlayer там все получается. mpg файл пока запустить не удалось, но с помощью k-lite codec basic обнаружила что кодек моего файла MPEG-2 не установлен. Порывшись удалось установить что таких кодеков существует несколько разных производителей, какой мой наверно придется устанавливать эмпирическим путем. Непонятно как его в этом случае WindowsMedia плеер проигрывает. :rolleyes:
387
21 ноября 2006 года
Ihbif19
421 / / 28.10.2004
Цитата: leola
Что то глючит у меня этот сайт. Второй раз набираю ответ.
Ваши функции все работают! Большое спасибо за Вашу помощь. При замене Window.Handle на Handle моей панели видео выводится куда надо. Но задача у меня смотреть два файла на разных панелях, а через mciSendString это не удается вторая панель не работает до тех пор пока не выключена первая. Так что пришлось таки использовать TMediaPlayer там все получается. mpg файл пока запустить не удалось, но с помощью k-lite codec basic обнаружила что кодек моего файла MPEG-2 не установлен. Порывшись удалось установить что таких кодеков существует несколько разных производителей, какой мой наверно придется устанавливать эмпирическим путем. Непонятно как его в этом случае WindowsMedia плеер проигрывает. :rolleyes:


Извините, вы уж определитесь что вам конкретно надо?

257
21 ноября 2006 года
kosfiz
1.6K / / 18.09.2005
leola
MPEG-2 это то что на dvd, файлы *.vob.
20K
22 ноября 2006 года
leola
9 / / 20.11.2006
Цитата: kosfiz
leola
MPEG-2 это то что на dvd, файлы *.vob.



Нет, расширение у меня mpg. Файл получаю с платы видеозахвата. Gotview PCI DVD2 Lite он сам внутри себя содержит микросхемку, которая кодирует файл. Моя задача вывести этот файл в своей програмке на компанент панель + все его данные по времени и все что его касается и таких панелей в проге 2 и фильмы на них разные а идти должны одновременно :eek:

257
22 ноября 2006 года
kosfiz
1.6K / / 18.09.2005
leola
с помощью этой программки посмотри какой кодек нужен для твоего файла и установлен ли он. у меня, например, всем файлам с расширением mpg требуется кодек MPEG-1, а MPEG-2 нужен для просмотра *.vob. кстати если для твоего файла нужен MPEG-2, то с помощью TMediaPlayer файл проиграть скорее всего не удастся.
20K
22 ноября 2006 года
leola
9 / / 20.11.2006
Это опять я. Наконец-то установила декодер и кодек это ffdchow MPEG-4 Video Decoder. K-lite теперь обнаруживает что видео декодер установлен, но в программе при попытке открыть Player c DeviceType =dtDigitalVideo пишет что указанное устройство не опознается интерфейсом MCI. Может кто что знает где еще надо что прописать чтоб MMSYSTEM знало что декодер установлен или еще чего не хватает?
20K
22 ноября 2006 года
leola
9 / / 20.11.2006
Это опять я. Наконец-то установила декодер и кодек это ffdchow MPEG-4 Video Decoder. K-lite теперь обнаруживает что видео декодер установлен, но в программе при попытке открыть Player c DeviceType =dtDigitalVideo пишет что указанное устройство не опознается интерфейсом MCI. Может кто что знает где еще надо что прописать чтоб MMSYSTEM знало что декодер установлен или еще чего не хватает?
20K
22 ноября 2006 года
leola
9 / / 20.11.2006
sql-injection, Вам большое спасибо таки ваш код пригодился. Если сделать замену
Format('Open "%S" type avivideo alias video Parent
на Format('Open "%S" type mpegvideo alias video Parent

то мой файл mpg проигрывается Ура!

Но как теперь второй файл запустить??:confused:

Ошибка :выбранный псевдоним уже используется программой, а что нужно изменить не пойму, вроде все имена другие. как сделать клон MCIDevice:confused:
20K
23 ноября 2006 года
leola
9 / / 20.11.2006
Мне удалось сделать все что хотелось. Большое спасибо sql-injection. Вот хочется только узнать где описаны команды Format/ Как вы узнали что в них надо писать.
Я то чисто интуитивным путем делала изменения и добилась своего. А хотелось бы знать первоисточники.:eek:
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог