【发布时间】:2014-09-03 15:36:53
【问题描述】:
我有一个经典的服务器客户端 tcp 套接字系统来将消息从客户端发送到服务器。这工作安静的罚款。现在我正在尝试播放声音遥控器。客户端应该发送声音的路径。它是/mnt/sdcard/Music/sound.mp3 这是它发送到服务器的内容。
服务器知道客户端 IP。也许 IP 字符串看起来像 /192.168.1.2
服务器应该解释它并通过流媒体启动声音。
private void playSound (String soundFileName) {
Uri myUri1 = Uri.parse("file:/" + _clientIP + soundFileName);
_txtHint.setText(myUri1.toString());
mPlayer = new MediaPlayer();
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mPlayer.setDataSource(getApplicationContext(), myUri1);
} catch (IllegalArgumentException e) {
Toast.makeText(getApplicationContext(), "You might not set the URI correctly!", Toast.LENGTH_LONG).show();
} catch (SecurityException e) {
Toast.makeText(getApplicationContext(), "You might not set the URI correctly!", Toast.LENGTH_LONG).show();
} catch (IllegalStateException e) {
Toast.makeText(getApplicationContext(), "You might not set the URI correctly!", Toast.LENGTH_LONG).show();
} catch (IOException e) {
e.printStackTrace();
}
try {
mPlayer.prepare();
} catch (IllegalStateException e) {
Toast.makeText(getApplicationContext(), "MISE: You might not set the URI correctly!", Toast.LENGTH_LONG).show();
} catch (IOException e) {
Toast.makeText(getApplicationContext(), "MIOE: You might not set the URI correctly!", Toast.LENGTH_LONG).show();
}
mPlayer.start();
}
如果我采用一个简单的 http URI,它会很好地工作(即http://test.com/sound.mp3)。将播放声音。现在我正在尝试播放客户端发送到服务器的声音。但是代码在mPlayer.prepare(); 处出现 IOException(“准备失败:状态 0x1”),我相信 URI 是错误的。我尝试了几种方法(rtsp://IP:port/path、rtsp://IP/path,与file:// 和http:// 相同)。但我找不到合适的。也许我错过了什么?服务器是否有权访问客户端声音?如果没有,我怎么把它交给服务器?
感谢您的帮助! 问候,S-Man
Edit1:ServerSocket
try {
_serverSocket = new ServerSocket(SocketServerPORT);
while (true) {
socket = _serverSocket.accept();
dataInputStream = new DataInputStream(
socket.getInputStream());
dataOutputStream = new DataOutputStream(
socket.getOutputStream());
_message = dataInputStream.readUTF();
_clientIP = socket.getInetAddress().toString();
Server.this.runOnUiThread(new Runnable() {
@Override
public void run() {
//Here the Sound should be played.
Server.this.playSound(_message);
}
});
dataOutputStream.writeUTF(_message);
}
} catch (IOException e) {...
【问题讨论】:
-
您可以访问该文件吗?可以看看能不能下载吗?
-
除非您在客户端设备上确实有一个 http 侦听器(服务器)可以将文件流式传输回来,否则这是行不通的。据我所知,MediaPlayer 只了解本地文件、资源和 http url。鉴于您已经在客户端和服务器之间建立了 TCP 连接,您可以轻松地让客户端将文件推送到服务器。然后服务器播放它。
-
@osayilgan 这不正是我的问题吗?如果我不知道 URI,如何从服务器访问文件?
-
@selbie 嗯,你的意思是这不可能吗?如何将文件推送到服务器?
-
当您说“客户端”和“服务器”时,哪些设备正在运行 Android?还是其中一台设备是 PC?哪个设备上实际上有文件?您实际上想让哪个文件“播放”出扬声器?当您说“服务器”时,您真的是指运行代码的 Android 设备,该设备具有接受入站 TCP 连接的侦听套接字?
标签: java android audio stream lan