Video & Voice Chat

freund311

Neues Mitglied
Hallo Forum!
Ich arbeite zurzeit an meiner Abschlussarbeite und sitze gerade etwas in einer Sackgasse fest.
Eine Teil der Arbeit befasst sich mit einem Video Chat ähnlich dem Skype Video Chat..

Es hat jedoch lediglich ein PC eine Webcam und Mikrofon und der zweite PC nur ein Mikrofon.

Mein Frage lautet, wie ich am besten die gemachten Fotos (BufferedImages..?) und die aufgenommenen Stimmen über die Sockets übertrage.

Ist es sinnvoll in einem Thread in 50fps Takt Fotos zu schießen und über ImageIO.write(..) an den Empfänger zu schicken? Oder gibt's es hier bessere Lösungen ? ( Zurzeit arbeite ich an dieser Lösung )

TCP oder UDP? Da die beiden PCs sich im selben WLan Netzwerk befinden, sollte TCP möglich sein ?

Freue mich über jede Antwort :)
 

Gucky

Top Contributor
50fps? Guck dir mal die Qualität und Bildwiederholfrequenz von Skype an. Und da stehen Microsoft sowie viele dicke Server hinter. Ich halte es für besser, wenn du die Verbindung von beiden Clients testest und die Bildwiederholfrequenz sowie die Bildqualität daran anpasst. Am Besten noch on-the-fly.
Womöglich würde sich die Serialisierung anbieten und das du die Bilder serialisiert verschickst oder du verschickst ein besonderes Bitmuster als Anfang, dann ein byte[], ein byte[][] oder ein byte[][][3], welches das Bild darstellt und dann das Bitmuster für das Ende.
 

freund311

Neues Mitglied
Java:
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;

public class ImageTest {

public static void main(String[] args) {

    try {

        byte[] imageInByte;
        BufferedImage originalImage = ImageIO.read(new File(
                "c:/darksouls.jpg"));

        // convert BufferedImage to byte array
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ImageIO.write(originalImage, "jpg", baos);
        baos.flush();
        imageInByte = baos.toByteArray();
        baos.close();

        // convert byte array back to BufferedImage
        InputStream in = new ByteArrayInputStream(imageInByte);
        BufferedImage bImageFromConvert = ImageIO.read(in);

        ImageIO.write(bImageFromConvert, "jpg", new File(
                "c:/new-darksouls.jpg"));

    } catch (IOException e) {
        System.out.println(e.getMessage());
    }
}
}

Meinst du das so? BufferedImage kann ma ja nicht von serilizable ableiten.

Ja mit den fps hast recht :)
 

Gucky

Top Contributor
Warum nicht? Nahezu alle API Klassen, sogar Arrays implementieren das Interface.
Du musst bei einem Byte Array nur sicherstellen, dass du das Bild wieder zusammensetzen kannst UND das du die Bilder voneinander trennen kannst.

Wenn das funktioniert, denke ich, dass ist die beste Möglichkeit. Womöglich gibt es Bessere aber ich verstehe nicht so wirklich etwas von Bildern.
Da ein Bild aber nichts anderes ist, als ein paar Bytes, kommst du nicht umhin die Bytes zu übertragen. :D
 

Anti-Banane

Gesperrter Benutzer
woah ... stop leute ...

als aller erstes : UDP ! TCP ist selbst im eigenen netzwerk für sowas VIEL zu langsam

zweitens : ich würde die finger von image-io und dem gedanken lassen die bilder einzeln übertragen zu wollen
ich würde mir auch schon was anderes einfallen lassen um an die daten der cam zu kommen ... nämlich nicht als einzelbilder (weil 50FPS schaffst du dann niemals) sondern versuchen über den treiber am besten gleich einen komprimierten stream anzuzapfen den du dann direkt sendest
es kann nötig sein das ganze umzucodieren (weil z.b. der stream der cam einen speziellen compressor nutzt dessen de-compressor dann nur über die treiber-install auf dem pc liegt der diese cam hat
hier müsstest du auf grund der performance dann eh auf native-code zurückgreifen ... vor allem auch wenn dann noch audio dazu kommen soll (stichwort : audio/video codecs)

drittens : sowas ist ne mammut-aufgabe und dürfte für einen allein höchstes nur mit viel copy'n'paste und fertigem code umsetzbar sein
an sowas haben sehr viele leute sehr lange programmiert um das halbwegs auf die reihe zu bekommen ... und trotzdem ist es irgendwie immer noch kacke
 

Network

Top Contributor
Auf jedenfall UDP. Videostreaming und TCP ist wie mit einem EuroCombi in den Urlaub zu fahren.
Videostreaming kann man fast als die Definition von UDP bezeichnen.
Sicher dass das eine "Abschluss"arbeit sein soll?

Hinter Skype stehen keine "viele dicke Server", stattdessen werden die zwei Gesprächspartner direkt miteinander per NAT punch through verbunden ohne einen zwischengeschalteten Server - was UDP unbedingt vorraussetzt und wesentlich effektiver ist.
Alleinig zum übertragen von Dateien (wie bei Skype) würde ich auf TCP (oder ein selbst gebasteltes TCP per UDP) zurückgreifen.

Binde doch mal den Treiber deiner Webcam erstmal in Java ein, schau was die Webcam dir an Daten liefert und danach kann man sich darüber Gedanken machen, wie man dass dann am besten umsetzt.

Gruß
Net
 
Zuletzt bearbeitet:

Bug Fisher

Bekanntes Mitglied
Das Hauptproblem ist ganz sicher nicht, die
Code:
BufferedImage
s über Netzwerk zu üertragen, das ist sogar ganz leicht mit einem ObjectStream möglich - ich habe das im lokalen Netzwerk schon mehrfach getan.

Dein Thema sollte (variable) adäquate Komprimierung sein; bestimmt gibt es da freie und proprietäre fertige Implementierungen.
 

Anti-Banane

Gesperrter Benutzer
@Bug
ahja ... klar, ist kein thema, aber mit was für nem durchsatz ? 10 ... 15 bilder die sekunde ? und dann noch mit dem mega-overhead über serialisierung und object-streams ?

OUCH ... das ist ja mal ein noch falscherer ansatz mit noch weniger ahnung als das thema ohne hin shcon ist
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M JSON Parsing von youtube video comment replies Allgemeine Java-Themen 4
K Video-Manipulation Allgemeine Java-Themen 2
I Methoden Schnelle Hilfe benötigt - Kleines Video/Slideshow aus mehreren Bildern erstellen Allgemeine Java-Themen 3
Seikuassi Compiler-Fehler Xuggler-Problem-Video > Audio bzw. Video > Audio-API Allgemeine Java-Themen 2
M YouTube-Video herunterladen und speichern Allgemeine Java-Themen 10
C Roulette Video Allgemeine Java-Themen 6
E Videosequenz mittels Java aus Video schneiden Allgemeine Java-Themen 10
L Video rendern? Allgemeine Java-Themen 3
T Java Video Player Allgemeine Java-Themen 9
P Tonspur aus Video extrahieren und konvertieren Allgemeine Java-Themen 2
D Musik, Video, Bücher Verwaltungsprogramm Allgemeine Java-Themen 2
StrikeTom Screenshots zu video + speichern? Allgemeine Java-Themen 24
S Video Tracking Tool Allgemeine Java-Themen 3
N Java API Video Convert Allgemeine Java-Themen 2
chriscrown Video Cutter/Player für speziellen H.264-Codec Allgemeine Java-Themen 2
P JMF - Video Pause und Einzelbildweiterschaltung Allgemeine Java-Themen 2
C Video abspielen? Allgemeine Java-Themen 2
M Video-Farbinformationen Allgemeine Java-Themen 4
C JMF - Overlay über dem Video Allgemeine Java-Themen 7
T Video Streaming in Java Allgemeine Java-Themen 7
G Video Streams mit Servlets Allgemeine Java-Themen 3
T Video mit Java? Allgemeine Java-Themen 2
N voice over ip Allgemeine Java-Themen 6
M Voice over IP und Java? Allgemeine Java-Themen 2
D Chat GPT allgemein und in Bezug auf Softwareentwicklung Allgemeine Java-Themen 105
mrbig2017 Threads Chat Programm mit Threads? Allgemeine Java-Themen 2
W Java-Chat via XMLRPC mit PHP-Seite verbinden Allgemeine Java-Themen 3
Cromewell Chat-Bot Vokabularabgleich Allgemeine Java-Themen 1
B Chat auf andere Datentypen aufteilen Allgemeine Java-Themen 2
D RMI Einfache Chat-Anwendung mit RMI Allgemeine Java-Themen 0
S Klassen Abstract, Interface und ein Chat Tool Allgemeine Java-Themen 1
W Java Lan Chat Allgemeine Java-Themen 4
D Running Primefaces Chat Example Allgemeine Java-Themen 2
D JSF Primefaces Mobil Chat Allgemeine Java-Themen 8
E Automatisierter Avatar Chat Allgemeine Java-Themen 3
D Chat - keine Schrift sichtbar Allgemeine Java-Themen 4
D Chat Bot für Java-Chat Allgemeine Java-Themen 18
I Problem mit TCP Chat Allgemeine Java-Themen 2
E Applet Java Chat Allgemeine Java-Themen 3
E Weiterprogrammierung Java Chat Allgemeine Java-Themen 4
K Java Chat Programm Allgemeine Java-Themen 2
H ganz simpler chat Allgemeine Java-Themen 8
M IRC Chat - Klasse oder Application gesucht Allgemeine Java-Themen 9
B Chat öffnen nicht möglich ! Allgemeine Java-Themen 5
W Im Chat die farbe ändern Allgemeine Java-Themen 7
M Chat programieren Allgemeine Java-Themen 18
T Java Chat Allgemeine Java-Themen 37
M chat-probleme Allgemeine Java-Themen 3
M Fehler beim Start des Chat-Applets von java-forum.org Allgemeine Java-Themen 10
G java! Problem mit Chat-Applet Allgemeine Java-Themen 3
M Chat-Software gesucht Allgemeine Java-Themen 3
S Suche Java Chat Allgemeine Java-Themen 8
B chat-software Allgemeine Java-Themen 5
R Problem mit Login in einen Chat Allgemeine Java-Themen 5
S JAVA CHAT Allgemeine Java-Themen 2
M Klassenstruktur für einen Java-Chat Allgemeine Java-Themen 20

Ähnliche Java Themen

Neue Themen


Oben