将实时视频流式传输到MediaPLayer

时间:2016-08-18 19:23:38

标签: java android http video

我尝试在连接到同一WiFi网络的Android(API 9+)的两台设备之间实现视频流。第一台设备作为小型http服务器运行,使用MediaRecorder记录来自摄像机的视频。第二个设备正在尝试使用MediaPlayer类中的setDataSource方法获取数据。

mediaPlayer.setDataSource("http://serverIP:port")

我知道首先我需要发送正确的标头,否则MediaPlayer将无法查看数据。这些是我的问题:

  1. 如何查找发送到MediaPlayer的正确标头?
  2. 在使用API​​ 9+的Android设备之间是否有更简单的流媒体视频解决方案?
  3. 我将很感激所有的建议。

    编辑:

    由于我的问题太笼统,我会尝试更具体。基于这个线程:Live-stream video from one android phone to another over WiFi我决定创建一个小的http服务器(使用ServerSocket)。当第二个设备尝试通过MediaPlayer连接时,我可以使用

    从服务器向其发送数据
    socket.getOutputStream().write(buff, 0, readBytes);
    

    但在发送数据之前,我必须将标题添加到响应中。

    StringBuilder stringBuilder = new StringBuilder();
    stringBuilder.append("HTTP/1.1 206 Partial Content\r\n");
    stringBuilder.append("Content-Type: video/mp4\r\n");
    stringBuilder.append("Accept-Ranges: bytes\r\n");
    stringBuilder.append("Content-Length: XXXX\r\n\r\n");
    socket.getOutputStream().write(stringBuilder.toString().getBytes());
    

    这是我的问题。我不知道应该在标题中添加哪些信息,以便MediaPLayer可以理解该消息。在日志中,我看到以下消息:

    I/MediaHTTPConnection: response code = 206
    V/MediaPlayer: message received msg=100, ext1=1, ext2=-2147483648
    E/MediaPlayer: error (1, -2147483648)
    

1 个答案:

答案 0 :(得分:0)

要发送标题,您必须将它们放在Map中,如下所示:

 Map<String, String> headers = new HashMap<>();
 headers.put("Header", "Value");

 media_player.setDataSource(
     getApplicationContext(),
     Uri.parse("http://url:port"),
        headers
 );