problem getting mp3spi working with dynamic/static weaving
----------------------------------------------------------
Key: ARIES-780
URL: https://issues.apache.org/jira/browse/ARIES-780
Project: Aries
Issue Type: Question
Components: Subsystem
Affects Versions: parent-0.4.0
Environment: win7 x64, apache felix 4.0.1 and equinox 3.7.1
Reporter: oliver z
Priority: Minor
I'm trying to build a modular player for sites like jamendo. The problem is
that the streaming format is in mp3 (or ogg sometimes). The librarys providing
such support try to use the SPI mechanism of the JRE which is a problem in OSGi
environments.
So i'm really happy that this is adressed with SPI Fly - but its somehow not
working for me.
I tried the dynamic weaving:
added the asm bundle and the spi fly dynamic weaving bundle in the "bundle" dir
of apache felix (works fine, lb shows me that both bundles are running)
ID|State |Level|Name
0|Active | 0|System Bundle (4.0.1)
1|Active | 1|ASM all classes (3.2.0)
2|Active | 1|json simple OSGi Bundle (1.0.0.SNAPSHOT)
3|Active | 1|Mp3Wrapper OSGi Bundle (1.0.0.SNAPSHOT)
4|Active | 1|Apache Aries SPI Fly Dynamic Weaving Bundle
(0.4.0.SNAPSHOT)
the mp3wrapper contains the spi providers (mp3spi, tritounus share etc. for
playing mp3 files - they replace AudioInputStream and some others), so i added
in the MANIFEST.MF in mp3wrapper the following header:
SPI-Provider: *
the consumer is my playerengine bundle which contains the following line in its
manifest:
SPI-Consumer: *
when i start the OSGi container i get the following:
[BROWSER]: Standard Gui (Browser) registered.
@@@ 1: <init>#()V#null~null
### 183: java/lang/Object#<init>#()V
@@@ 1: start#(Lorg/osgi/framework/BundleContext;)V#null~[java/lang/Exception]
### 183:
org/dyndns/soundi/soundboxplayerengine/DefaultPlayerEngine#<init>#(Lorg/osgi/framework/BundleContext;)V
### 182:
org/dyndns/soundi/portals/interfaces/CommunicationAction#toString#()Ljava/lang/String;
### 182:
org/dyndns/soundi/portals/interfaces/CommunicationAction#toString#()Ljava/lang/String;
### 183: java/util/Hashtable#<init>#()V
### 182:
java/util/Dictionary#put#(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
### 182: java/lang/Class#getName#()Ljava/lang/String;
### 182: java/lang/Class#getName#()Ljava/lang/String;
### 185:
org/osgi/framework/BundleContext#registerService#([Ljava/lang/String;Ljava/lang/Object;Ljava/util/Dictionary;)L
org/osgi/framework/ServiceRegistration;
### 184:
org/dyndns/soundi/utils/Util#sendMessage#(Lorg/dyndns/soundi/utils/Util$Component;Ljava/lang/String;)V
@@@ 1: stop#(Lorg/osgi/framework/BundleContext;)V#null~[java/lang/Exception]
@@@ 0: <init>#(Lorg/osgi/framework/BundleContext;)V#null~null
### 183: java/lang/Object#<init>#()V
@@@ 1:
play#(Ljava/io/InputStream;Lorg/dyndns/soundi/portals/interfaces/Song;)V#null~null
### 184:
javax/sound/sampled/AudioSystem#getAudioFileTypes#()[Ljavax/sound/sampled/AudioFileFormat$Type;
### 182:
javax/sound/sampled/AudioFileFormat$Type#getExtension#()Ljava/lang/String;
### 182: java/io/PrintStream#println#(Ljava/lang/String;)V
### 183: java/io/BufferedInputStream#<init>#(Ljava/io/InputStream;)V
### 184:
javax/sound/sampled/AudioSystem#getAudioInputStream#(Ljava/io/InputStream;)Ljavax/sound/sampled/AudioInputStrea
m;
### 182: java/lang/Class#getName#()Ljava/lang/String;
### 184:
java/util/logging/Logger#getLogger#(Ljava/lang/String;)Ljava/util/logging/Logger;
### 182:
java/util/logging/Logger#log#(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Throwable;)V
### 182: java/lang/Class#getName#()Ljava/lang/String;
### 184:
java/util/logging/Logger#getLogger#(Ljava/lang/String;)Ljava/util/logging/Logger;
### 182:
java/util/logging/Logger#log#(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Throwable;)V
### 182:
javax/sound/sampled/AudioInputStream#getFormat#()Ljavax/sound/sampled/AudioFormat;
### 182: javax/sound/sampled/AudioFormat#getSampleRate#()F
### 182: javax/sound/sampled/AudioFormat#getChannels#()I
### 182: javax/sound/sampled/AudioFormat#getChannels#()I
### 182: javax/sound/sampled/AudioFormat#getSampleRate#()F
### 183:
javax/sound/sampled/AudioFormat#<init>#(Ljavax/sound/sampled/AudioFormat$Encoding;FIIIFZ)V
### 184:
javax/sound/sampled/AudioSystem#getAudioInputStream#(Ljavax/sound/sampled/AudioFormat;Ljavax/sound/sampled/Audi
oInputStream;)Ljavax/sound/sampled/AudioInputStream;
### 183:
org/dyndns/soundi/soundboxplayerengine/DefaultPlayerEngine#rawplay#(Ljavax/sound/sampled/AudioFormat;Ljavax/sou
nd/sampled/AudioInputStream;Lorg/dyndns/soundi/portals/interfaces/Song;)V
@@@ 1: pause#()V#null~null
@@@ 1: stop#()V#null~null
@@@ 1: handleEvent#(Lorg/osgi/service/event/Event;)V#null~null
@@@ 2:
rawplay#(Ljavax/sound/sampled/AudioFormat;Ljavax/sound/sampled/AudioInputStream;Lorg/dyndns/soundi/portals/interf
aces/Song;)V#null~null
### 183:
org/dyndns/soundi/soundboxplayerengine/DefaultPlayerEngine#getLine#(Ljavax/sound/sampled/AudioFormat;)Ljavax/so
und/sampled/SourceDataLine;
### 185: javax/sound/sampled/SourceDataLine#start#()V
### 185: javazoom/spi/PropertiesContainer#properties#()Ljava/util/Map;
### 185: java/util/Map#get#(Ljava/lang/Object;)Ljava/lang/Object;
### 182: java/lang/Long#longValue#()J
### 185: java/util/Map#get#(Ljava/lang/Object;)Ljava/lang/Object;
### 182: java/lang/Long#longValue#()J
### 182: javax/sound/sampled/AudioInputStream#read#([BII)I
### 185: javax/sound/sampled/SourceDataLine#write#([BII)I
### 185: javax/sound/sampled/SourceDataLine#drain#()V
### 185: javax/sound/sampled/SourceDataLine#stop#()V
### 185: javax/sound/sampled/SourceDataLine#close#()V
### 182: java/lang/Exception#printStackTrace#()V
@@@ 2:
getLine#(Ljavax/sound/sampled/AudioFormat;)Ljavax/sound/sampled/SourceDataLine;#null~[javax/sound/sampled/LineUna
vailableException]
### 183:
javax/sound/sampled/DataLine$Info#<init>#(Ljava/lang/Class;Ljavax/sound/sampled/AudioFormat;)V
### 184:
javax/sound/sampled/AudioSystem#getLine#(Ljavax/sound/sampled/Line$Info;)Ljavax/sound/sampled/Line;
### 185:
javax/sound/sampled/SourceDataLine#open#(Ljavax/sound/sampled/AudioFormat;)V
[PLAYERENGINE]: Default player engine registered!
so it does *something*, but it looks like errors. I got a reply that this is
just debugging output and the functionality should work.
But it does not. I wrote a little test in my playerengine bundle:
Type[] audioFileTypes = AudioSystem.getAudioFileTypes();
for(Type a : audioFileTypes)
{
System.out.println(a.getExtension());
}
if it would work, there should be:
wav (provided by JRE)
au (provided by JRE)
aif (provided by JRE)
mp3 (provided by mp3spi)
but the last one is missing, i cannot play mp3s, i get an exception:
13.11.2011 09:23:05 org.dyndns.soundi.soundboxplayerengine.DefaultPlayerEngine
play
SCHWERWIEGEND: null
javax.sound.sampled.UnsupportedAudioFileException: could not get audio input
stream from input stream
at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)
at
org.dyndns.soundi.soundboxplayerengine.DefaultPlayerEngine.play(DefaultPlayerEngine.java:47)
at
org.dyndns.soundi.soundbox.core.gui.PlayerFrame.play(PlayerFrame.java:217)
at
org.dyndns.soundi.soundbox.core.gui.PlayerFrame.handleEvent(PlayerFrame.java:194)
at
org.apache.felix.eventadmin.impl.tasks.HandlerTaskImpl.execute(HandlerTaskImpl.java:88)
maybe this is a bug? i'm not familiar with bytecode so i can't help nor go
deeper and check whats going on :(
the complete framework with my bundles and asm/dynamic weaving (running
example) can be downloaded here (2.3mb):
http://download.origo.ethz.ch/soundbox/3349/felix-framework-4.0.1.7z
thanks in advance
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira