【问题标题】:android mediaplayer http reset not possibleandroid mediaplayer http重置不可能
【发布时间】: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() 从未被调用过。 我发现在我的其他设备上@9​​87654324@ 方法会关闭套接字连接,因此我的服务器在发送数据时会抛出错误,如果发生这种情况,服务器将停止发送数据并等待新的连接。使用华硕平板电脑,连接不会关闭,因此服务器会停留在发送循环内,不会等待新的连接。 我也尝试过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


【解决方案1】:

你可以试试:

mPlayer.reset();
mPlayer.setDataSource(uri.toString());
mPlayer.prepare();
mPlayer.start();

希望对您有所帮助!

【讨论】:

  • 我也测试过这个。如果我在播放器播放另一个流时尝试此操作,它会在 prepare() 处阻塞
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多