Wiedergabe von MP3-Dateien in JavaFx aus dem Eingabestream

8

Ich verwende den JavaFX Media Player, um eine MP3-Datei mit dem folgenden Code abzuspielen

%Vor%

Aber jetzt habe ich eine Anforderung, dass ich die MP3-Byte-Daten im Speicher anstelle eines Dateiobjekts habe. Der Grund ist, dass die mp3-Datei verschlüsselt und dann zusammen mit dem Programm ausgeliefert wird. Daher muss ich die MP3-Datei im Speicher oder Eingabestream entschlüsseln.

Ich könnte die mp3-Datei in eine temporäre Datei im temporären Verzeichnis entschlüsseln, aber das wäre ein Leistungs-Overhead und der Audio-Inhalt wäre unsicher.

    
SoulMan 24.11.2012, 09:06
quelle

2 Antworten

2

Aus dem Medien-Javadoc

  

Es werden nur HTTP-, FILE- und JAR-URLs unterstützt. Wenn die angegebene URL ungültig ist, wird eine Ausnahme ausgelöst. Wenn ein asynchroner Fehler auftritt, wird die Fehlereigenschaft festgelegt. Hören Sie sich diese Eigenschaft an, um über solche Fehler informiert zu werden.

Ich bin mit JavaFX nicht persönlich vertraut, aber das würde mir nahelegen, dass Sie Medien nicht direkt aus dem Speicher lesen können, ohne auf böse Hacks zurückzugreifen. Normalerweise würde ich für diese Art von URI-Interface vorschlagen, ein benutzerdefiniertes UrlStreamHandler und ein benutzerdefiniertes Protokoll, das aus dem Speicher liest. Aber vorausgesetzt, dass JavaDoc korrekt ist, verwendet das JavaFX seine eigene Auflösung, also wird dies vermutlich nicht funktionieren.

Angesichts dieser Tatsache vermute ich, dass die einzige Möglichkeit, dies zu erreichen, darin besteht, Zugriff auf das In-Memory-MP3 über HTTP bereitzustellen. Sie können dies mit Jetty oder einem ähnlichen eingebetteten Servlet-Container tun. Etwas in den folgenden Zeilen:

1) Starten Sie den Jetty gemäß Quick Start Guide

2) Registrieren Sie ein Servlet, das ungefähr wie folgt aussieht. Dieses Servlet wird Ihre In-Memory-Daten verfügbar machen:

%Vor%

Dann können Sie von Ihrer Anwendung aus über eine http-URL darauf zugreifen. Z.B. etwas wie

%Vor%     
EdC 24.11.2012 09:36
quelle
0

Leider, da der Media-Konstruktor steht, sehe ich keinen einfachen Weg, dies zu tun, außer dem temporären Dateiansatz. Beachten Sie, dass, während ich zustimme, die Leistung einen Overhead hätte, wenn die Dateien nicht zu groß sind (die meisten MP3-Dateien sind im Allgemeinen nicht), sollte der Overhead in diesem Sinne minimal sein. Und technisch macht das Dekodieren des Inhalts in den Speicher es auch unsicher (obwohl zugegebenermaßen viel schwieriger zu extrahieren).

Ein leicht verrückter Ansatz, an den ich dachte, war die Verwendung von Sockets. Sie könnten einen separaten Teil Ihrer Anwendung einrichten, der den unverschlüsselten Inhalt entschlüsselt und dann die rohen MP3-Bytes über einen bestimmten Port auf localhost streamt. Sie könnten dies dann als HTTP-URI für den Medienkonstruktor bereitstellen.

    
berry120 24.11.2012 09:23
quelle

Tags und Links