Java 无法在最新版本的Android中通过exoplayer传输音频文件

Java 无法在最新版本的Android中通过exoplayer传输音频文件,java,android,exoplayer,exoplayer2.x,Java,Android,Exoplayer,Exoplayer2.x,我正在使用exoplayer将音频文件从Firebase存储流式传输到我的应用程序。我之前使用了媒体播放器,速度太慢了。所以我改成了exoplayer,当时它的版本是2.8.4 以下是我用来传输音频的代码: SimpleExoPlayer simpleExoPlayer; private void SetupPlayer(){ DefaultRenderersFactory renderersFactory = new DefaultRenderersFactory(this,

我正在使用
exoplayer
将音频文件从Firebase存储流式传输到我的应用程序。我之前使用了
媒体播放器
,速度太慢了。所以我改成了
exoplayer
,当时它的版本是2.8.4

以下是我用来传输音频的代码:

SimpleExoPlayer simpleExoPlayer;
private void SetupPlayer(){
    DefaultRenderersFactory renderersFactory = new DefaultRenderersFactory(this,
            null,DefaultRenderersFactory.EXTENSION_RENDERER_MODE_OFF);
    TrackSelector trackSelector = new DefaultTrackSelector();
    LoadControl loadControl = new DefaultLoadControl.Builder()
            .setAllocator(new DefaultAllocator(true, 16))
            .setBufferDurationsMs(MIN_BUFFER_DURATION,
                    MAX_BUFFER_DURATION,
                    MIN_PLAYBACK_START_BUFFER,
                    MIN_PLAYBACK_RESUME_BUFFER)
            .setTargetBufferBytes(-1)
            .setPrioritizeTimeOverSizeThresholds(true).createDefaultLoadControl();
    simpleExoPlayer = ExoPlayerFactory.newSimpleInstance(renderersFactory,trackSelector,loadControl);
    String userAgent = Util.getUserAgent(this, "Play Audio");
    ExtractorMediaSource mediaSource = new ExtractorMediaSource(Uri.parse(audio_url),new DefaultDataSourceFactory(this, userAgent),
            new DefaultExtractorsFactory(),null,null);

    simpleExoPlayer.prepare(mediaSource);
}
效果很好。但是现在
exoplayer
已经将其版本更新为
2.11.8
。在此版本中,
extractoremiasource
defaultrenderesfactory
DefaultTrackSelector
ExoPlayerFactory
不推荐使用

因此,我更改了最新版本的代码

代码如下:

    SimpleExoPlayer simpleExoPlayer;
    private void SetupPlayer(){
       // Create a data source factory.
        DataSource.Factory dataSourceFactory =
                new DefaultHttpDataSourceFactory(Util.getUserAgent(this
                        , "app-name"));
// Create a progressive media source pointing to a stream uri.
        MediaSource mediaSource = new ProgressiveMediaSource.Factory(dataSourceFactory)
                .createMediaSource(Uri.parse(audio_url));
// Create a player instance.
        simpleExoPlayer =  new SimpleExoPlayer.Builder(this).build();
// Prepare the player with the media source.
        simpleExoPlayer.prepare(mediaSource);
    }
现在它显示错误

java.lang.NoSuchMethodError: No static method metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; in class Ljava/lang/invoke/LambdaMetafactory; or its super classes (declaration of 'java.lang.invoke.LambdaMetafactory' appears in /apex/com.android.runtime/javalib/core-oj.jar)
        at com.google.android.exoplayer2.util.SlidingPercentile.<clinit>(SlidingPercentile.java:38)
        at com.google.android.exoplayer2.upstream.DefaultBandwidthMeter.<init>(DefaultBandwidthMeter.java:276)
        at com.google.android.exoplayer2.upstream.DefaultBandwidthMeter.<init>(DefaultBandwidthMeter.java:48)
        at com.google.android.exoplayer2.upstream.DefaultBandwidthMeter$Builder.build(DefaultBandwidthMeter.java:190)
        at com.google.android.exoplayer2.upstream.DefaultBandwidthMeter.getSingletonInstance(DefaultBandwidthMeter.java:229)
        at com.google.android.exoplayer2.SimpleExoPlayer$Builder.<init>(SimpleExoPlayer.java:144)
        at com.google.android.exoplayer2.SimpleExoPlayer$Builder.<init>(SimpleExoPlayer.java:126)
        at com.paulstevenme.jeevaoli.StoryAudioActivity.SetupPlayer(StoryAudioActivity.java:323)
        at com.paulstevenme.jeevaoli.StoryAudioActivity.onCreate(StoryAudioActivity.java:125)
        at android.app.Activity.performCreate(Activity.java:7955)
        at android.app.Activity.performCreate(Activity.java:7944)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3423)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3595)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2147)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:237)
        at android.app.ActivityThread.main(ActivityThread.java:7814)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068)
java.lang.NoSuchMethodError:没有静态方法元工厂(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;在Ljava/lang/invoke/LambdaMetafactory类中;或者它的超类(声明'java.lang.invoke.LambdaMetafactory'出现在/apex/com.android.runtime/javalib/core oj.jar中)
位于com.google.android.exoplayer2.util.SlidingPercentile.(SlidingPercentile.java:38)
在com.google.android.exoplayer2.upstream.DefaultBandwidthMeter.(DefaultBandwidthMeter.java:276)
在com.google.android.exoplayer2.upstream.DefaultBandwidthMeter.(DefaultBandwidthMeter.java:48)
位于com.google.android.exoplayer2.upstream.DefaultBandwidthMeter$Builder.build(DefaultBandwidthMeter.java:190)
在com.google.android.exoplayer2.upstream.DefaultBandwidthMeter.getSingletonInstance(DefaultBandwidthMeter.java:229)上
位于com.google.android.exoplayer2.SimpleExoPlayer$Builder。(SimpleExoPlayer.java:144)
位于com.google.android.exoplayer2.SimpleExoPlayer$Builder。(SimpleExoPlayer.java:126)
在com.paulstevenme.jeevaoli.StoryAudioActivity.SetupPlayer上(StoryAudioActivity.java:323)
在com.paulstevenme.jeevaoli.StoryAudioActivity.onCreate(StoryAudioActivity.java:125)上
位于android.app.Activity.performCreate(Activity.java:7955)
位于android.app.Activity.performCreate(Activity.java:7944)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3423)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3595)
在android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
在android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)中
在android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)中
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:2147)
位于android.os.Handler.dispatchMessage(Handler.java:107)
位于android.os.Looper.loop(Looper.java:237)
位于android.app.ActivityThread.main(ActivityThread.java:7814)
位于java.lang.reflect.Method.invoke(本机方法)
位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068)

我搜索了
堆栈溢出
。但每个人的答案都是不赞成的。所以我不知道如何修复它。请帮我找到一些解决办法。

找到了答案。我只是错过了在
buildgradle中添加
compile选项。
添加之后,它就工作了

compileOptions {
        targetCompatibility JavaVersion.VERSION_1_8
    }

但我在media source@blackapps中传递音频url,现在它显示
java.lang.NoSuchMethodError
error。我更新了问题,但是没有找到哪种方法?日志告诉你。请在代码块中发布日志以保留这些行。@blackapps,我在问题中更新了日志。缺少某些方法。到底是哪一个。也许你需要一些库的另一个版本。现在捕捉异常。