【问题标题】:Stream live video to MediaPLayer将实时视频流式传输到 MediaPLayer
【发布时间】:2016-08-19 15:46:29
【问题描述】:

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

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

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

  1. 应该如何看待正确的标头发送到 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);

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

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)

【问题讨论】:

  • 欢迎来到 Stack Overflow。请阅读How to Ask。一个有多个问题的问题很难回答。也请分享您尝试和/或研究的内容。

标签: java android http video


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 2016-11-23
    • 2016-06-17
    相关资源
    最近更新 更多