- Forum-Beiträge: 2
10.05.2016, 18:27:15 via Website
10.05.2016 18:27:15 via Website
Hey!
Ich bin dabei eine App zu entwickeln, die einen AAC Audio Stream von Gstreamer empfängt, diesen decodiert und abspielt.
Meine Pipeline in Gstreamer sieht folgendermaßen aus:
gst-launch-1.0 audiotestsrc ! faac "bitrate=64000" ! "audio/mpeg, mpegversion=4, rate = 44100, channels = 1" ! mux. mpegtsmux name=mux! udpsink host=224.0.0.1 port=8001
Diese codiert den Audio Stream in AAC LC als mp4 mit einer Bitrate von 64000, einer SampleRate von 44100 und einem Channel in einen mpeg ts container.
Meinen Decoder initialisiere ich mit folgendem Code:
format.setString(MediaFormat.KEY_MIME, "audio/mp4a-latm");
format.setInteger(MediaFormat.KEY_CHANNEL_COUNT, 1);
format.setInteger(MediaFormat.KEY_SAMPLE_RATE, 44100);
format.setInteger(MediaFormat.KEY_BIT_RATE, 64 * 1024);
format.setInteger(MediaFormat.KEY_AAC_PROFILE, MediaCodecInfo.CodecProfileLevel.AACObjectLC);
format.setInteger(MediaFormat.KEY_IS_ADTS, 1);
byte[] bytes = new byte[]{(byte) 0x11, (byte)0x90};
ByteBuffer bb = ByteBuffer.wrap(bytes);
format.setByteBuffer("csd-0", bb);
Habe es auch schon ohne die Zeile "MediaFormat.KEY_IS_ADTS" probiert, es kommt zum selben Fehler.
Das ist der Code meines Decoders:
while (!stopTrack) {
multicastSocket.receive(packet);
decoder.start();
data = packet.getData();
inputBuffers = decoder.getInputBuffers();
outputBuffers = decoder.getOutputBuffers();
inputBufferIndex = decoder.dequeueInputBuffer(-1);
if (inputBufferIndex >= 0)
{
inputBuffer = inputBuffers[inputBufferIndex];
inputBuffer.clear();
inputBuffer.put(data);
decoder.queueInputBuffer(inputBufferIndex, 0, data.length, 0, 0);
}
bufferInfo = new MediaCodec.BufferInfo();
outputBufferIndex = decoder.dequeueOutputBuffer(bufferInfo, 0);
while (outputBufferIndex >= 0)
{
outputBuffer = outputBuffers[outputBufferIndex];
outputBuffer.position(bufferInfo.offset);
outputBuffer.limit(bufferInfo.offset + bufferInfo.size);
outData = new byte[bufferInfo.size];
outputBuffer.get(outData);
Log.d("AudioDecoder", outData.length + " bytes decoded");
track.write(outData, 0, outData.length);
decoder.releaseOutputBuffer(outputBufferIndex, false);
outputBufferIndex = decoder.dequeueOutputBuffer(bufferInfo, 0);
}
Ich erhalte folgende Fehlermeldung:
W/SoftAAC2: aacDecoder_DecodeFrame decoderErr = 0x4004
W/SoftAAC2: AAC decoder returned error 0x4004, substituting silence
I/SoftAAC2: Reconfiguring decoder: 0->48000 Hz, 0->0 channels
E/AndroidRuntime: FATAL EXCEPTION: Thread-374583
Wenn ich den Audio Stream in eine Datei speichere ist er abspielbar! Das Problem sollte also nicht beim Empfangen sondern beim Decoder liegen.
Ich bin für jede Hilfe dankbar
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.