我正在尝试在连接到同一 WiFi 网络的两台 Android(API 9+)设备之间实现视频流传输。第一个作为小型 http 服务器运行的设备,使用 MediaRecorder 记录来自摄像机的视频。第二个设备正在尝试使用 MediaPlayer 类的 setDataSource 方法获取数据。
mediaPlayer.setDataSource("http://serverIP:port")
我知道首先我需要发送正确的 header ,否则 MediaPlayer 将无法查看数据。这些是我的问题:
- 应该如何将正确的 header 发送到 MediaPlayer?
- 对于在 API 9+ 的 Android 设备之间流式传输视频是否有更简单的解决方案?
我将不胜感激所有的建议。
编辑:
由于我的问题过于笼统,我会尝试更具体一些。基于此线程:Live-stream video from one android phone to another over WiFi我决定创建一个小型 http 服务器(使用 ServerSocket)。当第二台设备尝试通过 MediaPlayer 连接时,我可以使用
从服务器向它发送数据socket.getOutputStream().write(buff, 0, readBytes);
但在发送数据之前,我必须将 header 添加到响应中。
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)
最佳答案
要发送 header ,您必须按如下方式将它们放在 Map 中:
Map<String, String> headers = new HashMap<>();
headers.put("Header", "Value");
media_player.setDataSource(
getApplicationContext(),
Uri.parse("http://url:port"),
headers
);
关于java - 将实时视频流式传输到 MediaPLayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39026040/