我正在使用MediaPlayer
加载mp3文件并在线播放。我正在使用以下代码:
try{
Log.i("tag1", "try");
mediaPlayer.setDataSource(activity.this, Uri.parse("link"));
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
Log.i("tag2", "" + mediaPlayer.getDuration());
}
});
} catch(IOException e) {
e.printStackTrace();
}
大多数时候什么都没有准备,所以我有log.i
结果如下:
tag1 = try
tag2
永远不会执行
如果(有时只有(准备好mediaPlayer
,我会得到这些日志:
tag1 = try
tag2 = 0
_ 既不可接受也不可用
另外,当我打电话给mediaPlayer.setOnErrorListener
时,我收到错误1,-1004
或1,-2147483648
。此外,mediaPlayer.setOnInfoListener
什么也没给出;我认为它从来没有被称为...
可能是什么问题?
不用说,在服务器文件管理器的日志文件夹中,我发现了这个:"stagefright/1.2 (Linux; Android 4.4.4)"
.我认为这可能有助于解决问题。另外,与此相关,问题可能是由PHP扩展引起的吗? 如果是,激活哪个扩展可以解决此问题?
任何帮助真的非常感谢。
你有一个MEDIA_ERROR_IO。正如文档所述,这是针对文件或网络相关操作错误。
在大多数情况下,问题出在 MediaPlayer 类的实现中,或者可能出在 android 4 中,如此处所述
相反,我会推荐你ExoPlayer。
您的MediaPlayer.OnPreparedListener()
中缺少mediaPlayer.start()
。请参阅附加的 kotlin 代码,以获取带有示例 http 请求的扩展类
错误1004
:找不到源(例如路径错误或 url 上没有流(
错误2147483648
:您的设备不支持媒体格式
另一个提及:在设备系统上保留音频文件的引用需要持久的 uri 权限
以下是使用 OkHttp 在 kotlin 中启动无线电流的精简代码
class MyPlayer: MediaPlayer(), MediaPlayer.OnPreparedListener {
fun playStream() {
try {
val uri = Uri.parse( [URL] )
//check if url valid
val client = OkHttpClient()
val request = Request.Builder().url( [URL] ).build()
val newCall = client.newCall(request).execute()
if (newCall.code() != 200) {
//handle error for stream, stream not broadcasting
return
}
val headers = HashMap<String, String>()
headers.put("User-Agent", " [SOME AGENT] ")
setDataSource(context, uri, headers)
prepareAsync()
} catch (e: Exception) {
L.e("Url Parsing failed for ${e.message}")
setInternalState(State.Error, StreamErrorMapping.ShoutCastError)
}
}
}
override fun onPrepared(player: MediaPlayer) {
player.start() //<-- this call is missing in your code
}
顺便说一句,就像已经提到的Ezaldeenn sahb一样,我也建议使用ExoPlayer
,因为它比MediaPlayer
快得多!在我的项目中,缓冲从2-4秒(MediaPlayer(下降到200ms(Exoplayer(。快乐编码
看来您的问题是因为使用了http
链接而不是https
。将android:usesCleartextTraffic="true"
添加到清单应用程序标记,如下所示:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:usesCleartextTraffic="true"
android:theme="@style/AppTheme"
>
...
</application>
另外,不要忘记使用internet
权限。
当然,我感谢所有为回答我的这个问题付出最大努力的朋友,但他们都没有解决主要问题。
我是如何找到摆脱这种情况的方法的:
我为我的文件尝试了另一个主机,它起作用了。因此,我决定将所有数据和数据库移动到另一台主机。