问题描述
我正在使用exoplayer
将音频文件从Firebase存储流式传输到我的应用程序。我之前使用过Media player
,速度太慢了。因此我改为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);
simpleExoPlayer.prepare(mediaSource);
}
效果很好。但是现在exoplayer
已将其版本更新为2.11.8
。在此版本中,不推荐使用ExtractorMediaSource
,DefaultRenderersFactory
,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)
我搜索了Stack overflow
。但是每个人的答案都是过时的。所以我不知道如何解决它。请帮我一些解决方案。
解决方法
找到答案。我只是错过了在添加后some-page-example.com/path/to/image/image_name.jpg?AWSAccessKeyId=access_key&Signature=signature&Expires=some_numbers
中添加compile options
的效果。
build gradle.