当前位置: 首页 > 知识库问答 >
问题:

与exoplayer一起播放离线歌曲

昝涛
2023-03-14

我无法使用exoplayer2.2离线播放歌曲。

这是我的密码。

 public void initializePlayer(View view) {
    playerView = view.findViewById(R.id.player_background_view);
    playerView.setPlayer(player);
    player.setPlayWhenReady(true);
    player.seekTo(currentWindow, playbackPosition);
    Uri uri = Uri.parse("file:///storage/sdcard0/Sounds/Music/song.mp3");
    MediaSource mediaSource = buildMediaSource(uri);
    player.prepare(mediaSource, true, true);
}

private MediaSource buildMediaSource(Uri uri) {
    return new ExtractorMediaSource(uri,
            new DefaultHttpDataSourceFactory("exoplayer-codelab"),
            new DefaultExtractorsFactory(), null, null);
}

我得到以下错误。

ExoPlayerImplInternal: Source error. com.google.android.exoplayer2.upstream.Loader$UnexpectedLoaderException: Unexpected ClassCastException: libcore.net.url.FileURLConnection cannot be cast to java.net.HttpURLConnection
                                                                                        at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:317)
                                                                                        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
                                                                                        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
                                                                                        at java.lang.Thread.run(Thread.java:841)
                                                                                     Caused by: java.lang.ClassCastException: libcore.net.url.FileURLConnection cannot be cast to java.net.HttpURLConnection
                                                                                        at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.makeConnection(DefaultHttpDataSource.java:393)
                                                                                        at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.makeConnection(DefaultHttpDataSource.java:350)
                                                                                        at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.open(DefaultHttpDataSource.java:192)
                                                                                        at com.google.android.exoplayer2.source.ExtractorMediaPeriod$ExtractingLoadable.load(ExtractorMediaPeriod.java:640)
                                                                                        at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:295)
                                                                                        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
                                                                                        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
                                                                                        at java.lang.Thread.run(Thread.java:841) 

谁能帮忙吗。

共有1个答案

羊舌旭尧
2023-03-14

我自己找到了答案

 public void initializePlayer(Song song, View view) {
    String source = "file:///storage/sdcard0/Sounds/Music/song.mp3";
    Context mContext = getApplicationContext();
    if (mExoPlayer == null) {
        mExoPlayer =
                ExoPlayerFactory.newSimpleInstance(
                        new DefaultRenderersFactory(this), new DefaultTrackSelector(), new
                                DefaultLoadControl());
    }
    mExoPlayer.setPlayWhenReady(true);
    DataSource.Factory dataSourceFactory =
            new DefaultDataSourceFactory(
                    mContext, Util.getUserAgent(mContext, "Music Player"), null);
    ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
    // The MediaSource represents the media to be played.
    MediaSource mediaSource =
            new ExtractorMediaSource(
                    Uri.parse(source), dataSourceFactory, extractorsFactory, null, null);
    mExoPlayer.prepare(mediaSource, true, true);
}
 类似资料:
  • 我正在尝试为ExoPlayer 2实现离线DRM支持,但我有一些问题。 我找到了这段对话。ExoPlayer 1有一些实现。以及如何使用ExoPlayer 2实现的一些步骤。十、 我对离线DrmSessionManager有问题,which实现了DrmSessionManager。在该示例中,是从ExoPlayer 1导入的DrmSessionManager。x、 如果我从ExoPlayer 2导

  • 我正在编写一个,其中我提供了功能,几乎满足了我的需求,但面临一些小问题。 我是如何实现我的音乐播放器的: 正在列出SD卡中可用的音频歌曲(路径类似:) 一旦用户点击任何音频,然后启动媒体播放器 在媒体播放器屏幕中,我为用户提供了返回音频列表的导航 用户返回,现在选择了一些其他歌曲来听(这里我面临的问题是,用户将可以播放新选择的歌曲,但也会播放旧歌曲,而一次只能播放上一次选择的歌曲,但在我的情况下,

  • 我正在制作音频播放器(android)。问题是我什么时候启动我的应用程序

  • 我正在尝试在android中实现BrightCove Exoplayer。我能够成功地实现播放单个视频。现在我正在尝试使用Exoplayer播放播放列表。播放列表中的第一个视频,在第一个视频结束时,播放器不会播放播放列表中的下一个视频。它再次显示第一个视频的开头;如果我按下播放按钮,第一个视频将再次播放。我想实现连续播放播放列表中的所有视频。我错过什么了吗?我将我的代码张贴在下面: 主要活动:

  • 我正在尝试用新的Android Studio测试Google Play服务。我有一个依赖于google_play_服务的项目。罐子但是,当我尝试重建项目时,会出现以下错误: 它似乎有两个BuildConfig文件和两个R类。我如何解决这个问题? 编辑: 我注意到编译器编译了两个R.java文件:一个在我的项目文件夹中,另一个在文件夹%USERPROFILE%中。AndroidStudioPrevi

  • 我正在使用ExoPlayer播放视频的应用程序。出于某种原因,当我试图暂停时,视频播放器没有显示播放/暂停图标。我只为播放/暂停做了一个自定义布局,并将其设置在PlayerView上。使用或播放/暂停视频。到处都找不到解决办法,好像我错过了什么,但又不知道是什么。