Я устанавливаю программное обеспечение (SOFT1), которое захватывает видеокадры в формате JPG и отправляет их в другое программное обеспечение (SOFT2) с помощью Tidtrivialftp.
SOFT2 - получить Jpeg и отобразить его в TImage для просмотра.
Я не уверен, что я делаю неправильно. Код вырезан из другого поста здесь. Кажется, это работает, но я ничего не получаю в своем TImage, и если я пытаюсь сохранить на диск, я получаю файл 0 КБ.
Я попытался реализовать решение, найденное по этой ссылке:
Поток изображений UDP, delphi indy10
Попытка отправить небольшой файл test.jpg размером всего 2,48 КБ для целей тестирования.
Клиентская сторона:
procedure TForm1.BtnClick(Sender: TObject);
var
Myjpg: TJPEGImage;
Strmkoko : TMemoryStream;
begin
try
//Tried a lot of different ways to load the jpg into a stream. This is the latest one with same results.
Strmkoko := TMemoryStream.Create;
Myjpg := TJPEGImage.Create;
Myjpg.LoadFromFile('C:\Users\Etienne\Desktop\MyVideo\a\test.jpg');
Myjpg.SaveToStream(Strmkoko);
Strmkoko.Position := 0;
Image1.Picture.assign(Myjpg); //Confirming MyJpg is showing the picture by placing it in a TImage component before sending - All ok
//Also tried to just put the filename instead of stream. - no difference
IdtrivialFTPClientFrameGrab.Put(Strmkoko, 'test.jpg');
finally
Strmkoko.Free;
Myjpg.Free;
end;
end;
Сторона сервера:
procedure TForm2.IdFTPServerFrameGrabTransferComplete(Sender: TObject;
const Success: Boolean; const PeerInfo: TPeerInfo; var AStream: TStream;
const WriteOperation: Boolean);
var
jpg: TJPEGImage;
begin
if WriteOperation and Success then
begin
jpg := TJPEGImage.Create;
try
jpg.LoadFromStream(AStream);
jpg.SaveToFile('C:\Users\Etienne\Desktop\Pic\test.jpg'); //trying to save the jpg to check what I get and its 0KB
img1.Picture.Assign(jpg); //This is the final place I want to send the stream
finally
jpg.Free;
end;
end;
end;
procedure TForm2.IdFTPServerFrameGrabWriteFile(Sender: TObject;
var FileName: string; const PeerInfo: TPeerInfo; var GrantAccess: Boolean;
var AStream: TStream; var FreeStreamOnComplete: Boolean);
begin
if Filename = 'test.jpg' then
begin
//Code does get in here when I debug
GrantAccess := True;
AStream := TMemoryStream.Create;
FreeStreamOnComplete := True;
end else
GrantAccess := False;
end;
Я ожидаю, что файл, который я отправляю (test.jpg), появится в img1 и также будет сохранен в 'C: \ Users \ Etienne \ Desktop \ Pic \ test.jpg'
Код работает так, как если бы он сохранил файл и присвоил ему img1, но он пуст.
Все это делается локально.
Это как "IdtrivialFTPClientFrameGrab.Put (Strmkoko, 'test.jpg');" отправляет пустой файл. Но я пробовал несколько способов загрузки потока и всегда один и тот же результат.
Я понимаю, что TCP / IP был бы лучше, но я бы хотел, чтобы это работало. Любая помощь будет оценена.
Ура,
E.