AAC abspielen

Seppl22

Mitglied
Hallo,
ich versuche gerade mit JAAD AAC-Streams abzuspielen. Dafür habe ich folgende Mehtode:

Java:
public void play(File[] files) {

        try {
            // for-next loop to play each titel from the playlist once
            for (currentTrack = 0; currentTrack < files.length; currentTrack++) {
                InputStream in = url.openStream();
//                InputStreamReader isr = new InputStreamReader(in);
//                BufferedReader br = new BufferedReader(isr);
//                String zeile = br.readLine();
//                while (zeile != null) {
//                    System.err.println(zeile);
//                    zeile = br.readLine();
//                }

                cont = new MP4Container(in);// open titel with random access
                movie = cont.getMovie();                          // get content from container,
                List<Track> content = movie.getTracks();
                System.err.println(content.isEmpty());
                if (content.isEmpty())// check if container HAS content
                    throw new Exception("content is empty");  // if so,
                track = (AudioTrack) movie.getTracks().get(0);// grab first track and set the audioformat
                af = new AudioFormat(track.getSampleRate(), track.getSampleSize(), track.getChannelCount(), true, true);
                line = AudioSystem.getSourceDataLine(af);        // get a DataLine from the AudioSystem
                line.open();                                        // open and
                line.start();                                       // start it

                dec = new Decoder(track.getDecoderSpecificInfo());

                buf = new SampleBuffer();
                while (track.hasMoreFrames())                // while we have frames left
                {
                    frame = track.readNextFrame();          // read next frame,
                    dec.decodeFrame(frame.getData(), buf);  // decode it and put into the buffer
                    b = buf.getData();                      // write the frame data from the buffer to our byte-array
                    line.write(b, 0, b.length);             // and from there write the byte array into our open AudioSystem DataLine

                    while (paused)                  // check if we should pause
                    {
                        Thread.sleep(500);          // if yes, stay half a second

                        if (Thread.interrupted())   // check if we should stop possibly
                        {
                            line.close();           // if yes, close line and
                            return;                 // exit thread
                        }
                    }

                    if (Thread.interrupted())       // if not in pause, still check on each frame if we should
                    {                               // stop. If so
                        line.close();               // close line and
                        return;                     // exit thread
                    }
                }

                line.close();           // after titel is over, close line

                if (loop)               // if we should loop current titel, set currentTrack -1,
                    currentTrack--;     // as on bottom of for-next it get's +1 and so the same titel get's played again
                else if (repeat && (currentTrack == files.length - 1)) // else check if we are at the end of the playlist
                    currentTrack = -1;  // and should repeat the whole list. If so, set currentTrack -1, so it get's 0 on for-next bottom
            }
        } catch (LineUnavailableException | IOException | InterruptedException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }

Der Stream hinter der URL lautet:
http://streams.bigfm.de/bigfm-deutschland-128-aac?usid=0-0-H-A-D-30

Ich übergebe der Methode ein FileArray der Größe 1. Leider kommt der Code nicht weiter als cont = new MP4Container(in).
Wenn ich mir über den auskommentierten BufferedReader den Stream der URL ausgeben lasse, bekomme ich Daten (allerdings stellt die Konsole nur kryptische Zeichen da, was ich bei AAC mal als 'positiv' werte).
Wenn ich dem MP4-Container eine MP4-Datei übegebe (als RandomAccessFile), funktioniert es. Ich höre da zwar auch kein Audio, aber ich komme immerhin in die while-Schleife.
Laut der Doku von JAAD akzeptiert der Mp4-Container aber auch einen InputStream.
Kennt sich jemand mit JAAD aus und kann hier weiterhelfen? Oder kennt jemand eine ander Möglichkeit AAC aus einem Webstream abzuspielen?
 

httpdigest

Top Contributor
Oder kennt jemand eine ander Möglichkeit AAC aus einem Webstream abzuspielen?
Muss es denn ein selbstgeschriebenes Programm und/oder ein Java-Programm sein? Oder brauchst du einfach nur irgendein Programm, um diesen Stream abspielen, weil du ihn einfach nur hören willst und nicht irgendwie weiterverarbeiten willst?
Also: Was willst du denn mit dem Stream dann machen?
 

Seppl22

Mitglied
Es muss ein Java Programm sein und ich möchte den Stream in meiner Anwendung abspielen, sprich dekorieren und an die Soundkarte geben.
Edit: mein webradio soll Mp3 und AAC abspielen und aufnehmen können von daher wäre die Weiterverarbeitung später mal das Schreiben in eine lokale Datei .
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
Auf den ersten Blick würde ich sagen, MP4Container liest den InputStream bis zum Ende ein, was bei einem Stream erstmal nicht kommt.
 

Seppl22

Mitglied
Auf den ersten Blick würde ich sagen, MP4Container liest den InputStream bis zum Ende ein, was bei einem Stream erstmal nicht kommt.
Das habe ich jetzt auch rausgefunden. Dan sollte JAAD aber nicht behaupten es komme mit allen InputStreams klar :D.
Ich werde noch etwas mit dem AAC Decoder rumprobieren vielleicht bekomme ich ja tatsächlich noch Ton
 

mrBrown

Super-Moderator
Mitarbeiter
Naja, endlos-Streams dürften eben ein Sonderfall, und nicht der Normalfall sein, das ist schon verständlich, dass sie nicht extra drauf eingehen ;)
 

Seppl22

Mitglied
"It can read MP4 container from almost every input-stream (files, network sockets etc.) and decode AAC-LC (Low Complexity) and HE-AAC (High Efficiency/AAC+)."
:D
 

Seppl22

Mitglied
Ich habe es jetzt geschafft, nachdem ich das git von JAAD durchgeschaut habe und mir an verschiedenen Stellen was abgekuckt habe. Allerdings 'ruckelt' die Wiedergabe, wie wenn nur jedes zweite Zeichen 'interpretiert' werden würde.
Hier der Code:
Code:
public class AACPlayer extends AbstractPlayer implements Runnable {
    private Thread runnerThread = new Thread(this);
    @Override
    public void stop() {
        stop = true;
        GUIHandler.getInstance().resetComponents();
    }

    @Override
    public void play() {
        stop = false;
        if(!runnerThread.isAlive()) {
            runnerThread.start();
        }
    }

    @Override
    public void setUrl(URL url) {
        this.url = url;
    }

    @Override
    public void run() {
        decodeAndPlayAAC();
    }

    private void decodeAndPlayAAC() {
        SourceDataLine line = null;
        byte[] b;
        try {
            isPlaying = true;
            final ADTSDemultiplexer adts = new ADTSDemultiplexer(url.openStream());
            final Decoder dec = new Decoder(adts.getDecoderSpecificInfo());
            final SampleBuffer buf = new SampleBuffer();
            while(!stop) {
                b = adts.readNextFrame();
                dec.decodeFrame(b, buf);

                if(line==null) {
                    final AudioFormat aufmt = new AudioFormat(buf.getSampleRate(), buf.getBitsPerSample(), buf.getChannels(), true, true);
                    line = AudioSystem.getSourceDataLine(aufmt);
                    line.open();
                    line.start();
                }
                b = buf.getData();
                line.write(b, 0, b.length);
            }
        } catch (LineUnavailableException e) {
            e.printStackTrace();
        } catch (AACException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(line!=null) {
                line.stop();
                line.close();
                isPlaying = false;
            }
        }
    }
}
Um das Problem zu hören, gerne mal die decodeAAC in die main kopieren und die URL mit http://streams.bigfm.de/bigfm-charts-128-aac?usid=0-0-H-A-D-30 setzen und reinhören.
Wenn mir da noch jemand helfen könnte wäre es top. Ich gehe mal davon aus, dass der Puffer einfach nicht groß genug ist.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Audio Track einer Musik CD abspielen mittels vlcj-Bibliothek Spiele- und Multimedia-Programmierung 0
P .Wav Datei vor main-Methode abspielen? Spiele- und Multimedia-Programmierung 9
MABY Eine mp3 Datei in Java abspielen Spiele- und Multimedia-Programmierung 14
S Sounds abspielen Spiele- und Multimedia-Programmierung 11
Blender3D VLCJ Video lässt sich nicht mehr abspielen nach mysql Installation Spiele- und Multimedia-Programmierung 1
K Sound im loop abspielen, wenn boolscher wert true ist Spiele- und Multimedia-Programmierung 3
J Musik abspielen Spiele- und Multimedia-Programmierung 11
C Midi abspielen und Listener anmelden? Spiele- und Multimedia-Programmierung 1
I Sound Dateien abspielen Spiele- und Multimedia-Programmierung 9
C Sound einfügen und abspielen Spiele- und Multimedia-Programmierung 6
H wma Datei abspielen: java.io.IOException: Resetting to invalid mark Spiele- und Multimedia-Programmierung 11
F Einen Sound mit veränderter Tonhöhe und Geschwindigkeit abspielen - Hilfe erbeten Spiele- und Multimedia-Programmierung 29
F Problem mit dem Abspielen von byte[] (Audioprogrammierung) Spiele- und Multimedia-Programmierung 2
C Problem mit Abspielen von Audio-Dateien Spiele- und Multimedia-Programmierung 3
S Sounds abspielen, ohne sie jedesmal neu zu laden Spiele- und Multimedia-Programmierung 8
F WAV Abspielen Spiele- und Multimedia-Programmierung 15
P Video in JAVA abspielen,... Spiele- und Multimedia-Programmierung 3
T Sound schneller abspielen Spiele- und Multimedia-Programmierung 4
S Uneffizientes Abspielen von Sounds?! Spiele- und Multimedia-Programmierung 4
Guybrush Threepwood Beste Möglichkeit zum Abspielen von MP3 Spiele- und Multimedia-Programmierung 3
StrikeTom .gif animation als image abspielen Spiele- und Multimedia-Programmierung 2
W CannotRealizeException (jmf) beim abspielen eines liedes Spiele- und Multimedia-Programmierung 3
P Sound auf zwei Lautsprechern getrennt abspielen Spiele- und Multimedia-Programmierung 9
A wav datei aus jar Abspielen Spiele- und Multimedia-Programmierung 7
N Totaler Absturz beim mehrmaligen Abspielen von Sounds Spiele- und Multimedia-Programmierung 5
N bei abspielen der wav datei fehler Spiele- und Multimedia-Programmierung 6
H JMF - Video Abspielen Spiele- und Multimedia-Programmierung 12
R Wave-Datei mit JLayer abspielen Spiele- und Multimedia-Programmierung 4
B videos abspielen Spiele- und Multimedia-Programmierung 2
B Frage zum Abspielen von Sounddateien Spiele- und Multimedia-Programmierung 2
0 Crashes beim Abspielen von Sounds unter Win98 Spiele- und Multimedia-Programmierung 12
G Abspielen von Sounds in Java3D Spiele- und Multimedia-Programmierung 13

Ähnliche Java Themen

Neue Themen


Oben