java - 在不下载的情况下发送文件作为响应
问题描述
我尝试使用 HLS 构建一个 http 服务器来流式传输视频。我已经处理了如下的响应。
private void handleResponse(HttpExchange exchange, String fileNameValue) {
OutputStream responseStream = exchange.getResponseBody();
File file = new File(fileNameValue);
try {
String encoding = "UTF-8";
String response = FileUtils.readFileToString(file, encoding);
exchange.getResponseHeaders().set("Content-Type", "application/x-mpegURL");
exchange.getResponseHeaders().set("Accept-Ranges", "bytes");
exchange.getResponseHeaders().set("Cache-Control", "max-age=0, no-cache, no-store");
exchange.sendResponseHeaders(200, response.length());
responseStream.write(response.getBytes());
responseStream.flush();
responseStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
但是浏览器总是下载文件而不是播放它。而且 VLC 媒体播放器也不播放它。
你能告诉我怎么做吗?一些用于研究的关键词也值得赞赏。
解决方案
我发现他们的网站使用 xhr 发送请求,因此文件出现在网络部分。
之后我使用 hls.js 并得到相同的结果:)
推荐阅读
- sql - 在 Oracle SQL 中处理时间序列
- forms - 为什么窗体和菜单需要两个窗口?
- javascript - 参考 Gnome-shell 中的“窗口”以用于 Gnome 扩展
- ethereum - 触发非开源智能合约时如何在 etherscan 上对输入数据进行编码?
- python - 如何确定给定的颜色是接近黑色还是接近白色?
- flutter - class 和 typedef 之间的行为不一致
- php - 如何在mysql和php中一次运行多个查询
- android - 如何通过使用 Kotlin 在 android 中编程使设备振动 n 次?
- java - 重启eclipse后重新获得对ViewPart的控制
- javascript - 更新 Vue 中的 b-form-checkbox