aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRblSb <msrblsb@gmail.com>2021-07-11 22:39:30 +0300
committerRblSb <msrblsb@gmail.com>2021-07-11 22:39:30 +0300
commitafc010aeb7b7bdf750eaeb5c47db0fe345b492f5 (patch)
tree0343fdb53d47796dc96b7ef84de41def36da059a
parentbba27c17e25a253d6fecb36dce170fea328fbcdd (diff)
Improve partial content streams
-rw-r--r--build/server.js24
-rw-r--r--src/server/HttpServer.hx13
2 files changed, 25 insertions, 12 deletions
diff --git a/build/server.js b/build/server.js
index ab89146..5601172 100644
--- a/build/server.js
+++ b/build/server.js
@@ -225,6 +225,9 @@ EReg.prototype = {
return b;
}
}
+ ,split: function(s) {
+ return s.replace(this.r,"#__delim__#").split("#__delim__#");
+ }
,map: function(s,f) {
var offset = 0;
var buf_b = "";
@@ -3555,18 +3558,25 @@ server_HttpServer.readFileError = function(err,res,filePath) {
}
};
server_HttpServer.serveMedia = function(req,res,filePath) {
- var range = req.headers["range"];
- if(range == null) {
- return false;
- }
filePath = decodeURIComponent(filePath.split("+").join(" "));
if(!js_node_Fs.existsSync(filePath)) {
return false;
}
var videoSize = js_node_Fs.statSync(filePath).size;
- var _this_r = new RegExp("[^0-9]","g".split("u").join(""));
- var start = Std.parseInt(range.replace(_this_r,""));
- var end = Math.min(start + 5242880,videoSize - 1) | 0;
+ var range = req.headers["range"];
+ if(range == null) {
+ range = "bytes=0-";
+ }
+ var ranges = new EReg("[-=]","g").split(range);
+ var start = Std.parseInt(ranges[1]);
+ if(start == null) {
+ start = 0;
+ }
+ var end = Std.parseInt(ranges[2]);
+ if(end == null) {
+ end = start + 5242880;
+ }
+ end = Math.min(end,videoSize - 1) | 0;
res.setHeader("Content-Range","bytes " + start + "-" + end + "/" + videoSize);
res.setHeader("Content-Length","" + (end - start + 1));
res.statusCode = 206;
diff --git a/src/server/HttpServer.hx b/src/server/HttpServer.hx
index 2e69522..44e4f36 100644
--- a/src/server/HttpServer.hx
+++ b/src/server/HttpServer.hx
@@ -118,15 +118,18 @@ class HttpServer {
}
static function serveMedia(req:IncomingMessage, res:ServerResponse, filePath:String):Bool {
- final range:String = req.headers["range"];
- if (range == null) return false;
filePath = filePath.urlDecode();
if (!Fs.existsSync(filePath)) return false;
final videoSize = Fs.statSync(filePath).size;
- // range example: "bytes=24182784-"
+ var range:String = req.headers["range"];
+ if (range == null) range = "bytes=0-";
+ final ranges = ~/[-=]/g.split(range);
+ var start = Std.parseInt(ranges[1]);
+ if (start == null) start = 0;
final CHUNK_SIZE = 1024 * 1024 * 5; // 5 MB
- final start = Std.parseInt(~/[^0-9]/g.replace(range, ""));
- final end = Std.int(Math.min(start + CHUNK_SIZE, videoSize - 1));
+ var end = Std.parseInt(ranges[2]);
+ if (end == null) end = start + CHUNK_SIZE;
+ end = Std.int(Math.min(end, videoSize - 1));
final contentLength = end - start + 1;
res.setHeader("Content-Range", 'bytes ${start}-${end}/${videoSize}');
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage