Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > LibVLC воспроизведение видео из TMemoryStream


Автор: Flashboy 12.6.2012, 01:18
Подскажите пожалуйста,
кто-нибудь сталкивался с необходимостью воспроизвести видео файл из памяти TMemoryStream c помощью библиотеки libvlc.dll(VideoLAN)?
Воспроизведение из файла реализовано, необходимо воспроизвести из памяти.
Подскажите примером, кто знает, как из имеющихся данных реализовать.
Если по типам и функциям будет что-то непонятно, исходник в аттаче.
Код

procedure Play;
begin
  // VS:=TMemoryStream.Create;
  //VS.LoadFromFile('AnyVideo.mkv');
  
   vlcInstance :=libvlc_new(0, nil);
   vlcMedia := libvlc_media_new_path(vlcInstance, 'AnyVideo.mkv');
   vlcMediaPlayer := libvlc_media_player_new_from_media(vlcMedia);
   libvlc_media_release(vlcMedia);
   libvlc_media_player_set_hwnd(vlcMediaPlayer, Pointer(Panel1.Handle));
   libvlc_media_player_play(vlcMediaPlayer);
end;

Автор: Illusion Dolphin 27.6.2012, 21:24
Присоединяюсь к вопросу.
Нашёл возможность воспроизведение потока через http сервер, но при этом недоступна перемотка:

На форму кидаем TIdHTTPServer,

Код


procedure TForm2.IdHTTPServer1CommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
  FS: TFileStream;
  ContentType: string;
  {$IFDEF WIN32_OR_WIN64}
  LOldErrorMode : Integer;
  {$ENDIF}
begin
  FS := TFileStream.Create('file.avi', fmOpenRead);
  try
    ContentType := IdHTTPServer1.MIMETable.GetFileMIMEType('file.avi');
    AResponseInfo.WriteHeader;
    {$IFDEF WIN32_OR_WIN64}
    LOldErrorMode := SetErrorMode(SEM_FAILCRITICALERRORS);
    try
    {$ENDIF}
      AContext.Connection.IOHandler.Write(FS);
    {$IFDEF WIN32_OR_WIN64}
    finally
      SetErrorMode(LOldErrorMode)
    end;
    {$ENDIF}
  finally
    FS.Free;
  end;
end;

...

   открывать файл по по адресу:
   s :=  'http://localhost:' + IntToStr(IdHTTPServer1.DefaultPort);// OpenDialog1.FileName;
   vlcMedia:= libvlc_media_new_path(vlcInstance,s);



Очень была бы интересно решение без сети, но найти такого не смог. 


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