正如标题所说,我正在尝试使用VideoView将视频流式传输到我的应用。它适用于较小的视频,但对于较大的视频,它拒绝播放("抱歉,此视频无法播放"弹出窗口,我的服务器收到ClientAbortException)。
我认为它现在的工作方式是它只是将整个文件下载到内存或其他东西并尝试一次加载它(这对设备来说可能太多了?)。我已经在我的服务器上实现了分块流功能(解析Range头等),但我想我也需要实现相同的功能客户端。这可以通过VideoView完成吗?
这是我的服务器代码(它适用于iOS视频播放器,默认情况下以块的形式请求):
FileInputStream in = new FileInputStream(file);
ServletOutputStream out = response.getOutputStream();
long begin = 0;
long length, end = file.length();
List<Integer> range = parseRange(request);
if (range.size() > 0) {
begin = range.get(0);
}
if (range.size() > 1) {
end = range.get(1);
}
int dataLength = (int)(end - begin) + 1;
response.setHeader("Accept-Ranges", "bytes");
response.setHeader("Content-Range", contentRangeHeaderString(begin, end, length));
response.setContentLength(dataLength);
response.setContentType("video/mp4");
IOUtils.copyLarge(in, out, begin, dataLength);