Exoplayer、NanoHTTPD:Exoplayer 无法播放我在 NanoHTTPD 服务器上托管的 .mp3 文件

问题描述

Exoplayer 抛出异常“UnrecognizedInputFormatException”。 这些文件是 .mp3 文件,我可以在浏览器上播放该文件或在 android 上使用 MediaPlayer 库。这是我用来提供文件代码

     public NanoHTTPD.Response serveFile(String mime,Map<String,String> header,File file) {

    NanoHTTPD.Response res;
    String etag = Integer.toHexString((file.getAbsolutePath() +
            file.lastModified() + "" + file.length()).hashCode());
    long fileLen = file.length();

    try {
        res = newFixedLengthResponse(NanoHTTPD.Response.Status.OK,mime,new FileInputStream(file),fileLen);
        res.addHeader("Content-Length","" + fileLen);
        res.addHeader("ETag",etag);
        return res;

    } catch (FileNotFoundException e) {
        e.printstacktrace();
        return null;
    }

}

这是我生成 MediaItem 对象的方式,网址类似于“http://192.168.23.12:8080/song/abc.mp3”

 private static MediaItem getMediaItem(String songName) {
    String url = String.format("http://%s:%s%s%s",hostIP,hostPort,Values.soNGS_PATH,songName);
    Log.d("MusicPlayerControl","url : " + url);
    Uri uri = Uri.parse(url);
    return MediaItem.fromUri(uri);
}

static void playNewSong(SongListItem songName) {
    MediaItem mediaItem = getMediaItem(songName.getSongName());
    Log.d("MusicPlayerControl",songName.getSongName());
    mediaPlayer.setMediaItem(mediaItem);
    mediaPlayer.prepare();
    mediaPlayer.play();
}

解决方法

这里的代码没有问题,我忘记初始化mediaPlayer对象

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...