PDA

View Full Version : سوال: کامپوننت رایگان برای ارسال صوت یا ویدئو تحت شبکه



Mahdi_Prog
جمعه 17 خرداد 1387, 18:48 عصر
سلام

برای ارسال صوت یا ویدئو تحت شبکه کامپوننت رایگانی وجود داره؟
TAVComponents قبلاً توی سایت معرفی شده ولی نسخه Trial اون هست!
ممنون

aserfg
جمعه 17 خرداد 1387, 19:28 عصر
با استفاده از كامپوننتهاي دلفي و استفاده از پروتكل ftp مي توني هر گونه فايلي رو ارسال و دريافت كني همچنين با استفاده از كامپوننتهاي serversocket,clientsocketكه براي كار با سوكتها مي باشند يه نمونه كد براي ارسال فايل با استفاده از سوكتها رو اينجا مي زارم:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ScktComp, ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
Image1: TImage;
Image2: TImage;
ClientSocket1: TClientSocket;
ServerSocket1: TServerSocket;
Button1: TButton;
procedure Image1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
Reciving: boolean;
DataSize: integer;
Data: TMemoryStream;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Image1Click(Sender: TObject);
begin
// This is the procedure to open the socket for RECEIVING.
// Button1.Click is this procedure as well.
ClientSocket1.Active:= true;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
// Open the SENDING socket.
ServerSocket1.Active:= true;
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
// Send command to start the file sending.
Socket.SendText('send');
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
s, sl: string;
begin
s:= Socket.ReceiveText;
// If we're not in recieve mode:
if not Reciving then
begin
// Now we need to get the length of the data stream.
SetLength(sl, StrLen(PChar(s))+1); // +1 for the null terminator
StrLCopy(@sl[1], PChar(s), Length(sl)-1);
DataSize:= StrToInt(sl);
Data:= TMemoryStream.Create;
// Delete the size information from the data.
Delete(s, 1, Length(sl));
Reciving:= true;
end;
// Store the data to the file, until we've received all the data.
try
Data.Write(s[1], length(s));
if Data.Size = DataSize then
begin
Data.Position:= 0;
Image2.Picture.Bitmap.LoadFromStream(Data);
Data.Free;
Reciving:= false;
Socket.Close;
end;
except
Data.Free;
end;
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var


ms: TMemoryStream;
begin
// The client wants us to send the file.
if Socket.ReceiveText = 'send' then
begin
ms:= TMemoryStream.Create;
try
// Get the data to send.
Image1.Picture.Bitmap.SaveToStream(ms);
ms.Position:= 0;
// Add the length of the data, so the client
// will know how much data to expect.
// Append #0 so it can determine where the size info stops.
Socket.SendText(IntToStr(ms.Size) + #0);
// Send it (the socket owns the stream from now on).
Socket.SendStream(ms);
except
// So only free the stream if something goes wrong.
ms.Free;
end;
end;
end;

end.

AlirezaBahredar
شنبه 18 خرداد 1387, 07:36 صبح
برای ارسال صوت یا ویدئو تحت شبکه کامپوننت رایگانی وجود داره؟


داداش من این بنده خدا می خواد فایل صوتی و تصویری رو بصورت Stream بفرسته.....نه اینکه می خواد فایل رو یکجا ارسال کن....
بعید می دونم همچین کامپوننتی که شما می خواید بصورت مجانی وجود داشته بتشه....

iman_Delphi7
شنبه 18 خرداد 1387, 08:09 صبح
با سلام
اگر این صدا و تصویر بصورت فایله که با همین کدی که دوستمون دادن می شه اینا رو فرستاد. ولی اگه می خوای اینا رو فرضا از ورودی بگیری و بفرستی ، می تونی فرضا صدا رو از میکروفن دریافت کنی بافرش کنی و بعد با همین کدی که دوستمون دادن ارسالش کنی.
البته فکر می کنم تو کدی که داده شده ClientSocket و ServerSocket هر دو روی یک فرم قرار دارن که شما برای کارتون باید دو تا برنامه جدا بنویسین و هر کدوم از این کامپوننتها رو هم تو یه برنامه قرار بدین.

aserfg
شنبه 18 خرداد 1387, 11:52 صبح
اخوي گرام آقاي بهره دار عزيز حتي اگه صحبت شما درست باشه با همين كامپوننتها هم امكانش هست .و فايل يا چند فايل رو در يك استريم داشت. به كد زير نگاه كنين :


Procedure TForm1.ThisISHowIPutFilesIn ;


var
ABigFileStream, SomeSmallFiles : TMemoryStream ;

begin
ABigFileStream := TMemoryStream.Create ;
try
SomeSmallFiles := TMemoryStream.Create ;
try
SomeSmallFiles.LoadFromFile('C:\SomeSmalFile1.txt' );
AddToStream(SomeSmallFiles,ABigFileStream);
SomeSmallFiles.LoadFromFile('C:\SomeSmalFile2.txt' );
AddToStream(SomeSmallFiles,ABigFileStream);

finally
SomeSmallFiles.Free ;
end;
ABigFileStream.SaveToFile('C:\MrBig.DDD')
finally
ABigFileStream.free ;
end;
end;

وسپس با متدهاي خاص اين كامپوننتها از قبيل writestream,..مي شه اونا رو به يك سيسم ديگه ارسال كرد.