MediaManager.createMedia doesn't work with file:/// URIs

130 views
Skip to first unread message

nickk...@gmail.com

unread,
May 12, 2015, 8:03:31 PM5/12/15
to codenameone...@googlegroups.com
In the simulator I'm using Capture.captureAudio to get audio (it returns a file:/// path).  I then put that into MediaManager and get the following error:

java.lang.IllegalArgumentException: uri.getScheme() == null!

So I tried with and input stream:

InputStream is = FileSystemStorage.getInstance().openInputStream(path);

and the path is incorrect (relative to my .cn1 folder) and the string is modified to remove the file:// from the beginning of it.

I need to get video, audio and image - so far I've only got as far as implementing audio and run into this issue - seems like it would happen to video as well.


Shai Almog

unread,
May 13, 2015, 12:23:23 AM5/13/15
to codenameone...@googlegroups.com, nickk...@gmail.com, nickk...@gmail.com
Can you provide the URL's you get as a result and the stack trace for the illegal argument?

nickk...@gmail.com

unread,
May 13, 2015, 12:39:29 AM5/13/15
to codenameone...@googlegroups.com, nickk...@gmail.com
Sure:

Return value from 

path = Capture.captureAudio():
[EDT] 0:0:22,531 - Capture Audio Path: file://home/nick/Downloads/Wharekai.mp3

MediaManager.createMedia(path,false):

java.lang.IllegalArgumentException: uri.getScheme() == null!
at com.sun.media.jfxmedia.locator.Locator.<init>(Locator.java:217)
at javafx.scene.media.Media.<init>(Media.java:369)
at com.codename1.impl.javase.JavaSEPort$CodenameOneMediaPlayer.<init>(JavaSEPort.java:6062)
at com.codename1.impl.javase.JavaSEPort$51.run(JavaSEPort.java:4921)
at com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:182)
at com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:179)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl$4.run(PlatformImpl.java:179)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:76)
at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
at com.sun.glass.ui.gtk.GtkApplication$3$1.run(GtkApplication.java:89)
at java.lang.Thread.run(Thread.java:745)
[EDT] 0:0:23,842 - Exception: java.io.IOException - java.lang.RuntimeException: java.lang.IllegalArgumentException: uri.getScheme() == null!
java.io.IOException: java.lang.RuntimeException: java.lang.IllegalArgumentException: uri.getScheme() == null!
at com.codename1.impl.javase.JavaSEPort.createMedia(JavaSEPort.java:4941)
at com.codename1.ui.Display.createMedia(Display.java:2836)
at com.codename1.media.MediaManager.createMedia(MediaManager.java:80)
at com.codename1.media.MediaManager.createMedia(MediaManager.java:50)
at com.handover.app.AddTaskBuilder$3$1.actionPerformed(AddTaskBuilder.java:97)
at com.codename1.ui.util.EventDispatcher.fireActionSync(EventDispatcher.java:444)
at com.codename1.ui.util.EventDispatcher.fireActionEvent(EventDispatcher.java:350)
at com.codename1.ui.Button.fireActionEvent(Button.java:395)
at com.codename1.ui.Button.released(Button.java:426)
at com.codename1.ui.Button.pointerReleased(Button.java:514)
at com.codename1.ui.Form.pointerReleased(Form.java:2384)
at com.codename1.ui.Dialog.pointerReleased(Dialog.java:1715)
at com.codename1.ui.Form.pointerReleased(Form.java:2320)
at com.codename1.ui.Dialog.pointerReleased(Dialog.java:1715)
at com.codename1.ui.Component.pointerReleased(Component.java:2743)
at com.codename1.ui.Display.handleEvent(Display.java:1966)
at com.codename1.ui.Display.edtLoopImpl(Display.java:1058)
at com.codename1.ui.Display.invokeAndBlock(Display.java:1193)
at com.codename1.ui.Display.invokeAndBlock(Display.java:1228)
at com.codename1.ui.Form.showModal(Form.java:1644)
at com.codename1.ui.Dialog.showModal(Dialog.java:1089)
at com.codename1.ui.Dialog.show(Dialog.java:470)
at com.codename1.ui.Dialog.showPackedImpl(Dialog.java:1409)
at com.codename1.ui.Dialog.showPacked(Dialog.java:1294)
at com.handover.app.AddTaskBuilder$TaskDialogListener.actionPerformed(AddTaskBuilder.java:223)
at com.codename1.ui.util.EventDispatcher.fireActionSync(EventDispatcher.java:444)
at com.codename1.ui.util.EventDispatcher.fireActionEvent(EventDispatcher.java:350)
at com.codename1.ui.Button.fireActionEvent(Button.java:395)
at com.codename1.ui.Button.released(Button.java:426)
at com.codename1.ui.Button.pointerReleased(Button.java:514)
at com.codename1.ui.Form.pointerReleased(Form.java:2384)
at com.codename1.ui.Form.pointerReleased(Form.java:2320)
at com.codename1.ui.Component.pointerReleased(Component.java:2743)
at com.codename1.ui.Display.handleEvent(Display.java:1966)
at com.codename1.ui.Display.edtLoopImpl(Display.java:1058)
at com.codename1.ui.Display.mainEDTLoop(Display.java:989)
at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120)
at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)
Caused by: java.lang.RuntimeException: java.lang.IllegalArgumentException: uri.getScheme() == null!
at com.codename1.impl.javase.JavaSEPort$CodenameOneMediaPlayer.<init>(JavaSEPort.java:6070)
at com.codename1.impl.javase.JavaSEPort$51.run(JavaSEPort.java:4921)
at com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:182)
at com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:179)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl$4.run(PlatformImpl.java:179)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:76)
at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
at com.sun.glass.ui.gtk.GtkApplication$3$1.run(GtkApplication.java:89)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalArgumentException: uri.getScheme() == null!
at com.sun.media.jfxmedia.locator.Locator.<init>(Locator.java:217)
at javafx.scene.media.Media.<init>(Media.java:369)
at com.codename1.impl.javase.JavaSEPort$CodenameOneMediaPlayer.<init>(JavaSEPort.java:6062)
... 9 more

Alternatively with the same path I can try:
InputStream is = FileSystemStorage.getInstance().openInputStream(path);
MediaManager.createMedia(is, "audio/mpeg");

Which has this error:
[EDT] 0:0:38,593 - Capture Audio Path: file://home/nick/Downloads/Wharekai.mp3
[EDT] 0:0:38,593 - Exception: java.io.FileNotFoundException - /home/nick/.cn1/nick/Downloads/Wharekai.mp3 (No such file or directory)
java.io.FileNotFoundException: /home/nick/.cn1/nick/Downloads/Wharekai.mp3 (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:146)
at java.io.FileInputStream.<init>(FileInputStream.java:101)
at com.codename1.impl.javase.JavaSEPort.openFileInputStream(JavaSEPort.java:5688)
at com.codename1.io.FileSystemStorage.openInputStream(FileSystemStorage.java:273)
at com.handover.app.AddTaskBuilder$3$1.actionPerformed(AddTaskBuilder.java:99)
at com.codename1.ui.util.EventDispatcher.fireActionSync(EventDispatcher.java:444)
at com.codename1.ui.util.EventDispatcher.fireActionEvent(EventDispatcher.java:350)
at com.codename1.ui.Button.fireActionEvent(Button.java:395)
at com.codename1.ui.Button.released(Button.java:426)
at com.codename1.ui.Button.pointerReleased(Button.java:514)
at com.codename1.ui.Form.pointerReleased(Form.java:2384)
at com.codename1.ui.Dialog.pointerReleased(Dialog.java:1715)
at com.codename1.ui.Form.pointerReleased(Form.java:2320)
at com.codename1.ui.Dialog.pointerReleased(Dialog.java:1715)
at com.codename1.ui.Component.pointerReleased(Component.java:2743)
at com.codename1.ui.Display.handleEvent(Display.java:1966)
at com.codename1.ui.Display.edtLoopImpl(Display.java:1058)
at com.codename1.ui.Display.invokeAndBlock(Display.java:1193)
at com.codename1.ui.Display.invokeAndBlock(Display.java:1228)
at com.codename1.ui.Form.showModal(Form.java:1644)
at com.codename1.ui.Dialog.showModal(Dialog.java:1089)
at com.codename1.ui.Dialog.show(Dialog.java:470)
at com.codename1.ui.Dialog.showPackedImpl(Dialog.java:1409)
at com.codename1.ui.Dialog.showPacked(Dialog.java:1294)
at com.handover.app.AddTaskBuilder$TaskDialogListener.actionPerformed(AddTaskBuilder.java:226)
at com.codename1.ui.util.EventDispatcher.fireActionSync(EventDispatcher.java:444)
at com.codename1.ui.util.EventDispatcher.fireActionEvent(EventDispatcher.java:350)
at com.codename1.ui.Button.fireActionEvent(Button.java:395)
at com.codename1.ui.Button.released(Button.java:426)
at com.codename1.ui.Button.pointerReleased(Button.java:514)
at com.codename1.ui.Form.pointerReleased(Form.java:2384)
at com.codename1.ui.Form.pointerReleased(Form.java:2320)
at com.codename1.ui.Component.pointerReleased(Component.java:2743)
at com.codename1.ui.Display.handleEvent(Display.java:1966)
at com.codename1.ui.Display.edtLoopImpl(Display.java:1058)
at com.codename1.ui.Display.mainEDTLoop(Display.java:989)
at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120)
at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)

nickk...@gmail.com

unread,
May 13, 2015, 12:43:46 AM5/13/15
to codenameone...@googlegroups.com, nickk...@gmail.com
This code does work - looks like its the return from Capture.captureAudio maybe?

                  path = Capture.captureAudio();
                        path = StringUtil.replaceAll(path, "file://", "file:///");
                        try {
                            MediaManager.createMedia(path, false).play();
                        } catch (IOException ex) {
                            Log.e(ex);
                        }

Shai Almog

unread,
May 13, 2015, 11:40:56 AM5/13/15
to codenameone...@googlegroups.com, nickk...@gmail.com, nickk...@gmail.com
Thanks. We'll try to fix it for the next update.
Reply all
Reply to author
Forward
0 new messages