java - 将实时视频流式传输到 MediaPLayer

标签 java android http video

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

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

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

  1. 应该如何将正确的 header 发送到 MediaPlayer?
  2. 对于在 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/

相关文章:

java - 通过 HTTP 使用 Commons-VFS

asp.net-mvc - '以另一个用户身份登录' MVC 4 Windows 身份验证

java - REST JAX-RS 日志记录

java - 如何从 java.net.URL 创建一个 android.net.Uri?

android - 一个漂亮的 imageview 框架和一个动画

android - 导出 Facebook 好友电子邮件地址 Android

java - 使用单个 servlet 请求上传多个文件

java - 编写计算长度/平均值的方法

java - 如何将获得的字符串传递为 jsonObject 格式?

java - RecyclerView 占用所有屏幕空间