AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Voice-/Sprach-Chat

Offene Frage von "onepiecefreak2"
Ein Thema von onepiecefreak2 · begonnen am 13. Jun 2014 · letzter Beitrag vom 20. Jun 2014
Antwort Antwort
onepiecefreak2

Registriert seit: 13. Jun 2014
50 Beiträge
 
#1

AW: Voice-/Sprach-Chat

  Alt 18. Jun 2014, 18:43
Ich glaube du hast das Problem falsch verstanden. Ich habe es bis jetzt nur mit mir selbst über ein Headset getestet. Ich habe mich selbst in der Lautstärke gehört mit der ich aufgenommen habe, es ist also keine Rückkopplung. Das was Aphton sagte, es würde daran liegen, dass ich sowohl Server als auch Client bin, kann ich mir gut vorstellen. Mein Problem war ja das der Server mein eigenes Gesprochenes nicht mehr an mich zurücksenden soll. Und das wollte ich halt über eine 'IP-Sperre' machen. Also, der Server liest den Ton und meine IP und verschickt den Ton dann an alle Clients außer an den mit der, dem Ton mitgeschickten, IP.

Geändert von onepiecefreak2 (18. Jun 2014 um 18:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.202 Beiträge
 
Delphi 12 Athens
 
#2

AW: Voice-/Sprach-Chat

  Alt 18. Jun 2014, 19:04
Das ist bei dem Problem irrelevant, also ob du nun direkt mit dir sprichst oder nur indirekt, über einen anderen Computer.
Du hast auch letztendlich 2 Programme und wo die laufen ist grundsätzlich erstmal egal.
Die Techniken, wie man Echo/Rückkopplung unterdrücken kann, bleiben im Prinzip ja die Gleichen.

'ne zusätzliche IP-Sperre ist eh nicht so sinnvoll. (es gibt eh genug wichtigere Dinge, die du noch machen musst)
- erstmal ist das hier nur ein zu vernachlässigender Sonderfall (normaler Weise macht man sowas ja nicht)
- dann blockiert man sich so eine lokale Möglichkeit das schnell mal zu testen
- ich hab daheim 2 und an einem Rechner sogar aktuell 3 (bis 5) Wege ins Internet, welche alle gleichzeitig aktiv sein können. Also mehrere interne und öffentliche IPs. Was willst du da dann prüfen?
- es können mehrere Rechner an der selben öffentlichen IP hängen
- lokal, können Beide sogar die gleiche IP besitzen -> Frag hier mal rum, wer eine 192.168.178.* bei seinem Rechner hat. (da finden sich bestimmt welche mit der Gleichen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (18. Jun 2014 um 19:17 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: Voice-/Sprach-Chat

  Alt 18. Jun 2014, 19:49
Ich habs ja bei der Demo so, dass die Anwendung nach Wahl als entweder Server oder Client fungiert.
Du müsstest nun die Logik soweit trennen und Auslagern, dass du eine eigene Server-Exe und eine eigene Client-Exe hast.
Ich versteh aber nicht genau, warum du das unbedingt so haben willst. So wie es momentan ist, find ichs eig. viel besser.

Konkreter nun - du müsstest beim Client folgendes machen:
- Verbindungsaufbau zum Server
- Mikrofondaten, die vom Capture Thread geliefert werden, direkt an den Server ununterbrochen weiterleiten (einfach in den Sendbuffer hauen, da der sowieso abgearbeitet wird)

Server:
- Verbindungen aufnehmen und in eigene Threads auslagern (das wäre komplett neu zu machen, da bei der Demo nur eine einzige Verbindung erlaubt ist, designtechnisch)
- Pro Thread Mikrofondaten empfangen und sofort an alle anderen Clients weiterleiten - somit hört jeder jeden Teilnehmer

Edit:
Zitat:
@Aphton
Die Fehler in meinem nun vorvorletzten Post sind NACH der Einbindung deiner .pas-Datei aufgetreten. Ich habe da reingeschaut und bemerkt, dass die Funktion SendBuffer aber vorhanden ist. Warum erkennt er diese Funktion nicht?
Zum Fehler - ich kann dir da nicht helfen. Vlt ginge es, wenn du mal die Delphi-Fehlermeldung kopierst und hier postest (ctrl+c sollte funzen)
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.005 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Voice-/Sprach-Chat

  Alt 18. Jun 2014, 20:03
Also, der Server liest den Ton und meine IP und verschickt den Ton dann an alle Clients außer an den mit der, dem Ton mitgeschickten, IP.
Bei TCP wird eine Client-Server oder Peer-to-Peer Verbindung anhand der Kombination aus IP Adresse und Port eindeutig identifiziert. Die Socket-Verbindung, die den Ton nicht erhalten soll, kann man so identifizieren. Jeder Client erhält dabei bei TCP einen dynamisch vergebenen Port, wodurch alle Clients sich unterscheiden lassen.

Je nach TCP Bibliothek ist das aber nicht die einzige Möglchkeit, Clients zu identifizieren. Der Indy TCP Server ermöglichen es beim Verbindungsaufbau vom Client zum Server jedem Client eine ID zuzuweisen, deren Wert man selbst vergibt. Will man eine Nachricht an einzelne oder eine Gruppe von Verbindungen senden, kann man die IDs aller bestehenden Verbindungen der Reihe nach mit den "gewünschen" Empfänger-IDs vergleichen.
Michael Justin
  Mit Zitat antworten Zitat
onepiecefreak2

Registriert seit: 13. Jun 2014
50 Beiträge
 
#5

AW: Voice-/Sprach-Chat

  Alt 19. Jun 2014, 13:45
@Aphton
Das ist der Fehler:
[Fehler] Unit1.pas(264): Undefinierter Bezeichner: 'SendBuffer'

Aber, wie gesagt: Da ist deine .pas schon eingebunden und in der finde ich die Funktion SendBuffer. Warum also Delphi nicht?

@mjustin
Ich werde das mal bei meinem TextChat einbauen. Sollte es da gehen, werde ich später auch im VoiceChat irgendwie so hinbekommen.

Wer mir da jetzt wieder ein Strich durch die Rechnung machen will und schreibt, dass bei einem VoiceChat so eine Sperre anders gehen muss, lässt das bitte. Ich will wenigstens das alleine hinbekommen. Danke!
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#6

AW: Voice-/Sprach-Chat

  Alt 19. Jun 2014, 13:54
Was steht denn in der Zeile 264.. Sei doch spezifischer.
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
onepiecefreak2

Registriert seit: 13. Jun 2014
50 Beiträge
 
#7

AW: Voice-/Sprach-Chat

  Alt 20. Jun 2014, 18:41
Das habe ich alles schon mal geschrieben. Da es allerdings schon ein paar Seiten her ist, werde ich es nochmal schreiben.

BytesSent := Client.SendBuffer(SendBuffer.Memory^, Min(SND_RCV_SIZE, SendBuffer.Size)) In dieser Zeile ist der Fehler des SendBuffers.

Delphi-Quellcode:
// Extraction of wavehdrs
IF ReceiveBuffer.Size >= WaveHdr.dwBufferLength THEN BEGIN
   Move(ReceiveBuffer.Memory^, WaveHdr.lpData^, WaveHdr.dwBufferLength);
   Move(Pointer(Integer(ReceiveBuffer.Memory) + WaveHdr.dwBufferLength)^,ReceiveBuffer.Memory^, ReceiveBuffer.Size - WaveHdr.dwBufferLength);
   ReceiveBuffer.Size := ReceiveBuffer.Size - WaveHdr.dwBufferLength;
   ReceiveBuffer.Seek(0, soFromEnd);
   SendToPlayerThread();
   END;
end;

procedure processSendBuffer();
VAR BytesSent: Integer;
begin
IF Assigned(Client) THEN
   BytesSent := Client.SendBuffer(SendBuffer.Memory^, Min(SND_RCV_SIZE, SendBuffer.Size))
   ELSE BytesSent := Accept.SendBuffer(SendBuffer.Memory^, Min(SND_RCV_SIZE, SendBuffer.Size));
IF BytesSent > 0 THEN BEGIN
   Move(Pointer(Integer(SendBuffer.Memory) + BytesSent)^,SendBuffer.Memory^, SendBuffer.Size - BytesSent);
   SendBuffer.Size := SendBuffer.Size - BytesSent;
   SendBuffer.Seek(0, soFromEnd);
   END;
end;
Das ist nochmal der Codeschnipsel, in dem der Fehler war.
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz