Frage

Ich versuche, das folgende Problem in Android Openles umzugehen.

Die Openles Spec sagt Folgendes:

http://www.khronos.org/registry/sles/ Specs / opensl_es_specification_1.0.1.pdf - 8.12

wenn sich der Player im SL_PlayState_Playing-Status befindet, der ist von der SLLPLAYITF-Schnittstelle gesteuert [siehe Abschnitt 8.32], Hinzufügen Puffer starten implizit die Wiedergabe. Im Falle von Hunger fällig In unzureichenden Puffern in der Warteschlange stoppt das Spiel von Audiodaten. Der Player bleibt im SL_PlayState_Playing-Status. Nach der Warteschlange von Zusätzliche Puffer, das Spielen von Audiodaten setzt fort. Beachten Sie, dass Hunger von Warteschlangenpuffern verursacht hörbare Lücken in den Audiodaten Strom. In dem Fall, in dem der Spieler nicht im Spielzustand ist, Die Zugabe von Puffern startet keine Audiowiedergabe.

Alas, sobald wir an Android gelangen:

http://mobilepearls.com/Labs/ Native-Android-API / NDK / docs / openles / index.html - Decodieren Sie Audio an PCM

In Abhängigkeit von der Platform-Implementierung erfordert das Dekodieren möglicherweise Ressourcen, die nicht inaktiv bleiben können. Daher wird es nicht empfohlen hungern Sie den Decoder, indem Sie keine ausreichende Anzahl von leerem angeben PCM-Puffer, z.B. Durch Rückkehr von der Android-einfachen Pufferwarteschlange Rückruf, ohne einen anderen leeren Puffer zu neigen. Das Ergebnis von Decoder Hunger ist nicht spezifiziert; Die Implementierung kann wählen Entweder die dekodierten PCM-Daten löschen, den Decodiervorgang anhalten oder in schwere Fälle kündigen den Decoder.

Dieses nicht spezielle Verhalten hat den Fortschritt auf meinem Projekt vollständig angehalten, und ich bin so verloren, wie man am besten um es herum arbeitet. Die Dekodierung der gesamten Datei in PCM im Speicher oder auf der Festplatte ist keine Option, ich brauche dies wirklich, um eine Streaming-Lösung zu sein. Jede Hilfe hierfür würde massiv geschätzt werden

War es hilfreich?

Lösung

Es scheint nicht zu diesem Thema ein Weg zu sein.Andere Projekte scheinen die APIs der niedrigeren Ebene (z. B. LibstageFright) zu verwenden, um ihre Dekodierung durchzuführen.Mit dieser Methode können Sie mit den Daten erhalten

[edit] Es gibt keinen Weg um das Hungerproblem.Android haftet einfach nicht an die Spezifikation.Grundsätzlich müssen Sie in den Speicher einpuffert werden, und stellen Sie sicher, dass Sie Pause verwenden und auf der Dekodierung fortsetzen, wenn Sie den Durchfluss der Daten steuern müssen.

Dies ist eine Diskussion über das Thema in der NDK-Google-Gruppe

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top