Перейти к содержанию
Fire Monkey от А до Я

Лидеры

  1. Brovin Yaroslav

    Brovin Yaroslav

    Администраторы


    • Баллы

      4

    • Постов

      2 124


  2. Kitty

    Kitty

    Пользователи


    • Баллы

      1

    • Постов

      792


  3. SerhioUser

    SerhioUser

    Пользователи


    • Баллы

      1

    • Постов

      55


  4. Martifan

    Martifan

    Пользователи


    • Баллы

      1

    • Постов

      396


Популярный контент

Показан контент с высокой репутацией 23.05.2014 во всех областях

  1. Самый простой вариант реализации воспроизведения аудио/видео по кругу является использование таймера: procedure TFormPlayer.PlayerTimerTimer(Sender: TObject); begin // Выполнять таймер с интервалом 1 секунда if MediaPlayer.State = TMediaState.Stopped then begin MediaPlayer.CurrentTime := 0; MediaPlayer.Play; end; end;
    2 балла
  2. WaveAudio Package пользуюсь этим компонентом http://www.delphiarea.com/products/delphi-packages/waveaudio/ вот ее ссылка код получение потока: unit Main; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Spin, StdCtrls, Buttons, mmSystem, WaveUtils, WaveStorage, WaveIO, WaveOut, WavePlayers, ComCtrls, ScktComp; const WM_RECEIVERREADY = WM_USER; type TMainForm = class(TForm) btnDisconnect: TButton; btnConnect: TButton; gbBroadcaster: TGroupBox; lblRemoteAddress: TLabel; lblRemotePort: TLabel; edRemoteAddress: TEdit; seRemotePort: TSpinEdit; edFormat: TEdit; lblFormat: TLabel; SaveDialog: TSaveDialog; lblFileSize: TLabel; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure tcpClientConnect(Sender: TObject; Socket: TCustomWinSocket); procedure tcpClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); procedure btnConnectClick(Sender: TObject); procedure btnDisconnectClick(Sender: TObject); procedure tcpClientRead(Sender: TObject; Socket: TCustomWinSocket); private tcpClient: TClientSocket; WaveFile: TWaveFile; end; var MainForm: TMainForm; implementation {$R *.dfm} uses WinSock; { Helper Functions } function FormatSize(Size: Int64): String; const KB = 1024; MB = 1024 * KB; GB = 1024 * MB; begin if Size < KB then Result := FormatFloat('#,##0 Bytes', Size) else if Size < MB then Result := FormatFloat('#,##0.0 KB', Size / KB) else if Size < GB then Result := FormatFloat('#,##0.0 MB', Size / MB) else Result := FormatFloat('#,##0.0 GB', Size / GB); end; { TMainForm } procedure TMainForm.FormCreate(Sender: TObject); begin tcpClient := TClientSocket.Create(Self); with tcpClient do begin ClientType := ctNonBlocking; OnConnect := tcpClientConnect; OnDisconnect := tcpClientDisconnect; OnRead := tcpClientRead; end; end; procedure TMainForm.FormDestroy(Sender: TObject); begin tcpClient.Active := False; end; procedure TMainForm.tcpClientConnect(Sender: TObject; Socket: TCustomWinSocket); begin btnDisconnect.Visible := True; btnConnect.Visible := False; edRemoteAddress.Enabled := False; seRemotePort.Enabled := False; end; procedure TMainForm.tcpClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); begin btnConnect.Visible := True; btnDisconnect.Visible := False; edRemoteAddress.Enabled := True; seRemotePort.Enabled := True; edFormat.Text := ''; if Assigned(WaveFile) then begin WaveFile.EndRewrite; WaveFile.Free; WaveFile := nil; lblFileSize.Caption := ''; end; end; procedure TMainForm.btnConnectClick(Sender: TObject); begin if SaveDialog.Execute then begin WaveFile := TWaveFile.Create(SaveDialog.FileName, fmCreate or fmShareDenyWrite); tcpClient.Host := edRemoteAddress.Text; tcpClient.Port := seRemotePort.Value; tcpClient.Active := True; end; end; procedure TMainForm.btnDisconnectClick(Sender: TObject); begin tcpClient.Active := False; end; procedure TMainForm.tcpClientRead(Sender: TObject; Socket: TCustomWinSocket); var WaveFormat: PWaveFormatEx; WaveFormatSize: Integer; Data: Pointer; DataSize: Integer; begin try if WaveFile.State = wssReady then // Getting Wave Format begin Socket.ReceiveBuf(WaveFormatSize, SizeOf(WaveFormatSize)); GetMem(WaveFormat, WaveFormatSize); try Socket.ReceiveBuf(WaveFormat^, WaveFormatSize); edFormat.Text := GetWaveAudioFormat(WaveFormat); WaveFile.BeginRewrite(WaveFormat); Socket.SendText('READY'); lblFileSize.Caption := 'Waiting for audio data...'; finally FreeMem(WaveFormat); end; end else begin Sleep(0); DataSize := Socket.ReceiveLength; if DataSize > 0 then begin GetMem(Data, DataSize); try Socket.ReceiveBuf(Data^, DataSize); WaveFile.Write(Data^, DataSize); lblFileSize.Caption := 'Receiving: ' + FormatSize(WaveFile.Stream.Size); finally FreeMem(Data); end; end; end; except tcpClient.Active := False; Application.HandleException(Self); end; end; end.
    1 балл
  3. Используйте лучше другой вариант определения окончания видео. Такой вариант работает: if MediaPlayer1.State = TMediaState.Stopped then begin MediaPlayer1.CurrentTime := 0; MediaPlayer1.Play; end;
    1 балл
  4. Спасибо, Brovin Yaroslav. Эта метода подходит. Мне как раз нужно было указать платформы для всех компонентов в пакете. Их (компонентов) там не много.
    1 балл
  5. Огромное спасибо за рекомендации! Буду пробовать.
    1 балл
  6. Поставьте задержку 100 мсек (или 24 кадров в секунду). Я попробовал это на стандартном виндовом примере MediaPlayerHD и там я не вижу проблемы черного экрана (Даже при интервале таймера в 1 секунду).
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...