我制作了一个只是来自URL的播放歌曲的应用程序。这个URL将使用NanoHTTP创建。这个URL只是设备IP和端口地址的组合。
代码规范 我刚刚收到此URL作为Message.One我获取URL并将此URL提供给Media Player类。
try {
if (mediaPlayer != null) {
mediaPlayer.stop();
mediaPlayer.reset();
mediaPlayer.release();
mediaPlayer = null;
}
if (handler != null) {
handler.removeCallbacks(notification);
}
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
// String url = URLEncoder.encode(commandHelper.getSongDetails().getSongURL(), "UTF-8");
String url = commandHelper.getSongDetails().getSongURL();
Log.e("Tag", "Receiving Url Data ::" + url);// Song URL ::: http://192.168.1.160:8085/
mediaPlayer.setDataSource(url);
mediaPlayer.prepare();
mediaPlayer.start();
} catch (IOException e) {
DebugLog.e("Value ::" + e.getMessage());
e.printStackTrace();
}
和我的网址就像http://192.168.1.160:8085/
问题
一切顺利,但在我启动Media Player时遇到以下错误
并且我的设备挂起和设备没有响应。 我也尝试使用mediaPlayer.prepareAsync(),mediaPlayer.prepare(FileDescriptor)来处理此错误,但我得到了相同的结果。
注意
此问题是操作系统特定的,它仅在5.0(LOLIPOP)操作系统中发生。
请帮助我,如果任何人有关于这个问题的正确解决方案。我很难尝试解决这个问题,但我得到同样的错误。所以请帮助解决这个问题。
答案 0 :(得分:4)
对我来说,当数据源被使用两次时,就会发生这个问题。我通过禁用缓存来修复它。问题是缓存可以节省不良长度或位置信息等。不确定为什么可能因为压缩。
我只对特定的mp3文件有这个问题(我还在研究为什么只有这些文件受到影响)。
Map<String, String> headers = new HashMap<>();
headers.put("Content-Type", "audio/mp3"); // change content type if necessary
headers.put("Accept-Ranges", "bytes");
headers.put("Status", "206");
headers.put("Cache-control", "no-cache");
Uri uri = Uri.parse(yourContentUrl);
player.setDataSource(getApplicationContext(), uri, headers);
答案 1 :(得分:1)
它与源(和操作系统)的链接。
我找到了一个解释我的案例:编解码器MPEG-4 ODSM,MPEG-4 SDSM 使用其他来源(仅限H.264,AAC),它正在运作。
链接问题:Android Marshmallow "Can't play this video" error
Android支持的格式:http://developer.android.com/guide/appendix/media-formats.html
因此解决方案是尝试其他来源或重新编码媒体。