- Problem des Typs „Klartext-HTTP-Traffic ist nicht zulässig“ beheben Fehler
- Beheben von "SSLHandshakeException", "CertPathValidatorException" und "ERR_CERT_AUTHORITY_INVALID" Fehler
- Warum sind einige Mediendateien nicht suchbar?
- Warum ist die Suche bei einigen MP3-Dateien ungenau?
- Warum ist die Suche in meinem Video langsam?
- Warum werden einige MPEG-TS-Dateien nicht abgespielt?
- Warum sind in einigen MPEG-TS-Dateien keine Untertitel vorhanden?
- Warum werden manche MP4-/FMP4-Dateien nicht korrekt wiedergegeben?
- Warum schlagen einige Streams mit dem HTTP-Antwortcode 301 oder 302 fehl?
- Warum schlagen einige Streams mit der Ausnahme „UndiscoverydInputFormatException“ fehl?
- Warum funktioniert „setWiedergabeParameters“ auf einigen Geräten nicht richtig?
- Was passiert, wenn der Zugriff auf den Player im falschen Thread erfolgt? Fehler bedeuten?
- Was kann ich tun, wenn die Meldung „Unerwartete Statuszeile: ICY 200 OK“ angezeigt wird?
- Wie kann ich abfragen, ob es sich bei dem wiedergegebenen Stream um einen Livestream handelt?
- Wie kann ich die Audiowiedergabe fortsetzen, wenn meine App im Hintergrund läuft?
- Warum unterstützt ExoPlayer meine Inhalte, die ExoPlayer Cast-Bibliothek jedoch nicht?
- Warum werden Inhalte nicht abgespielt, obwohl keine Fehlermeldung angezeigt wird?
- Wie kann ich eine Decodierungsbibliothek laden und für die Wiedergabe verwenden?
- Kann ich YouTube-Videos direkt mit ExoPlayer wiedergeben?
- Die Videowiedergabe ruckelt
- Instabile API-Lint-Fehler
Problem „Klartext-HTTP-Traffic ist nicht zulässig“ beheben Fehler
Dieser Fehler tritt auf, wenn Ihre App HTTP-Traffic im Klartext anfordert (d. h.
http://
statt https://
), wenn die Netzwerksicherheitskonfiguration aktiviert ist.
nicht erlauben. Wenn deine App auf Android 9 (API-Level 28) oder höher ausgerichtet ist: Klartext
HTTP-Traffic ist in der Standardkonfiguration deaktiviert.
Wenn Ihre App mit HTTP-Traffic im Klartext arbeiten muss, müssen Sie einen
Netzwerksicherheitskonfiguration, die dies zulässt. Weitere Informationen finden Sie in der
Dokumentation zur Netzwerksicherheit
. Um den gesamten HTTP-Datenverkehr im Klartext zu ermöglichen, fügen Sie
android:usesCleartextTraffic="true"
zum application
-Element des
AndroidManifest.xml
Die ExoPlayer-Demo-App verwendet die Standard-Netzwerksicherheitskonfiguration. Klartext-HTTP-Traffic wird nicht zugelassen. Du kannst es aktivieren, indem du der Anleitung folgst oben.
"SSLHandshakeException", "CertPathValidatorException" beheben und "ERR_CERT_AUTHORITY_INVALID" Fehler
SSLHandshakeException
, CertPathValidatorException
und
Alle ERR_CERT_AUTHORITY_INVALID
deuten auf ein Problem mit der SSL-Verschlüsselung des Servers hin.
Zertifikat. Diese Fehler sind nicht ExoPlayer-spezifisch. Weitere Informationen finden Sie unter
SSL-Dokumentation von Android
.
Warum sind einige Mediendateien nicht suchbar?
Standardmäßig unterstützt ExoPlayer die Suche in Medien nicht, wenn die einzige Methode für Bei einer genauen Suche muss der Spieler den Bereich scannen und indexieren. in der gesamten Datei. ExoPlayer stuft solche Dateien als nicht aufrufbar ein. Modernste Medien Container-Formate beinhalten Metadaten für die Suche (z. B. einen Beispielindex), haben einen einen klar definierten Suchalgorithmus (z. B. interpolierte Teilungssuche nach Ogg) oder weisen darauf hin, dass der Inhalt eine konstante Bitrate hat. Effiziente Suchfunktionen möglich und von ExoPlayer unterstützt.
Wenn Sie nach Inhalten suchen möchten, aber unleserliche Medien haben, empfehlen wir Ihnen, Ihre um ein geeigneteres Containerformat zu verwenden. Für MP3-, ADTS- und AMR-Dateien: können Sie auch die Suche aktivieren, vorausgesetzt, die Dateien haben eine konstante Bitrate, wie beschrieben hier.
Warum ist die Suche bei einigen MP3-Dateien ungenau?
MP3-Dateien mit variabler Bitrate (VBR) sind für Anwendungsfälle, in denen eine genaue Suche erfordern. Dafür gibt es zwei Gründe:
- Für eine exakte Suche bietet ein Containerformat im Idealfall eine präzise Time-to-Byte-Zuordnung in einem Header. Mit dieser Zuordnung kann ein Spieler zum entsprechenden Byte-Offset an und fordern Sie an, das Parsen und Abspielen von Medien mit diesem Offset. Die Überschriften, die für die diese Zuordnung in MP3-Dateien wie XING-Headern festlegen, sind ungenau.
- Für Containerformate, die keine genaue Time-to-Byte-Zuordnung bieten (oder einer Time-to-Byte-Zuordnung), können Sie trotzdem eine exakte Prüfen Sie, ob der Container absolute Beispielzeitstempel im Stream enthält. In In diesem Fall kann der Spieler die Suchzeit einer Schätzung der Byte-Offset, Medien-Absatz ab diesem Versatz anfordern, erste absoluten Beispiel-Zeitstempel und effektiv eine geführte Binärsuche durchführen bis das richtige Sample gefunden ist. MP3-Dateien werden nicht absolute Beispiel-Zeitstempel in den Stream zu integrieren. möglich.
Aus diesen Gründen kann eine genaue Suche nach einer VBR-MP3-Datei nur über
die gesamte Datei zu scannen und manuell eine Time-to-Byte-Zuordnung im
Player. Diese Strategie kann mit FLAG_ENABLE_INDEX_SEEKING
aktiviert werden,
der auf einem DefaultExtractorsFactory
festgelegt werden kann:
setMp3ExtractorFlags
Die Skalierung auf große MP3-Dateien ist nicht optimal,
vor allem, wenn der Nutzer versucht, das Ende des Streams kurz zu erreichen
Nach dem Start der Wiedergabe muss der Player warten, bis der Download abgeschlossen ist.
und indexiert den gesamten Stream
vor der Suche. In ExoPlayer
Geschwindigkeit statt Genauigkeit in diesem Fall zu optimieren.
FLAG_ENABLE_INDEX_SEEKING
ist daher standardmäßig deaktiviert.
Wenn Sie die Medien steuern, die gerade abgespielt werden, empfehlen wir Ihnen dringend, ein geeigneten Containerformat wie MP4. Es gibt keine uns bekannten Anwendungsfälle in dem MP3 die beste Wahl für das Medienformat ist.
Warum ist die Suche in meinem Video langsam?
Wenn der Player in einem Video zu einer neuen Wiedergabeposition springt, müssen zwei Dinge:
- Daten, die der neuen Wiedergabeposition entsprechen, in den Zwischenspeicher laden (Dies ist möglicherweise nicht erforderlich, wenn diese Daten bereits zwischengespeichert wurden.)
- Leeren Sie den Videodecoder und beginnen Sie vor der Decodierung aus dem I-Frame (Keyframe) der neuen Wiedergabeposition aufgrund der von den meisten Videos verwendeten Intra-Frame-Codierung Komprimierungsformaten. Damit die Suche genau ist, d. h. Wiedergabe exakt an der Suchposition beginnt), alle Frames zwischen der vorherige I-Frame und die Suchposition müssen decodiert werden verworfen (ohne auf dem Bildschirm angezeigt zu werden).
Die durch (1) verursachte Latenz kann entweder durch Erhöhung des Werts vom Player oder durch Pre-Caching der Daten auf der Festplatte im Arbeitsspeicher zwischengespeichert.
Die durch (2) verursachte Latenz kann entweder durch Reduzierung der Genauigkeit
der Suche mit ExoPlayer.setSeekParameters
oder eine Neucodierung des Videos
um häufigere I-Frames zu verwenden (was zu einer größeren Ausgabedatei führt).
Warum werden einige MPEG-TS-Dateien nicht abgespielt?
Einige MPEG-TS-Dateien enthalten keine AUDs (Access Unit Delimiter). Standardmäßig ExoPlayer nutzt AUDs, um Frame-Grenzen kostengünstig zu erkennen. Auch einige MPEG-TS-Dateien enthalten keine IDR-Keyframes. Standardmäßig sind dies die einzigen von ExoPlayer berücksichtigten Keyframes aus.
Der ExoPlayer scheint in der Pufferung zu hängen, wenn eine Aufforderung zur Wiedergabe eines
MPEG-TS-Datei ohne AUDs oder IDR-Keyframes Wenn Sie solche Dateien abspielen möchten,
können Sie dazu FLAG_DETECT_ACCESS_UNITS
und
FLAG_ALLOW_NON_IDR_KEYFRAMES
. Diese Flags können auf einer
DefaultExtractorsFactory
mit setTsExtractorFlags
oder auf einem
DefaultHlsExtractorFactory
mit dem
Konstruktor
Die Verwendung von FLAG_DETECT_ACCESS_UNITS
hat keine Nebeneffekte, außer dass
im Vergleich zur AUD-basierten Frame-Grenzenerkennung rechenintensiv. Verwendung von
FLAG_ALLOW_NON_IDR_KEYFRAMES
kann zu einer vorübergehenden Beschädigung der Darstellung am
Start der Wiedergabe und unmittelbar nach einer Suche bei der Wiedergabe einiger MPEG-TS-Dateien.
Warum werden in einigen MPEG-TS-Dateien keine Untertitel gefunden?
Einige MPEG-TS-Dateien enthalten CEA-608-Tracks, deklarieren diese aber nicht im
Containermetadaten, sodass ExoPlayer sie nicht erkennen kann. Sie können manuell
etwaige Untertiteltracks angeben,
indem du eine Liste der erwarteten
in DefaultExtractorsFactory
untertiteln, einschließlich der Bedienungshilfen
Kanäle, mit denen sie im MPEG-TS-Stream identifiziert werden können:
Kotlin
val extractorsFactory = DefaultExtractorsFactory() .setTsSubtitleFormats( listOf( Format.Builder() .setSampleMimeType(MimeTypes.APPLICATION_CEA608) .setAccessibilityChannel(accessibilityChannel) // Set other subtitle format info, such as language. .build() ) ) val player: Player = ExoPlayer.Builder(context, DefaultMediaSourceFactory(context, extractorsFactory)).build()
Java
DefaultExtractorsFactory extractorsFactory = new DefaultExtractorsFactory() .setTsSubtitleFormats( ImmutableList.of( new Format.Builder() .setSampleMimeType(MimeTypes.APPLICATION_CEA608) .setAccessibilityChannel(accessibilityChannel) // Set other subtitle format info, such as language. .build())); Player player = new ExoPlayer.Builder(context, new DefaultMediaSourceFactory(context, extractorsFactory)) .build();
Warum werden einige MP4-/FMP4-Dateien nicht korrekt wiedergegeben?
Einige MP4-/FMP4-Dateien enthalten Bearbeitungslisten, in denen die Medienzeitachse das Überspringen, Verschieben oder Wiederholen von Stichprobenlisten. ExoPlayer wird teilweise unterstützt zum Anwenden von Bearbeitungslisten. Sie können beispielsweise Stichprobengruppen verzögern oder wiederholen mit einem Synchronisierungsbeispiel beginnen, aber keine Audiobeispiele oder Pre-Roll-Medien für Bearbeitungen, die nicht bei einem Synchronisierungsbeispiel gestartet werden.
Wenn Sie feststellen, dass ein Teil des Mediums unerwartet fehlt oder wiederholt wird,
versuchen Sie, Mp4Extractor.FLAG_WORKAROUND_IGNORE_EDIT_LISTS
festzulegen oder
FragmentedMp4Extractor.FLAG_WORKAROUND_IGNORE_EDIT_LISTS
. Dies führt dazu, dass
wird der Extraktor die Bearbeitungslisten vollständig ignorieren. Diese können auf einem
DefaultExtractorsFactory
mit setMp4ExtractorFlags
oder
setFragmentedMp4ExtractorFlags
Warum schlagen einige Streams mit dem HTTP-Antwortcode 301 oder 302 fehl?
Die HTTP-Antwortcodes 301 und 302 weisen beide auf eine Weiterleitung hin. Kurze Beschreibungen finden Sie bei Wikipedia. Wenn ExoPlayer eine Anfrage sendet und eine mit dem Statuscode 301 oder 302, folgt er normalerweise der Weiterleitung, und starte die Wiedergabe wie gewohnt. In diesem Fall geschieht dies nicht standardmäßig, sind protokollübergreifende Weiterleitungen. Eine protokollübergreifende Weiterleitung leitet die Nutzer von HTTPS zu HTTP oder umgekehrt (oder seltener zwischen zwei Protokolle). Sie können testen, ob eine URL eine protokollübergreifende Weiterleitung verursacht: wget-Befehlszeilentool:
wget "https://yourserver.com/test.mp3" 2>&1 | grep Location
Die Ausgabe sollte in etwa so aussehen:
Location: https://second.com/test.mp3 [following]
Location: http://third.com/test.mp3 [following]
In diesem Beispiel gibt es zwei Weiterleitungen. Die erste Weiterleitung
https://yourserver.com/test.mp3
in https://second.com/test.mp3
. Beide sind
HTTPS. Es handelt sich also nicht um eine protokollübergreifende Weiterleitung. Die zweite Weiterleitung
https://second.com/test.mp3
in http://third.com/test.mp3
. Dadurch wird weitergeleitet,
von HTTPS zu HTTP
sowie eine protokollübergreifende Weiterleitung. ExoPlayer wird keine
folgen Sie dieser Weiterleitung in der Standardkonfiguration, was bedeutet, dass die Wiedergabe fehlschlägt.
Bei Bedarf können Sie ExoPlayer so konfigurieren, dass protokollübergreifende Weiterleitungen befolgt werden.
beim Instanziieren von DefaultHttpDataSource.Factory
-Instanzen in Ihrem
. Weitere Informationen zum Auswählen und Konfigurieren des Netzwerkstacks
hier.
Warum schlagen einige Streams mit der Ausnahme „UnrecognizedInputFormatException“ fehl?
Diese Frage bezieht sich auf Wiedergabefehler in der folgenden Form:
UnrecognizedInputFormatException: None of the available extractors
(MatroskaExtractor, FragmentedMp4Extractor, ...) could read the stream.
Für diesen Fehler gibt es zwei mögliche Ursachen. Die häufigste Ursache ist,
Sie versuchen DASH (mpd), HLS (m3u8) oder SmoothStreaming (ism, isml) wiederzugeben.
wird jedoch ein progressiver Stream abgespielt. Um solche
Streams müssen Sie auf das jeweilige ExoPlayer-Modul angewiesen sein. In Fällen, in denen
Wenn der Stream-URI nicht mit der Dateiendung „Standard“ endet, können Sie auch
MimeTypes.APPLICATION_MPD
, MimeTypes.APPLICATION_M3U8
oder
MimeTypes.APPLICATION_SS
bis setMimeType
von MediaItem.Builder
, um explizit
gibt den Streamtyp an.
Die zweite, weniger häufig auftretende Ursache ist, dass ExoPlayer den Container nicht unterstützt. Format des Mediums, das Sie wiedergeben möchten. In diesem Fall ist der Fehler wie vorgesehen funktioniert. Sie können jedoch gerne eine Funktionsanfrage an unser Problemverfolgung mit Details zum Containerformat und Teststream. Suchen Sie nach einer Funktionsanfrage, bevor Sie eine neue einreichen.
Warum funktioniert „setWiedergabeParameters“ auf einigen Geräten nicht richtig?
Wenn du einen Debug-Build deiner App unter Android M und niedriger ausführst,
eine abgehackte Leistung, hörbare Artefakte und eine hohe CPU-Auslastung
mit der setPlaybackParameters
API. Das liegt daran, dass eine Optimierung
die für diese API wichtig sind, ist für Debug-Builds, die auf diesen
Versionen von Android.
Beachten Sie, dass sich dieses Problem nur auf Debug-Builds auswirkt. Es funktioniert nicht wirken sich auf Release-Builds aus, für die die Optimierung immer aktiviert ist. Daher ist der Releases, die Sie für Endnutzer zur Verfügung stellen, sollten von diesem Problem nicht betroffen sein.
Was muss ich tun, wenn der Zugriff auf den Player im falschen Thread erfolgt? Fehler bedeuten?
Weitere Informationen finden Sie auf der Seite "Erste Schritte" unter Ein Hinweis zu Threading.
Wie kann ich die Meldung "Unerwartete Statuszeile: ICY 200 OK" korrigieren?
Dieses Problem kann auftreten, wenn die Serverantwort eine ICY-Statuszeile, statt HTTP-kompatibel. ICY-Statuszeilen wurden eingestellt und sollte nicht verwendet werden. Wenn Sie also über den Server verfügen, sollten Sie ihn aktualisieren, eine HTTP-konforme Antwort. Ist dies nicht möglich, verwenden Sie das Die ExoPlayer-OkHttp-Bibliothek behebt das Problem, da sie ICY verarbeiten kann. die richtigen Statuszeilen angezeigt.
Wie kann ich abfragen, ob es sich bei dem wiedergegebenen Stream um einen Livestream handelt?
Du kannst die Methode isCurrentWindowLive
des Spielers abfragen. Darüber hinaus können Sie
Sie können isCurrentWindowDynamic
prüfen, um herauszufinden, ob das Fenster dynamisch ist
(d. h. die Aktualisierung erfolgt im Laufe der Zeit).
Wie kann ich die Audiowiedergabe fortsetzen, wenn meine App im Hintergrund läuft?
Mit diesen Schritten sorgen Sie für eine unterbrechungsfreie Audiowiedergabe, wenn Ihre App installiert ist. Hintergrund:
- Sie benötigen einen laufenden Dienst im Vordergrund. Dadurch wird verhindert, dass das System Ihren Prozess abzubrechen, um Ressourcen freizugeben.
- Du musst ein
WifiLock
und einWakeLock
halten. Sie sorgen dafür, dass die das WLAN-Radio und die CPU aktiviert. Das ist ganz einfach, wenn SieExoPlayer
durch Aufrufen vonsetWakeMode
. Rufen Sie die erforderlichen Sperren zum richtigen Zeitpunkt ab und lassen Sie sie wieder los.
Es ist wichtig, dass Sie die Sperren aufheben (wenn Sie setWakeMode
nicht verwenden) und
sobald keine Audioinhalte mehr abgespielt werden.
Warum unterstützt ExoPlayer meine Inhalte, die Cast-Bibliothek von ExoPlayer jedoch nicht?
Möglicherweise sind die Inhalte, die du dir ansehen möchtest, CORS aktiviert Für das Cast-Framework müssen Inhalte CORS aktiviert sein in um sie abzuspielen.
Warum werden Inhalte nicht abgespielt, obwohl keine Fehlermeldung angezeigt wird?
Möglicherweise nutzt das Gerät, auf dem Sie die Inhalte wiedergeben,
ein bestimmtes Medienbeispielformat unterstützen. Dies können Sie ganz einfach bestätigen, indem Sie
EventLogger
als Listener für den Player und suche nach einer Linie
ähnlich wie hier in Logcat:
[ ] Track:x, id=x, mimeType=mime/type, ... , supported=NO_UNSUPPORTED_TYPE
NO_UNSUPPORTED_TYPE
bedeutet, dass das Gerät die Medien nicht decodieren kann.
Beispielformat, das durch mimeType
angegeben wird. Medienformate für Android
Dokumentation finden Sie Informationen zu unterstützten Beispielformaten. Wie erhalte ich
eine Decodierungsbibliothek zum Laden und
Verwenden für die Wiedergabe? könnte auch nützlich sein.
Wie kann ich eine Decodierungsbibliothek laden und für die Wiedergabe verwenden?
- Die meisten Decoderbibliotheken haben manuelle Schritte zum Auschecken und Erstellen der Abhängigkeiten. Stellen Sie sicher, dass Sie die Schritte in der README-Datei für die entsprechende Bibliothek befolgt haben. Für die ExoPlayer-FFmpeg-Bibliothek müssen beispielsweise library/decoder_ffmpeg/README.md, einschließlich der Übergabe von um Decodierer für die Formate zu aktivieren, die du wiedergeben möchtest.
- Verwenden Sie bei Bibliotheken mit nativem Code den richtigen
des Android-NDK entsprechend der Angabe in der README-Datei. Achten Sie auf
Fehler, die während der Konfiguration und Erstellung auftreten. Hier sollte
.so
zu sehen sein. werden die Dateien im Unterverzeichnislibs
des Bibliothekspfads für jedes Architektur unterstützt, nachdem Sie die Schritte in der README-Datei ausgeführt haben. - Wie du die Wiedergabe mit der Bibliothek in der Demo-App testest, erfährst du unter Gebündelte Decoder aktivieren. Weitere Informationen finden Sie in der README-Datei der Bibliothek für Anweisungen zur Verwendung der Bibliothek über deine eigene App.
- Wenn Sie
DefaultRenderersFactory
verwenden, sollte eine Infoebene angezeigt werden. Log-Zeile wie „Loaded FfmpegAudioRenderer“. in Logcat ein, wenn der Decoder lädt. Wenn dies fehlt, stellen Sie sicher, dass die Anwendung eine Abhängigkeit vom Decodierungsbibliothek. - Wenn Sie in Logcat Logs auf Warnungsebene von
LibraryLoader
sehen, ist dies zeigt an, dass die native Komponente der Bibliothek nicht geladen werden konnte. Wenn dieses überprüfen Sie, ob Sie die Schritte in der README-Datei der Bibliothek korrekt befolgt haben. und dass beim Befolgen der Anweisungen keine Fehler ausgegeben wurden.
Sollten weiterhin Probleme bei der Verwendung von Decodierungsbibliotheken auftreten, überprüfen Sie die Media3-Problemverfolgung für aktuelle relevante Probleme Wenn Sie es eine neue Ausgabe gibt, die sich auf den Bau des nativen Teils der Bibliothek bezieht, Vollständige Befehlszeilenausgabe zur Ausführung von README-Anweisungen um das Problem zu diagnostizieren.
Kann ich YouTube-Videos direkt mit ExoPlayer wiedergeben?
Nein, ExoPlayer kann keine YouTube-Videos, z. B. URLs im folgenden Format, abspielen.
https://www.youtube.com/watch?v=...
Verwenden Sie stattdessen das YouTube-
iFrame Player API
die offizielle Methode zum Abspielen von YouTube-Videos auf Android.
Videowiedergabe ruckelt
Das Gerät kann den Inhalt möglicherweise nicht schnell genug decodieren, wenn beispielsweise Die Bitrate oder Auflösung des Inhalts überschreitet die Gerätefunktionen. Möglicherweise benötigen Sie Inhalte von geringerer Qualität zu verwenden, um auf solchen Geräten eine gute Leistung zu erzielen.
Video stockende Videos auf Geräten mit Android-Versionen von Android 6.0 (API-Level 23) bis einschließlich Android 11 (API-Level 30) insbesondere bei der Wiedergabe von DRM-geschützten Inhalten oder Inhalten mit hoher Frame-Rate, asynchrone Pufferwarteschlangen aktivieren.
Instabile API-Lint-Fehler
Media3 garantiert die binäre Kompatibilität für einen Teil der API-Oberfläche. Die
Teile, die keine binäre Kompatibilität garantieren, sind mit
@UnstableApi
Um diese Unterscheidung zu verdeutlichen,
API-Symbole generieren einen Lint-Fehler, sofern sie nicht mit @OptIn
gekennzeichnet sind.
Die Anmerkung @UnstableApi
impliziert nichts über die Qualität oder Leistung einer API, sondern nur die Tatsache, dass sie nicht „API-eingefroren“ ist.
Sie haben zwei Möglichkeiten, um instabile API-Lint-Fehler zu handhaben:
- Wechseln Sie zu einer stabilen API, mit der Sie dasselbe Ergebnis erzielen.
- Verwenden Sie weiterhin die instabile API und vermerken Sie die Nutzung mit
@OptIn
, als wie später dargestellt.
Annotation @OptIn
hinzufügen
In Android Studio können Sie die Anmerkung hinzufügen:
<ph type="x-smartling-placeholder">![Screenshot: Optin-Anmerkung hinzufügen](https://developer.android.com/static/media/media3/exoplayer/images/unstable-api.png?authuser=0000&hl=de)
Sie können in Kotlin auch manuell Anmerkungen zu bestimmten Nutzungswebsites machen:
import androidx.annotation.OptIn
import androidx.media3.common.util.UnstableApi
@OptIn(UnstableApi::class)
fun functionUsingUnstableApi() { ... }
Und auch in Java:
import androidx.annotation.OptIn;
import androidx.media3.common.util.UnstableApi;
@OptIn(markerClass = UnstableApi.class)
private void methodUsingUnstableApis() { ... }
Du kannst die Option für ganze Pakete aktivieren, indem du eine package-info.java
-Datei hinzufügst:
@OptIn(markerClass = UnstableApi.class)
package name.of.your.package;
import androidx.annotation.OptIn;
import androidx.media3.common.util.UnstableApi;
Sie können die Aktivierung für ganze Projekte vornehmen, indem Sie den spezifischen Lint-Fehler in ihrer
lint.xml
-Datei:
<?xml version="1.0" encoding="utf-8"?>
<lint>
<issue id="UnsafeOptInUsageError">
<option name="opt-in" value="androidx.media3.common.util.UnstableApi" />
</issue>
</lint>
Es gibt auch die Anmerkung kotlin.OptIn
, die nicht verwendet werden sollte. Es ist
ist es wichtig, die Anmerkung androidx.annotation.OptIn
zu verwenden.