android - Android Mediaplayer 无法正常播放直播
问题描述
我正在尝试在收到通知时通过我的应用程序中的媒体播放器播放直播 .ogg 音频。我的设备有奥利奥。问题是,当我收到通知时,在尝试播放音频时,我收到以下异常:
D/MediaPlayer: setDataSource IOException | SecurityException happend :
java.io.FileNotFoundException: No content provider: http://10.15.17.27:8000/40bccd94-9388-4e62-f2e4-08d65393ff81
at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1402)
at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1253)
at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1176)
at android.media.MediaPlayer.attemptDataSource(MediaPlayer.java:1163)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1135)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1080)
at android.media.MediaPlayer.create(MediaPlayer.java:972)
at android.media.MediaPlayer.create(MediaPlayer.java:949)
at android.media.MediaPlayer.create(MediaPlayer.java:928)
直播结束后,mediaplayer 开始播放完成的直播。请在下面找到我的代码:
try {
// MediaPlayer player = MediaPlayer.create(this, Uri.parse(remoteMessage.getData().get("body")));
MediaPlayer player = MediaPlayer.create(this, Uri.parse("http://10.15.17.27:8000/" + str_channel));
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
} catch (Exception e) {
Log.e("mediaplayerexc", e.getMessage());
}
解决方案
你不能使用纯文本HTTP
,除非提供一个网络安全配置,它会覆盖默认的网络安全配置,它变成了cleartextTrafficPermitted="false"
. 例如(仅base-config
适用,除非有可用的本地 DNS)。当您的 DSL 路由器提供域时,您可以使用domain-config
并更具体地说明它:
<?xml version="1.0" encoding="utf-8"?>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
这个问题也似乎是相关的——尽管 Android Pie 仍然需要安全配置。
推荐阅读
- java - Java泛型 - 限制存储在父类参数中的子类对象
- arrays - 搜索数组并返回布尔值excel的函数
- vba - 访问子字典的值
- python - 命令行 - 如何在输入命令中监听按键?
- c# - C# ArrayList 与 C++ 互操作
- angular - Angular 工具栏固定在顶部
- sql - SQLite:使用旧记录合并同一表中的行以填充新记录中的空白
- matplotlib - 关闭 X11 连接时,远程 Jupyter 内核(通过 ssh)崩溃
- sql - 如何通过搜索 SQL Server 中的所有表来查找任何数据类型的值
- node.js - 如何使用 docker-compose 设置节点