Dalle Media Javadoc
Solo HTTP, FILE e URL JAR sono supportati. Se l'URL fornito non è valido, verrà generata un'eccezione. Se si verifica un errore asincrono, verrà impostata la proprietà dell'errore. Ascolta questa proprietà per essere avvisati di tali errori.
Non conosco personalmente JavaFX, ma ciò mi suggerisce che senza ricorrere a brutti hack, non sarai in grado di leggere i media direttamente dalla memoria. Normalmente per questo tipo di interfaccia URI solo suggerirei di registrare un custom UrlStreamHandler e un protocollo personalizzato che legge dalla memoria. Ma supponendo che JavaDoc sia corretto, JavaFX usa la propria risoluzione quindi presumibilmente questo non funzionerà.
Dato questo, ho il sospetto che l'unico modo per farlo funzionare è quello di fornire l'accesso alla memoria MP3 su HTTP. È possibile farlo utilizzando Jetty o qualsiasi contenitore di servlet embeddable simile. Qualcosa lungo le seguenti linee:
1) Start Up Jetty secondo Quick Start Guide
2) Registrare un servlet che sembra qualcosa di simile qui di seguito. Questo servlet esporrà i dati in-memory:
public class MagicAccessServlet extends HttpServlet {
private static final Map<String, byte[]> mediaMap = new ConcurrentHashMap();
public static String registerMedia(byte[] media) {
String key = UUID.randomUUID().toString();
mediaMap.put(key, media);
return key;
}
public static deregisterMedia(String key) {
mediaMap.remove(key);
}
public void doGet(HttpServletRequest req, HttpServletResponse resp) {
String key = req.get("key");
byte[] media = mediaMap.get(key);
resp.setContentLength(media.length);
resp.getOutputStream().write(media);
}
}
Quindi è possibile accedere dall'interno dell'applicazione utilizzando un URL HTTP. Per esempio. qualcosa come
MagicAccessServlet.registerMedia(decodedMp3);
new MediaPlayer(new Media("http://localhost:<port>/<context>/<servlet>?key=" + key)).play();
Con la decodifica del contenuto in memoria si intende il file temporaneo sul disco rigido? –