【问题标题】:Android: Mediaplayer stream from LANAndroid:来自 LAN 的媒体播放器流
【发布时间】: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


【解决方案1】:

尝试通过 MXPlayer 播放您的链接(请参阅上下文菜单->网络流)以检查它是否正确。

【讨论】:

  • 好主意,但结果相同:我不知道我必须使用哪个链接:)
  • 首先你必须找到正确的网址。而不是确保Android可以在没有MXPlayer可以使用的SW解码器的情况下本地播放它。您还可以使用 VLC 播放/流式传输音频或视频。
猜你喜欢
  • 2017-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-19
  • 2011-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多