我尝试在连接到同一WiFi网络的Android(API 9+)的两台设备之间实现视频流。第一台设备作为小型http服务器运行,使用MediaRecorder记录来自摄像机的视频。第二个设备正在尝试使用MediaPlayer类中的setDataSource方法获取数据。
mediaPlayer.setDataSource("http://serverIP:port")
我知道首先我需要发送正确的标头,否则MediaPlayer将无法查看数据。这些是我的问题:
我将很感激所有的建议。
编辑:
由于我的问题太笼统,我会尝试更具体。基于这个线程: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)
答案 0 :(得分:0)
要发送标题,您必须将它们放在Map中,如下所示:
Map<String, String> headers = new HashMap<>();
headers.put("Header", "Value");
media_player.setDataSource(
getApplicationContext(),
Uri.parse("http://url:port"),
headers
);