wake-up-neo.com

Der Android MediaPlayer benötigt lange Vorbereitungs- und Pufferzeiten

Meine Anwendung benötigt lange Zeit, um einen Audiostream vorzubereiten und zu puffern. Ich habe diese Frage gelesen Warum dauert es so lange, bis der MediaPlayer von Android einige Livestreams für die Wiedergabe vorbereitet? , obwohl es nur heißt, dass Leute dieses Problem erfahren haben, sagt es nicht, wie man das Problem verbessern kann.

Ich erlebe dies in allen Android-Versionen, getestet von 2.2 - 4.1.2.

Die Streams haben eine geeignete Bitrate für Mobilfunk- und 3G-Verbindungen. Derselbe Stream benötigt weniger als eine Sekunde, um die Pufferung in der entsprechenden iOS-App zu starten.

Gibt es eine Möglichkeit, die Zeit anzugeben, die gepuffert werden soll? Ich weiß, dass die Radio-Anwendung Tune In diese Funktion bietet ( https://play.google.com/store/apps/details?id=tunein.player ).

Vielen Dank.

Edit: Ich habe es erneut getestet und festgestellt, dass dies nur auf Geräten mit Gingerbread und höher (> = 2.3) der Fall ist. Ich weiß, dass Android das zugrunde liegende Framework von OpenCore zu StageFright geändert hat. Wie kann ich also das Mediengerüst optimieren? Es ist einfach falsch, dass das alte HTC Wildfire sich vorbereiten, streamen und abspielen lässt, buchstäblich 10-mal schneller als das brandneue HTC One X und Nexus 7.

23
SteveEdson

Ich habe seit Monaten mit dieser Frage zu kämpfen. Endlich habe ich die Lösung gefunden.

Das eigentliche Problem liegt in der Implementierung der MediaPlayer-Klasse. Insbesondere bei der Art und Weise, wie der MediaPlayer die Daten puffert. Aus diesem Grund können Sie Ihre eigene Pufferung erstellen, in einer temporären Datei speichern und diese dem MediaPlayer zuführen.

Dieses Tutorial und der Quellcode erklären genau wie. http://androidstreamingtut.blogspot.nl/2012/08/custom-progressive-audio-streaming-with.html

Durch die Anpassung dieses Codes ist es einfach, einen viel besseren Streaming-Player zu erstellen.

Google-Entwickler haben hier wirklich versagt.

EDIT: Diese Antwort ist ziemlich alt. Heute würde ich empfehlen, MediaPlayer nicht zu verwenden und stattdessen ExoPlayer zu verwenden. Es ist erweiterbar, stabil und kann viele verschiedene Medientypen abspielen. Sie finden es hier: https://github.com/google/ExoPlayer/

Sie können nicht viel tun, da die Android MediaPlayer-Klasse keinen Zugriff auf niedrigere Einstellungen wie die Puffergröße bietet. Die einzige Alternative wäre, einen eigenen Player mit AudioTrack und einer Bibliothek wie FFmpeg für die Dekodierung zu erstellen.

9
William Seemann

Eine Sache, die ich empfehlen würde, ist, mit der Kodierung herumzuspielen. Stellen Sie beispielsweise für MP4s sicher, dass sich der MOOV-Atom am Anfang der Datei befindet (es gibt genügend Fragen zu S/O, wie dies mit ffmpeg usw. geschehen soll). Mit MP3s können Sie beispielsweise verschiedene Codecs oder Bitraten anzeigen.

Sie können beispielsweise eine Reihe von Audiodateien ausprobieren, die Sie online finden, und wenn Sie eine sehen, deren Pufferung nicht lange dauert, versuchen Sie, Ihre Dateien auf dieselbe Weise zu kodieren.

0
ajacian81