Thema: Delphi VoIP mit Delphi?

Einzelnen Beitrag anzeigen

danu1104

Registriert seit: 4. Dez 2006
75 Beiträge
 
Delphi 2006 Personal
 
#10

Re: VoIP mit Delphi?

  Alt 26. Mär 2009, 03:27
Ich würde dafür die Bass kompo nehmen und die Indy.

Player1:
Mit der Bass dem Stream erstellen oder aufnehmen und den stream dann mit Indy TCP /UDP versenden.

Player2:
Stream Empfangen und abspielen.


Versucht mal mehr nicht - kommerzielle wege zu gehn, so lernt man einfach besser mit der IDE
umzugehen. Probiern geht ÜBER studiern.

Also einfach IDE öffnen und versuchen.

Von VoIP komponente halte ich persönlich nicht viel da es meisten demos sind oder fertige ActiveX kompos die schweine geld kosten. Und in der sache bin ich sowieso sehr eigen.

Erstell einfach mal zum Test einen Bass Stream also mit ner MP3 und versuch den einfach zu senden und auf dem anderen (PC) zu empfangen.

Die antworten vonwegen es gibt doch skype oder TS2 finde ich net so toll, die leute fragen ja nicht ob es sowas gibt um einen Link zu erhalten, sonder sie möchtn evtl mal selber sowas baun, und suchen einen weg.



Delphi-Quellcode:
// Server (Port 11)
procedure TForm1.EmpfaengerExecute(AContext: TIdContext);
Var Stream:hStream;

    FStream:TFileStream;
    InetVoIStream:TIDStreamVCL;

begin

Delmtext.Delimiter:=',';
if ACOntext.Connection.Connected then
   begin
 
  DelmText.DelimitedText:=ACOntext.Connection.IOHandler.ReadLn;
  if DelmText.Strings[0] = 'GetVoicethen
  begin
   fStream := TFileStream.Create(DelmText.Strings[1],fmopenwrite or fmCreate);
   InetVoIStream:=TIDStreamVCL.Create(fStream);
   try

     ACOntext.Connection.IOHandler.ReadStream(InetVoIStream);
     FreeAndNil(fStream);
     FreeAndNil(InetVoIStream);
   finally
     
     ACOntext.Connection.Disconnect;
     
   try
     stream:=bass.BASS_StreamCreateFile(false,Pchar(DelmText.Strings[1]), 0 ,0, BASS_SAMPLE_SOFTWARE);
    finally
     if not(stream =0) then
     Bass_channelPlay(stream,false);
     end;
   end;
  end;
 end;


end;
// Client (Port 10)
procedure TForm1.Button1Click(Sender: TObject);
Var
    fStream:TFileStream;
    InetVoIStream:TIDStreamVCL;
    Path:String;
begin
if not Sender0.Connected then Sender0.Connect('localhost',11);
  if OpenDialog1.Execute then
    With Sender0.IOHandler do
     begin

      WriteLn('GetVoice,'+'test.mp3');
      Path := OpenDialog1.FileName;
      fStream := TFileStream.Create(Path, fmOpenRead or fmShareDenyNone);

      InetVoIStream:=TIDStreamVCL.Create(fStream);
        WriteBufferOpen;
          Write(InetVoIStream);
        WriteBufferClose;
      FreeAndNil(fStream);
    end;
 end;

procedure TForm1.EmpfaengerStatus(ASender: TObject;
  const AStatus: TIdStatus; const AStatusText: String);
begin
  Memo1.Lines.Add(AStatusText)
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 DelmText:=TStringlist.Create;
end;
So wie da funktioniert es, was ich leider nicht geschaft habe ist den Stream wieder freizugeben um ihn sofort abzuspielen, Das Prinziep ansich funzt. Ich bin auch kein Pro habe es mal ungeniert mal hingeklatscht.

Wie gesagt, die datei (stream) wird versendet und kommt auch an, nur ich krieg den Stream nicht frei ...
Daniel
  Mit Zitat antworten Zitat