【发布时间】:2016-03-09 01:37:38
【问题描述】:
我在通过 android 媒体播放器处理 http 流时遇到问题。 我已经编写了自己的 http 服务器任务,它将 wav 音频文件发送到媒体播放器。一切都与我的galaxy s3galaxy note2和中国平板电脑完美配合,但现在我有一台华硕K109平板电脑,使用此设备我的服务器无法正常工作。
我的启动代码如下所示:
mPlayer.reset();
mPlayer.setDataSource(uri.toString());
mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mPlayer.start();
}
});
mPlayer.prepareAsync();
第一个调用很好,但是如果我想在第一个运行时启动一个新文件,“onPrepared() 从未被调用过。
我发现在我的其他设备上@987654324@ 方法会关闭套接字连接,因此我的服务器在发送数据时会抛出错误,如果发生这种情况,服务器将停止发送数据并等待新的连接。使用华硕平板电脑,连接不会关闭,因此服务器会停留在发送循环内,不会等待新的连接。
我也尝试过stop() 和release() 媒体播放器,但这也无济于事。
这是华硕tableb或Android 5.0.1版本的已知错误吗?
我错过了什么吗?
谢谢
【问题讨论】:
-
这可能是在黑暗中拍摄,但我倾向于
stop(), reset()和release()我的MediaPlayer对象,并在每次打开(甚至相同)文件时重新创建一个新对象. MP 进行了内部清理,清理时间可能会稍长一些,而且容易受到干扰。 -
我已经尝试完全停止、重置、释放和重新创建一个新的 MediaPlayer,但新的 MediaPlayer 也没有准备好,因为我的服务器一直在发送到第一个 MediaPlayer(第一个 MediaPlayer 没有关闭连接)
-
请发布完整的 HTTP 标头,因为它们是从您的服务器发送的。例如,如果您通过 NGINX 或 Apache 托管音乐文件然后流式传输,是否会出现问题?您的服务器是否支持多个连接?确保标头是这样发送的:stackoverflow.com/a/24893603/375209
-
这些是我在 MediaPlayer 发出请求后发回的标头:
headers += "HTTP/1.1 200 OK\r\n"; headers += "Content-Type: audio/x-wav\r\n"; headers += "Accept-Ranges: bytes\r\n"; headers += "Content-Length: 300000" + "\r\n"; headers += "Connection: Keep-Alive\r\n"; headers += "\r\n"; -
抱歉格式不好
标签: android sockets http reset