Exoplayer: How to avoid newly restricted getLatency interface in Android Q?

Created on 13 Apr 2019  路  2Comments  路  Source: google/ExoPlayer

[REQUIRED] Searched documentation and issues

I have searched google's issue tracker, stackoverflow and ExoPlayer issues in github.

[REQUIRED] Question

In updates to non-SDK interface restrictions in Android Q, "Landroid/media/AudioTrack;->getLatency()I" is now a restricted interface. ExoPlayer uses getLatency in AudioTrackPositionTracker.java.

Is there another way ExoPlayer can get latency without using reflection? Or should we request a new public API for that interface? Or should I ignore the strict mode violation for this?

android.os.strictmode.NonSdkApiUsedViolation: Landroid/media/AudioTrack;->getLatency()I
0 = {StackTraceElement@15663} "android.os.StrictMode.lambda$static$1(StrictMode.java:406)"
1 = {StackTraceElement@15664} "android.os.-$$Lambda$StrictMode$lu9ekkHJ2HMz0jd3F8K8MnhenxQ.accept(Unknown Source:2)"
2 = {StackTraceElement@15665} "java.lang.Class.getDeclaredMethodInternal(Native Method)"
3 = {StackTraceElement@15666} "java.lang.Class.getPublicMethodRecursive(Class.java:2079)"
4 = {StackTraceElement@15667} "java.lang.Class.getMethod(Class.java:2066)"
5 = {StackTraceElement@15668} "java.lang.Class.getMethod(Class.java:1693)"
6 = {StackTraceElement@15669} "com.google.android.exoplayer2.audio.AudioTrackPositionTracker.<init>(AudioTrackPositionTracker.java:172)"
7 = {StackTraceElement@15670} "com.google.android.exoplayer2.audio.DefaultAudioSink.<init>(DefaultAudioSink.java:347)"
8 = {StackTraceElement@15671} "com.google.android.exoplayer2.audio.DefaultAudioSink.<init>(DefaultAudioSink.java:320)"
9 = {StackTraceElement@15672} "com.google.android.exoplayer2.audio.DefaultAudioSink.<init>(DefaultAudioSink.java:301)"
10 = {StackTraceElement@15673} "com.google.android.exoplayer2.audio.MediaCodecAudioRenderer.<init>(MediaCodecAudioRenderer.java:218)"
11 = {StackTraceElement@15674} "com.google.android.exoplayer2.DefaultRenderersFactory.buildAudioRenderers(DefaultRenderersFactory.java:385)"
12 = {StackTraceElement@15675} "com.google.android.exoplayer2.DefaultRenderersFactory.createRenderers(DefaultRenderersFactory.java:255)"
13 = {StackTraceElement@15676} "com.google.android.exoplayer2.SimpleExoPlayer.<init>(SimpleExoPlayer.java:217)"
14 = {StackTraceElement@15677} "com.google.android.exoplayer2.SimpleExoPlayer.<init>(SimpleExoPlayer.java:170)"
15 = {StackTraceElement@15678} "com.google.android.exoplayer2.ExoPlayerFactory.newSimpleInstance(ExoPlayerFactory.java:389)"
16 = {StackTraceElement@15679} "com.google.android.exoplayer2.ExoPlayerFactory.newSimpleInstance(ExoPlayerFactory.java:355)"
17 = {StackTraceElement@15680} "com.google.android.exoplayer2.ExoPlayerFactory.newSimpleInstance(ExoPlayerFactory.java:323)"
18 = {StackTraceElement@15681} "com.google.android.exoplayer2.ExoPlayerFactory.newSimpleInstance(ExoPlayerFactory.java:217)"
19 = {StackTraceElement@15682} "com.google.android.exoplayer2.ExoPlayerFactory.newSimpleInstance(ExoPlayerFactory.java:183)"
20 = {StackTraceElement@15683} "com.google.android.exoplayer2.ExoPlayerFactory.newSimpleInstance(ExoPlayerFactory.java:154)"
question

Most helpful comment

This method will be allowed for app usage when Q launches [internal: b/112561552]. It is fine to ignore the error in preview builds. Longer term, the audio framework team are looking into how we can get accurate latency data via a public API at all times (not only when an AudioTimestamp is available).

All 2 comments

This method will be allowed for app usage when Q launches [internal: b/112561552]. It is fine to ignore the error in preview builds. Longer term, the audio framework team are looking into how we can get accurate latency data via a public API at all times (not only when an AudioTimestamp is available).

Thanks!

Was this page helpful?
0 / 5 - 0 ratings