Enigma-Spark.Com - Linux Tv community

Enigma2 - Sezam Marvel, Sezam 5000HD, Sezam 1000HD

How To

E2PLAY MULTIMEDIA STREAMER

Настройки, мануалы, описания

by Lexus34 » 19 Sep 2014, 02:13

Обновлено до версии 1.5 Beta

Программа для воспроизведения видео/аудио стримов с интернета на спутниковом ресивере с целью тестирования возможностей Gstreamer.

Image

################################################################################

Кратко о функционале:

Обновление AdobeHDS - оперативное обновление скрипта дефрагментатора с гитхаба (на случай если опять что то поменяют) для работы с сайтами Rutube, Megogo.net и любыми другими которые используют этот тип защиты контента, спасибо KSV.

Обновление транскодера VLC - оперативное обновление VLC, его часть используется для транскодирования различных форматов, и позволяет менять их параметры.

HDS Линк из буфера, Закачка - забирает линк из буфера обмена из плагина HDS Link Detector и соответственно воспроизводит или скачивает его.

Открыть файл - воспроизведение файлов с компьютера с использованием транскодирования.

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

Транскодирование URL из строки - тоже самое с использованием транскодирования, для воспроизведения видео формат которых не поддерживается ресивером или имеет проблемы.

#################################################################################
Ссылки:

Сам установщик программы.
http://enigma-spark.com/e2play/E2PLAY.exe

Плагины для получения линков на видео
https://addons.mozilla.org/ru/firefox/a ... -detector/
https://addons.mozilla.org/ru/firefox/a ... oadhelper/
https://addons.mozilla.org/ru/firefox/a ... et-helper/

Code: Select all
unit e2_play;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Forms, Dialogs, IdHTTP,
  StdCtrls, ClipBrd, UrlMon, ComCtrls, IdCustomTCPServer, WinSock,
  ShellAPI, TLHelp32, IdCustomHTTPServer, IdTCPClient, IdTCPConnection,
  IdComponent, IdBaseComponent, Controls, ExtCtrls,
  IdExplicitTLSClientServerBase, inifiles;

type
  TForm1 = class(TForm)
    IdHTTP1: TIdHTTP;
    Button1: TButton;
    Memo1: TMemo;
    Edit1: TEdit;
    Button2: TButton;
    Label1: TLabel;
    Edit2: TEdit;
    Edit3: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    TrackBar1: TTrackBar;
    Edit4: TEdit;
    Label4: TLabel;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    OpenDialog1: TOpenDialog;
    Button8: TButton;
    Button9: TButton;
    Button10: TButton;
    Button11: TButton;
    Label6: TLabel;
    Button12: TButton;
    Button7: TButton;
    Button13: TButton;
    ProgressBar1: TProgressBar;
    Button14: TButton;
    Panel1: TPanel;
    SaveDialog1: TSaveDialog;
    Panel2: TPanel;
    Button15: TButton;
    Panel3: TPanel;
    Label5: TLabel;
    Label7: TLabel;
    Edit5: TEdit;
    Edit6: TEdit;
    Button16: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure TrackBar1Change(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button12Click(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure Button13Click(Sender: TObject);
    procedure OnClose(Sender: TObject; var Action: TCloseAction);
    procedure Button14Click(Sender: TObject);
    procedure OnCreate(Sender: TObject);
    procedure Button15Click(Sender: TObject);
    procedure IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode;
      AWorkCount: Int64);
    procedure IdHTTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
      AWorkCountMax: Int64);
    procedure IdHTTP1WorkEnd(ASender: TObject; AWorkMode: TWorkMode);
    procedure Button16Click(Sender: TObject);


  private
    { Private declarations }
  public
    { Public declarations }
  end;

// Глобальные переменные
var
  Form1: TForm1;
  URL, URE, URI, CmdLine: string;
  i, pos: integer;
  si : TStartupInfo;
  pi : TProcessInformation;

function CheckTokenMembership(TokenHandle: THandle; SidToCheck: PSID;
  out IsMember: BOOL): BOOL; stdcall;
function SHTestTokenMembership(hToken: THandle; ulRID: ULONG): BOOL; stdcall;
function IsUserAnAdmin(): BOOL; stdcall;

implementation

{$R *.dfm}

//################################## Функции ###################################

// Проверка административных привелегий
function GetAdvApi32Lib(): HMODULE;
const
  ModuleName = 'ADVAPI32';
{$WRITEABLECONST ON}
const
  ModuleHandle: HMODULE = HMODULE(nil);
{$WRITEABLECONST OFF}
begin
  Result := ModuleHandle;
  if Result = HMODULE(nil) then
  begin
    Result := LoadLibrary(ModuleName);
    if Result <> HMODULE(nil) then
      ModuleHandle := Result;
  end;
end;

function CheckTokenMembership(TokenHandle: THandle; SidToCheck: PSID;
  out IsMember: BOOL): BOOL;
type
  TFNCheckTokenMembership = function(TokenHandle: THandle; SidToCheck: PSID;
    out IsMember: BOOL): BOOL; stdcall;
{$WRITEABLECONST ON}
const
  Initialized: Integer = 0;
  RealApiFunc: TFNCheckTokenMembership = nil;
{$WRITEABLECONST OFF}
type
  TAceHeader = packed record
    AceType : Byte;
    AceFlags: Byte;
    AceSize : Word;
  end;
  TAccessAllowedAce = packed record
    Header : TAceHeader;
    Mask : ACCESS_MASK;
    SidStart: DWORD;
  end;
const
  ACL_REVISION = 2;
  DesiredAccess = 1;
  GenericMapping: TGenericMapping = (
    GenericRead : STANDARD_RIGHTS_READ;
    GenericWrite : STANDARD_RIGHTS_WRITE;
    GenericExecute: STANDARD_RIGHTS_EXECUTE;
    GenericAll : STANDARD_RIGHTS_ALL
  );
var
  ClientToken: THandle;
  ProcessToken: THandle;
  SecurityDescriptorSize: Cardinal;
  SecurityDescriptor: PSecurityDescriptor;
  Dacl: PACL;
  PrivilegeSetBufferSize: ULONG;
  PrivilegeSetBuffer: packed record
    PrivilegeSet: TPrivilegeSet;
    Buffer: array [0..2] of TLUIDAndAttributes;
  end;
  GrantedAccess: ACCESS_MASK;
  AccessStatus: BOOL;
begin
  if Initialized = 0 then
  begin
    RealApiFunc := TFNCheckTokenMembership(
      GetProcAddress(GetAdvApi32Lib(), 'CheckTokenMembership'));
    InterlockedIncrement(Initialized);
  end;
  if Assigned(RealApiFunc) then
    Result := RealApiFunc(TokenHandle, SidToCheck, IsMember)
  else
  begin
    Result := False;
    IsMember := False;
    ClientToken := THandle(nil);
    try
      if TokenHandle <> THandle(nil) then
        ClientToken := TokenHandle
      else if not OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, False,
        ClientToken) then
      begin
        ClientToken := THandle(nil);
        if GetLastError() = ERROR_NO_TOKEN then
        begin
          if OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY or
            TOKEN_DUPLICATE, ProcessToken) then
          try
            if not DuplicateToken(ProcessToken, SecurityImpersonation,
              @ClientToken) then
            begin
              ClientToken := THandle(nil);
            end;
          finally
            CloseHandle(ProcessToken);
          end;
        end;
      end;
      if ClientToken <> THandle(nil) then
      begin
        SecurityDescriptorSize := SizeOf(TSecurityDescriptor) +
          SizeOf(TAccessAllowedAce) + SizeOf(TACL) +
          3 * GetLengthSid(SidToCheck);
        SecurityDescriptor := PSecurityDescriptor(
          LocalAlloc(LMEM_ZEROINIT, SecurityDescriptorSize));
        if SecurityDescriptor <> nil then
        try
          if InitializeSecurityDescriptor(SecurityDescriptor,
            SECURITY_DESCRIPTOR_REVISION) then
          begin
            if SetSecurityDescriptorOwner(SecurityDescriptor, SidToCheck,
              False) then
            begin
              if SetSecurityDescriptorGroup(SecurityDescriptor, SidToCheck,
                False) then
              begin
                Dacl := PACL(SecurityDescriptor);
                Inc(PSecurityDescriptor(Dacl));
                if InitializeAcl(Dacl^,
                  SecurityDescriptorSize - SizeOf(TSecurityDescriptor),
                  ACL_REVISION) then
                begin
                  if AddAccessAllowedAce(Dacl^, ACL_REVISION, DesiredAccess,
                    SidToCheck) then
                  begin
                    if SetSecurityDescriptorDacl(SecurityDescriptor, True, Dacl,
                      False) then
                    begin
                      PrivilegeSetBufferSize := SizeOf(PrivilegeSetBuffer);
                      Result := AccessCheck(SecurityDescriptor, ClientToken,
                        DesiredAccess, GenericMapping,
                        PrivilegeSetBuffer.PrivilegeSet, PrivilegeSetBufferSize,
                        GrantedAccess, AccessStatus);
                      if Result then
                        IsMember := AccessStatus and
                          (GrantedAccess = DesiredAccess);
                    end;
                  end;
                end;
              end;
            end;
          end;
        finally
          LocalFree(HLOCAL(SecurityDescriptor));
        end;
      end;
    finally
      if (ClientToken <> THandle(nil)) and
        (ClientToken <> TokenHandle) then
      begin
        CloseHandle(ClientToken);
      end;
    end;
  end;
end;

function GetShell32Lib(): HMODULE;
const
  ModuleName = 'SHELL32';
{$WRITEABLECONST ON}
const
  ModuleHandle: HMODULE = HMODULE(nil);
{$WRITEABLECONST OFF}
begin
  Result := ModuleHandle;
  if Result = HMODULE(nil) then
  begin
    Result := LoadLibrary(ModuleName);
    if Result <> HMODULE(nil) then
      ModuleHandle := Result;
  end;
end;

function SHTestTokenMembership(hToken: THandle; ulRID: ULONG): BOOL; stdcall;
type
  TFNSHTestTokenMembership = function(hToken: THandle; ulRID: ULONG): BOOL; stdcall;
{$WRITEABLECONST ON}
const
  Initialized: Integer = 0;
  RealApiFunc: TFNSHTestTokenMembership = nil;
{$WRITEABLECONST OFF}
const
  SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5));
  SECURITY_BUILTIN_DOMAIN_RID = $00000020;
var
  SidToCheck: PSID;
begin
  if Initialized = 0 then
  begin
    RealApiFunc := TFNSHTestTokenMembership(
      GetProcAddress(GetShell32Lib(), 'SHTestTokenMembership'));
    InterlockedIncrement(Initialized);
  end;
  if Assigned(RealApiFunc) then
    Result := RealApiFunc(hToken, ulRID)
  else
  begin
    Result := AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2,
      SECURITY_BUILTIN_DOMAIN_RID, ulRID, 0, 0, 0, 0, 0, 0, SidToCheck);
    if Result then
    try
      if not CheckTokenMembership(THandle(nil), SidToCheck, Result) then
        Result := False;
    finally
      FreeSid(SidToCheck);
    end;
  end;
end;

function IsUserAnAdmin(): BOOL;
const
  DOMAIN_ALIAS_RID_ADMINS = $00000220;
type
  TFNIsUserAnAdmin = function(): BOOL; stdcall;
{$WRITEABLECONST ON}
const
  Initialized: Integer = 0;
  RealApiFunc: TFNIsUserAnAdmin = nil;
{$WRITEABLECONST OFF}
begin
  if Initialized = 0 then
  begin
    RealApiFunc := TFNIsUserAnAdmin(
      GetProcAddress(GetShell32Lib(), 'IsUserAnAdmin'));
    InterlockedIncrement(Initialized);
  end;
  if Assigned(RealApiFunc) then
    Result := RealApiFunc()
  else
    Result := SHTestTokenMembership(THandle(nil), DOMAIN_ALIAS_RID_ADMINS);
end;

// URL Encode
function UrlEncode(Str: ansistring): ansistring;

  function CharToHex(Ch: ansiChar): Integer;
  asm
    and eax, 0FFh
    mov ah, al
    shr al, 4
    and ah, 00fh
    cmp al, 00ah
    jl @@10
    sub al, 00ah
    add al, 041h
    jmp @@20
@@10:
    add al, 030h
@@20:
    cmp ah, 00ah
    jl @@30
    sub ah, 00ah
    add ah, 041h
    jmp @@40
@@30:
    add ah, 030h
@@40:
    shl eax, 8
    mov al, '%'
  end;

var
  i, Len: Integer;
  Ch: ansiChar;
  N: Integer;
  P: PansiChar;
begin
  Result := '';
  Len := Length(Str);
  P := PansiChar(@N);
  for i := 1 to Len do
  begin
    Ch := Str[i];
    if Ch in ['0'..'9', 'A'..'Z', 'a'..'z', '_'] then
      Result := Result + Ch
    else
    begin
      if Ch = ' ' then
        Result := Result + '+'
      else
      begin
        N := CharToHex(Ch);
        Result := Result + P;
      end;
    end;
  end;
end;

// Узнаем размер файла
function GetFileSize(FileName: String): Integer;
var
  FS: TFileStream;
begin
  try
    FS := TFileStream.Create(Filename, fmShareDenyNone);
  except
    Result := -1;
  end;
    if Result <> -1 then Result := FS.Size;
  FS.Free;
end;

// Определяем локальный IP компьютера
function GetLocalIP: String;

const
  WINSOCK_VERSION = $0101;

var
  WSAData: TWSAData;
  HostEnt: PHostEnt;
  Buf: array [0..127] of Char;

begin
Result := '';
if WSAStartup(WINSOCK_VERSION, WSAData) = 0 then
  begin
  if GetHostName(@Buf, SizeOf(Buf)) = 0 then
    begin
    HostEnt := GetHostByName(@Buf);
    if HostEnt <> nil then Result := inet_ntoa(PInAddr(HostEnt^.h_addr_list^)^);
    end;
  WSACleanup;
  end;
end;

// Проверяем валидность URL
  function IsURL(const URL: Widestring): Boolean;
begin
   Result :=UrlMon.IsValidURL(nil, PWideChar(URL), 0) = S_OK;
end;

// Завершаем процесс по имени
function KillProcess(ExeName: string): LongBool;
var
  B: BOOL;
  ProcList: THandle;
  PE: TProcessEntry32;
begin
  Result := False;
  ProcList := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  PE.dwSize := SizeOf(PE);
  B := Process32First(ProcList, PE);
 while B do begin
  if (UpperCase(PE.szExeFile) = UpperCase(ExtractFileName(ExeName))) then
  Result := TerminateProcess(OpenProcess($0001, False, PE.th32ProcessID), 0);
  B := Process32Next(ProcList, PE);
 end;
  CloseHandle(ProcList);
end;

// Побайтовое сравнение файлов
function AreFilesEqual(const FileName1, FileName2: String): Boolean;
const
  BUFFER_SIZE = 4096;
var
  FileStream1, FileStream2: TFileStream;
  Buffer1, Buffer2: AnsiString;
  BufferSize, BufferReadSize1, BufferReadSize2: Integer;
begin
  try
    FileStream1 := TFileStream.Create(FileName1, fmOpenRead);
    try
      FileStream2 := TFileStream.Create(FileName2, fmOpenRead);
      Result := FileStream1.Size = FileStream2.Size;
      if Result then
      try
        SetLength(Buffer1, BUFFER_SIZE);
        SetLength(Buffer2, BUFFER_SIZE);
        BufferSize := BUFFER_SIZE * SizeOf(AnsiChar);
        ZeroMemory(PAnsiChar(Buffer1), BufferSize);
        ZeroMemory(PAnsiChar(Buffer2), BufferSize);
        repeat
          BufferReadSize1 := FileStream1.Read(Buffer1[1], BufferSize);
          BufferReadSize2 := FileStream2.Read(Buffer2[1], BufferSize);
          Result := Result and (BufferReadSize1 = BufferReadSize2) and (Buffer1 = Buffer2);
        until not Result or (BufferReadSize1 <> BufferSize);
      finally
        FileStream2.Free;
      end;
    finally
      FileStream1.Free;
    end;
  except
    Result := False;
  end;
end;

//############################ E2PLAY 1.5 FINAL ################################

// Используем delay вместо sleep()
procedure delay(mSec:Cardinal);
    var
      TargetTime:Cardinal;
     begin
      TargetTime:=GetTickCount+mSec;
      while TargetTime>GetTickCount do
        begin
          Application.ProcessMessages;
          Sleep(1);
          If Application.Terminated then Exit;
        end;
    end;

//############################# Запуск программы ###############################

procedure TForm1.OnCreate(Sender: TObject);
var
  filename:string;
  ini: tinifile;
begin

  if not IsUserAnAdmin then begin
  showmessage('Запустите программу от имени администратора, '+#13#10+'это можно установить в свойствах ярлыка - вкладка совместимость.'+#13#10+'C правами пользователя под ОС windows 7 работа программы невозможна !');
  halt
  end;

    // Чтение настроек из файла
    filename := ExtractFilePath(ParamStr(0)) + 'settings.ini';
    ini := TIniFile.Create(filename);
    Edit1.Text:= ini.readString('Edit1','Edit1',Edit1.Text);
    Edit2.Text:= ini.readString('Edit2','Edit2',Edit2.Text);
    Edit3.Text:= ini.readString('Edit3','Edit3',Edit3.Text);
    Edit5.Text:= ini.readString('Edit5','Edit5',Edit5.Text);
    Edit6.Text:= ini.readString('Edit6','Edit6',Edit6.Text);

end;

//############################### Подсказка ####################################
procedure TForm1.Button13Click(Sender: TObject);
begin
  ShowMessage('Для работы с программой используйте дополнения HDS Link Detectror '+#13#10+'и Download Helper для Google Chrome или Firefox.');
end;

//###################### Обновление AdobeHDS.php с гитхаба #####################
procedure TForm1.Button14Click(Sender: TObject);
begin
  ShellExecute(Handle, 'open', PCHAR('php.exe'), PCHAR ('AdobeHDS.php --update'), nil, SW_SHOW);
end;

//######################## Обновление транскодера VLC ##########################

// Подготовка прогрессбара качалки
procedure TForm1.IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCount: Int64);
begin
  ProgressBar1.Position := AWorkCount;
  ProgressBar1.Update;
end;

procedure TForm1.IdHTTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCountMax: Int64);
begin
  ProgressBar1.Position := 0;
  ProgressBar1.Max := AWorkcountMax;
end;

procedure TForm1.IdHTTP1WorkEnd(ASender: TObject; AWorkMode: TWorkMode);
begin
  ProgressBar1.Position:= 0;
end;

procedure TForm1.Button15Click(Sender: TObject);
var
  Stream: TMemoryStream;
  ExInfo: TShellExecuteInfoW;
begin

  //Проверяем версию на сервере
  try
    Stream:=TMemoryStream.Create;
    IdHTTP1.Get('http://enigma-spark.com/e2play/vlcremotever.dat',Stream);
    Stream.SaveToFile('vlcremotever.dat');
    Stream.Free;
  except
    on e:Exception do
      Stream.Free;
    end;
    if AreFilesEqual('vlcremotever.dat', 'vlcrcurrentver.dat') = True then begin
      ShowMessage ('У вас последняя версия транскодера VLC, обновление не требуется.');
      deletefile('vlcremotever.dat');
      exit
  end

    // Запуск процедуры обновления
    else
  try
    Stream:=TMemoryStream.Create;
    IdHTTP1.Get('http://enigma-spark.com/e2play/vlc.zip',Stream);
    Stream.SaveToFile('vlc.zip');
    Stream.Free;
  except
    on e:Exception do
      Stream.Free;
    end;

  // Запускаем и ждем распаковку
  FillChar(ExInfo,SizeOf(ExInfo),0);
  with ExInfo do
  begin
    cbSize:= SizeOf(ExInfo);
    fMask:= SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
    lpFile:='7z.exe';
    lpParameters:= PWideChar('x vlc.zip -y');
    lpDirectory:= PWideChar(GetCurrentDir);
    nShow:= 1;
  end;
  ShellExecuteEx(@ExInfo);
  while WaitForSingleObject(ExInfo.hProcess,50) <> WAIT_OBJECT_0 do
  delay(1000); // Для медленных машин
    deletefile('vlc.zip');
    deletefile('vlcrcurrentver.dat');
    RenameFile('vlcremotever.dat', 'vlcrcurrentver.dat');
    ShowMessage('Обновление завершено успешно.');
end;

//##################### Сброс параметров транскодирования ######################
procedure TForm1.Button16Click(Sender: TObject);
begin
   // Параметры транскодирования по умолчанию
   Edit5.Text:=':sout=#transcode{vcodec=mp2v,vb=2048,acodec=mpga,ab=256,channels=2,samplerate=44100}:http{mux=ts,dst=:65000/out} :sout-keep';
   Edit6.Text:=':sout=#transcode:http{mux=ffmpeg{mux=flv},dst=:65000/out} :sout-keep'
end;

//############################### Пуск из файла ################################
procedure TForm1.Button7Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
  SetCurrentDir(ExtractFilePath(Application.ExeName)); // windows xp

  // Авторизация на боксе
  IdHTTP1:= TIdHttp.Create(Application);
  IdHTTP1.ConnectTimeout:= 10000;
  IdHTTP1.Request.Clear;
  IdHTTP1.Request.BasicAuthentication:= true;
  IdHTTP1.Request.UserName := Edit2.Text;
  IdHTTP1.Request.Password := Edit3.Text;

    // Остановка потока (если запущен из другого вызова)
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=128&_=1408707209761');
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=352&_=1408707297401');

    // Выход из плеера
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=174&_=1408712334521');
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=352&_=1408712394682');

    // Завершение процессов и консольных окон
    KillProcess('vlc.exe');
    KillProcess('php.exe');
    SendMessage(FindWindow('ConsoleWindowClass', nil), WM_CLOSE, 0, 0);

    // Удаление буферного файла
    deletefile('out.flv');

    // Запускаем транскодер > mpeg2
    ShellExecute(Handle, 'open', PCHAR('vlc.exe'), PCHAR('-Itelnet '+'"'+(OpenDialog1.FileName)+'"'+' '+(Edit5.Text)), nil, SW_HIDE);

    URL:= 'http://'+GetLocalIP+':65000/out';

    // 2x URL Encode enigma box
    URI:= UrlEncode(AnsiToUtf8(URL));
    URE:= UrlEncode(AnsiToUtf8(URI));

    // Добавление IP компьютера, порта, типа сервиса, точки подключения в запрос
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/web/mediaplayerplay?file=4097%3A0%3A1%3A0%3A0%3A0%3A0%3A0%3A0%3A0%3A'+URE);

    // Прогрессбар ожидания
    for i:=1 to 100 do
    begin
    ProgressBar1.Position:= progressbar1.Position+1;
    delay(80);
    end;
      ProgressBar1.Position:= 0;
    end
     else Exit;
  end;

//####################### Транскодирование URL из буфера #######################
procedure TForm1.Button10Click(Sender: TObject);
begin

  // Авторизация на боксе
  IdHTTP1:= TIdHttp.Create(Application);
  IdHTTP1.ConnectTimeout:= 10000;
  IdHTTP1.Request.Clear;
  IdHTTP1.Request.BasicAuthentication:= true;
  IdHTTP1.Request.UserName := Edit2.Text;
  IdHTTP1.Request.Password := Edit3.Text;

  URL:=Clipboard.AsText;
  if IsURL(URL) = True then begin

      // Остановка потока (если запущен из другого вызова)
      Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=128&_=1408707209761');
      Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=352&_=1408707297401');

      // Выход из плеера
      Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=174&_=1408712334521');
      Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=352&_=1408712394682');

      // Завершение процессов и консольных окон
      KillProcess('vlc.exe');
      KillProcess('php.exe');
      SendMessage(FindWindow('ConsoleWindowClass', nil), WM_CLOSE, 0, 0);

      // Удаление буферного файла
      deletefile('out.flv');

      // Запуск транскодера > mpeg2
      ShellExecute(Handle, 'open', PCHAR('vlc.exe'), PCHAR(' -Itelnet '+(URL)+' '+(Edit5.Text)) , nil, SW_HIDE);

      URL:= 'http://'+GetLocalIP+':65000/out';

      // 2x URL Encode enigma box
      URI:= UrlEncode(AnsiToUtf8(URL));
      URE:= UrlEncode(AnsiToUtf8(URI));

      // Добавление хоста, типа сервиса, IP компьютера, порта, имя файла в запрос
      Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/web/mediaplayerplay?file=4097%3A0%3A1%3A0%3A0%3A0%3A0%3A0%3A0%3A0%3A'+URE);

      // Прогрессбар ожидания
      for i:=1 to 100 do
      begin
        ProgressBar1.Position:= progressbar1.Position+1;
        delay(80);
      end;
        ProgressBar1.Position:= 0;
  end

  // Если не URL сообщяем об этом
  else
    ShowMessage('URL в буфере обмена не найден.');
    exit;
end;

//########################### HDS линк закачка видео ###########################
procedure TForm1.Button11Click(Sender: TObject);
var
    Doutfile: TextFile;
   // saveDialog1 : TSaveDialog;

label dchecksize;

begin

  // Авторизация на боксе
  IdHTTP1:= TIdHttp.Create(Application);
  IdHTTP1.ConnectTimeout:= 10000;
  IdHTTP1.Request.Clear;
  IdHTTP1.Request.BasicAuthentication:= true;
  IdHTTP1.Request.UserName := Edit2.Text;
  IdHTTP1.Request.Password := Edit3.Text;

  URL:=Clipboard.AsText;

  // Проверяем валидность ссылки
  pos:= AnsiPos('php AdobeHDS.php --manifest', Clipboard.AsText);
  if pos = 1 then begin

    // Остановка потока (если запущен из другого вызова)
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=128&_=1408707209761');
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=352&_=1408707297401');

    // Выход из плеера
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=174&_=1408712334521');
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=352&_=1408712394682');

    // Завершение процессов и консольных окон
    KillProcess('vlc.exe');
    KillProcess('php.exe');
    SendMessage(FindWindow('ConsoleWindowClass', nil), WM_CLOSE, 0, 0);

    ShowMessage('Выберите путь не содержащий пробелов в именах папки, например: D:\video');
    saveDialog1:= TSaveDialog.Create(self);
    saveDialog1.InitialDir := GetCurrentDir;
    if saveDialog1.Execute then begin
    SetCurrentDir(ExtractFilePath(Application.ExeName)); // windows xp

    //Формирование командного файла
    AssignFile(Doutfile, 'HDS.cmd');
    Rewrite(Doutfile);
    writeln(Doutfile, URL+' --play >'+SaveDialog1.FileName);
    CloseFile(Doutfile);

    // Запускаем дефрагментатор
    ShellExecute(Handle, 'open', PCHAR('HDS.cmd'), nil, nil, SW_HIDE);

  dchecksize:
      // Прогрессбар ожидания
      for i:=1 to 100 do
       begin
         ProgressBar1.Position:= progressbar1.Position+1;
         delay(10);
       end;
         ProgressBar1.Position:= 0;

       // Проверяем наличие буферного файла
       if not FileExists(saveDialog1.FileName) then begin
         ShowMessage('Ошибка дефрагментатора, сгенерируйте новый линк и повторите попытку !');
       exit
       end;

       // Если беферный файл пустой, ждем еще
       if GetFileSize(saveDialog1.FileName) < 1 then begin;
        goto dchecksize;
       end;
      ShowMessage('Начата загрузка файла в: '+saveDialog1.FileName+' это займет некоторое время')
    end;
  end
  else
    ShowMessage('HDS Линк не найден.');
    exit
end;

//########################## Управления питанием ###############################
procedure TForm1.Button12Click(Sender: TObject);
begin

  // Авторизация на боксе
  IdHTTP1:= TIdHttp.Create(Application);
  IdHTTP1.ConnectTimeout:= 10000;
  IdHTTP1.Request.Clear;
  IdHTTP1.Request.BasicAuthentication:= true;
  IdHTTP1.Request.UserName := Edit2.Text;
  IdHTTP1.Request.Password := Edit3.Text;

  IdHTTP1.Get('http://'+(Edit1.Text)+'/api/powerstate?newstate=0&_=1411477511188');
end;

//########################### URL из строки ####################################
procedure TForm1.Button1Click(Sender: TObject);
begin

  // Авторизация на боксе
  IdHTTP1:= TIdHttp.Create(Application);
  IdHTTP1.ConnectTimeout:= 10000;
  IdHTTP1.Request.Clear;
  IdHTTP1.Request.BasicAuthentication:= true;
  IdHTTP1.Request.UserName := Edit2.Text;
  IdHTTP1.Request.Password := Edit3.Text;

  URL:=Edit4.Text;
  if IsURL(URL) = True then begin

    // Остановка потока
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=128&_=1408707209761');
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=352&_=1408707297401');

    // Выход из плеера
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=174&_=1408712334521');
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=352&_=1408712394682');

    // Завершение процессов и консольных окон
    KillProcess('vlc.exe');
    KillProcess('php.exe');
    SendMessage(FindWindow('ConsoleWindowClass', nil), WM_CLOSE, 0, 0);

    // Удаление буферного файла
    deletefile('out.flv');

    // 2x URL Encode enigma box
    URI:= UrlEncode(AnsiToUtf8(URL));
    URE:= UrlEncode(AnsiToUtf8(URI));

 // delay(3000); // Для слабых боксов

    // Добавление хоста, типа сервиса в запрос
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/web/mediaplayerplay?file=4097%3A0%3A1%3A0%3A0%3A0%3A0%3A0%3A0%3A0%3A'+URE);

    Edit4.Text:='';
  end

   // Если не URL сообщаем об этом
   else
    ShowMessage('URL в строке не найден.');
    Edit4.Text:='';
    exit;
end;

//########################## Перемотка, воспроизведение ########################
procedure TForm1.Button3Click(Sender: TObject);

// Перемотка назад
begin

  // Авторизация на боксе
  IdHTTP1:= TIdHttp.Create(Application);
  IdHTTP1.ConnectTimeout:= 10000;
  IdHTTP1.Request.Clear;
  IdHTTP1.Request.BasicAuthentication:= true;
  IdHTTP1.Request.UserName := Edit2.Text;
  IdHTTP1.Request.Password := Edit3.Text;

  Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=168&_=1408906988814');
end;

// Перемотка вперед
procedure TForm1.Button4Click(Sender: TObject);
begin

  // Авторизация на боксе
  IdHTTP1:= TIdHttp.Create(Application);
  IdHTTP1.ConnectTimeout:= 10000;
  IdHTTP1.Request.Clear;
  IdHTTP1.Request.BasicAuthentication:= true;
  IdHTTP1.Request.UserName := Edit2.Text;
  IdHTTP1.Request.Password := Edit3.Text;

  Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=208&_=1408907181021');
end;

// Воспроизведение
procedure TForm1.Button5Click(Sender: TObject);
begin

  // Авторизация на боксе
  IdHTTP1:= TIdHttp.Create(Application);
  IdHTTP1.ConnectTimeout:= 10000;
  IdHTTP1.Request.Clear;
  IdHTTP1.Request.BasicAuthentication:= true;
  IdHTTP1.Request.UserName := Edit2.Text;
  IdHTTP1.Request.Password := Edit3.Text;

  Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=164&_=1408907491301');
end;

//################################## Стоп ######################################
procedure TForm1.Button2Click(Sender: TObject);
  begin

    // Авторизация на боксе
    IdHTTP1:= TIdHttp.Create(Application);
    IdHTTP1.ConnectTimeout:= 10000;
    IdHTTP1.Request.Clear;
    IdHTTP1.Request.BasicAuthentication:= true;
    IdHTTP1.Request.UserName := Edit2.Text;
    IdHTTP1.Request.Password := Edit3.Text;

    // Остановка потока
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=128&_=1408707209761');
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=352&_=1408707297401');

    // Завершение процессов и консольных окон
    KillProcess('vlc.exe');
    KillProcess('php.exe');
    SendMessage(FindWindow('ConsoleWindowClass', nil), WM_CLOSE, 0, 0);

    // Удаление буферного файла
    deletefile('out.flv');

    // Выход из плеера
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=174&_=1408712334521');
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=352&_=1408712394682');
  end;

//############################ URL из буфера ###################################
procedure TForm1.Button6Click(Sender: TObject);
begin

  // Авторизация на боксе
  IdHTTP1:= TIdHttp.Create(Application);
  IdHTTP1.ConnectTimeout:= 10000;
  IdHTTP1.Request.Clear;
  IdHTTP1.Request.BasicAuthentication:= true;
  IdHTTP1.Request.UserName := Edit2.Text;
  IdHTTP1.Request.Password := Edit3.Text;

  URL:=Clipboard.AsText;
  if IsURL(URL) = True then begin

    // Остановка потока
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=128&_=1408707209761');
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=352&_=1408707297401');
  delay(3000);
    // Выход из плеера
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=174&_=1408712334521');
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=352&_=1408712394682');

    // Завершение процессов и консольных окон
    KillProcess('vlc.exe');
    KillProcess('php.exe');
    SendMessage(FindWindow('ConsoleWindowClass', nil), WM_CLOSE, 0, 0);

    // Удаление буферного файла
    deletefile('out.flv');

    // 2x URL Encode enigma box
    URI:= UrlEncode(AnsiToUtf8(URL));
    URE:= UrlEncode(AnsiToUtf8(URI));

  delay(3000); // Для слабых боксов

    // Добавление хоста, типа сервиса в запрос
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/web/mediaplayerplay?file=4097%3A0%3A1%3A0%3A0%3A0%3A0%3A0%3A0%3A0%3A'+URE);
  end
   else
    ShowMessage('URL в буфере обмена не найден.');    // Если не URL сообщяем об этом
    exit;
end;

//########################### HDS линк из буфера ###############################
procedure TForm1.Button8Click(Sender: TObject);

var
  outfile: TextFile;

label checksize;

  begin

  // Авторизация на боксе
  IdHTTP1:= TIdHttp.Create(Application);
  IdHTTP1.ConnectTimeout:= 10000;
  IdHTTP1.Request.Clear;
  IdHTTP1.Request.BasicAuthentication:= true;
  IdHTTP1.Request.UserName := Edit2.Text;
  IdHTTP1.Request.Password := Edit3.Text;

  URL:=Clipboard.AsText;

  // Проверяем валидность ссылки
  pos:= AnsiPos('php AdobeHDS.php --manifest', Clipboard.AsText);
    if pos = 1 then begin

      // Остановка потока (если запущен из другого вызова)
      Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=128&_=1408707209761');
      Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=352&_=1408707297401');

      // Выход из плеера
      Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=174&_=1408712334521');
      Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=352&_=1408712394682');

      // Завершение процессов и консольных окон
      KillProcess('vlc.exe');
      KillProcess('php.exe');
      SendMessage(FindWindow('ConsoleWindowClass', nil), WM_CLOSE, 0, 0);

      // Удаление буферного файла
      deletefile('out.flv');

      // Формирование командного файла
      AssignFile(outfile, 'HDS.cmd');
      Rewrite(outfile);
      writeln(outfile, URL+' --play >out.flv');
      CloseFile(outfile);

      // Запуск AdobeHDS дефрагментатора (STDOUT)
      ShellExecute(Handle, 'open', PCHAR('HDS.cmd'), nil, nil, SW_HIDE);

  checksize:
      // Ожидание данных в буферном файле
      for i:=1 to 100 do
       begin
         ProgressBar1.Position:= progressbar1.Position+1;
         delay(10);
       end;
         ProgressBar1.Position:= 0;

       // Проверяем наличие буферного файла
       if not FileExists('out.flv') then begin
         ShowMessage('Ошибка дефрагментатора, сгенерируйте новый линк и повторите попытку !');
       exit;
       end;

       // Если беферный файл пустой, ждем еще
       if GetFileSize('out.flv') < 1 then begin;
       goto checksize;
      end;

      // Запускаем трансодер, используем только миксер
      ShellExecute(Handle, 'open', PCHAR('vlc.exe'), PCHAR(' -I telnet out.flv '+(Edit6.Text)) , nil, SW_HIDE);

      // Формируем запрос
      URL:= 'http://'+GetLocalIP+':65000/out';

      // 2x URL Encode enigma box
      URI:= UrlEncode(AnsiToUtf8(URL));
      URE:= UrlEncode(AnsiToUtf8(URI));

      // Добавление хоста, IP компьютера, буферного файла в запрос
      Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/web/mediaplayerplay?file=4097%3A0%3A1%3A0%3A0%3A0%3A0%3A0%3A0%3A0%3A'+URE);
       end

      // Если не URL сообщаем об этом
     else
        ShowMessage('HDS не найден.');
     exit;
end;

//######################## Транскодирование URL из строки ######################
procedure TForm1.Button9Click(Sender: TObject);
begin

  // Авторизация на боксе
  IdHTTP1:= TIdHttp.Create(Application);
  IdHTTP1.ConnectTimeout:= 10000;
  IdHTTP1.Request.Clear;
  IdHTTP1.Request.BasicAuthentication:= true;
  IdHTTP1.Request.UserName := Edit2.Text;
  IdHTTP1.Request.Password := Edit3.Text;

 URL:=Edit4.Text;
  if IsURL(URL) = True then begin

    // Остановка потока (если запущен из другого вызова)
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=128&_=1408707209761');
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=352&_=1408707297401');

    // Выход из плеера
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=174&_=1408712334521');
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=352&_=1408712394682');

    // Завершение процессов и консольных окон
    KillProcess('vlc.exe');
    KillProcess('php.exe');
    SendMessage(FindWindow('ConsoleWindowClass', nil), WM_CLOSE, 0, 0);

    // Удаление буферного файла
    deletefile('out.flv');

    // Запуск транскодера > mpeg2
    ShellExecute(Handle, 'open', PCHAR('vlc.exe'), PCHAR(' -Itelnet '+(URL)+' '+(Edit5.Text)) , nil, SW_HIDE);

    URL:= 'http://'+GetLocalIP+':65000/out';

    // 2x URL Encode enigma box
    URI:= UrlEncode(AnsiToUtf8(URL));
    URE:= UrlEncode(AnsiToUtf8(URI));

    // Добавление хоста, типа сервиса, IP компьютера, порта, имя файла в запрос
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/web/mediaplayerplay?file=4097%3A0%3A1%3A0%3A0%3A0%3A0%3A0%3A0%3A0%3A'+URE);
    Edit4.Text:='';

    // Прогрессбар ожидания
    for i:=1 to 100 do
      begin
        ProgressBar1.Position:= progressbar1.Position+1;
        delay(80);
      end;
        ProgressBar1.Position:= 0;
  end

  // Если не URL сообщяем об этом
  else
    ShowMessage('URL в строке не найден.');
    Edit4.Text:='';
    exit;
end;

//############################### Громкость ####################################
procedure TForm1.TrackBar1Change(Sender: TObject);
var
  POS: Integer;
  VOL: String;

  begin
    POS:=TrackBar1.Position;
    VOL:=IntToStr(POS);
    IdHTTP1.Get('http://'+(Edit1.Text)+'/web/vol?set=set'+VOL);
  end;

//############################ Закрытие программы ##############################
procedure TForm1.OnClose(Sender: TObject; var Action: TCloseAction);

var
  filename:string;
  ini:tinifile;
begin

    // Авторизация на боксе
    IdHTTP1:= TIdHttp.Create(Application);
    IdHTTP1.ConnectTimeout:= 10000;
    IdHTTP1.Request.Clear;
    IdHTTP1.Request.BasicAuthentication:= true;
    IdHTTP1.Request.UserName := Edit2.Text;
    IdHTTP1.Request.Password := Edit3.Text;

    // Завершение процессов
    KillProcess('vlc.exe');
    KillProcess('php.exe');
    SendMessage(FindWindow('ConsoleWindowClass', nil), WM_CLOSE, 0, 0);

    // Удаление буферного файла
    deletefile('out.flv');
  try
    // Остановка потока
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=128&_=1408707209761');
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=352&_=1408707297401');

    // Выход из плеера
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=174&_=1408712334521');
    Memo1.Text:=IdHTTP1.Get('http://'+(Edit1.Text)+'/api/remotecontrol?command=352&_=1408712394682');
  except
  on E: Exception do
    ShowMessage('Не удалось отправить команды завершения на ресивер, уточните IP, логин, пароль, ошибка: '+E.Message);
   end;
    // Сохранение настроек
    filename := ExtractFilePath(ParamStr(0)) + 'settings.ini';
    ini := TIniFile.Create(filename);
    ini.WriteString('Edit1','Edit1',Edit1.Text);
    ini.WriteString('Edit2','Edit2',Edit2.Text);
    ini.WriteString('Edit3','Edit3',Edit3.Text);
    ini.WriteString('Edit5','Edit5',Edit5.Text);
    ini.WriteString('Edit6','Edit6',Edit6.Text);
  end;
end.
User avatar
Lexus34
Admin
 
Posts: 181
Joined: 13 Feb 2013, 22:36
Receiver: Sezam 1000HD/Marvel
Image: OpenPli, EGAMI

Return to How To

cron