Skip to content

Instantly share code, notes, and snippets.

@gabonator
Last active February 11, 2017 14:35
Show Gist options
  • Save gabonator/8e8dc00da8992f9f2c331964e61afa5f to your computer and use it in GitHub Desktop.
Save gabonator/8e8dc00da8992f9f2c331964e61afa5f to your computer and use it in GitHub Desktop.
nodejs server proxy for debugging VLC behaviour during video streaming
url: /video.mpg
request: {"host":"sample-videos.com","user-agent":"VLC/2.1.5 LibVLC/2.1.5","range":"bytes=0-","connection":"close","icy-metadata":"1"}
response: {"server":"nginx/1.4.0","date":"Sat, 11 Feb 2017 14:34:01 GMT","content-type":"video/mp4","transfer-encoding":"chunked","connection":"close","display":"staticcontent_sol","expires":"Mon, 13 Mar 2017 14:34:01 UTC","response":"206","vary":"Origin,Accept-Encoding,X-APP-JSON","x-middleton-display":"staticcontent_sol","x-middleton-response":"206","set-cookie":null,"content-range":"bytes 0-1055735/1055736","etag":"\"34168e-101bf8-5357ce5f7ea80\"","last-modified":"Fri, 03 Feb 2017 19:08:10 GMT","cache-control":"public, max-age=2592000"}
url: /video.mpg
request: {"host":"sample-videos.com","user-agent":"VLC/2.1.5 LibVLC/2.1.5","range":"bytes=1051507-","connection":"close","cookie":"null","icy-metadata":"1"}
response: {"server":"nginx/1.4.0","date":"Sat, 11 Feb 2017 14:34:03 GMT","content-type":"video/mp4","transfer-encoding":"chunked","connection":"close","display":"staticcontent_sol","expires":"Mon, 13 Mar 2017 14:34:03 UTC","response":"206","vary":"Origin,Accept-Encoding,X-APP-JSON","x-middleton-display":"staticcontent_sol","x-middleton-response":"206","set-cookie":null,"content-range":"bytes 1051507-1055735/1055736","etag":"\"34168e-101bf8-5357ce5f7ea80\"","last-modified":"Fri, 03 Feb 2017 19:08:10 GMT","cache-control":"public, max-age=2592000"}
url: /video.mpg
request: {"host":"sample-videos.com","user-agent":"VLC/2.1.5 LibVLC/2.1.5","range":"bytes=1536-","connection":"close","cookie":"null","icy-metadata":"1"}
response: {"server":"nginx/1.4.0","date":"Sat, 11 Feb 2017 14:34:08 GMT","content-type":"video/mp4","transfer-encoding":"chunked","connection":"close","display":"staticcontent_sol","expires":"Mon, 13 Mar 2017 14:34:08 UTC","response":"206","vary":"Origin,Accept-Encoding,X-APP-JSON","x-middleton-display":"staticcontent_sol","x-middleton-response":"206","set-cookie":null,"content-range":"bytes 1536-1055735/1055736","etag":"\"34168e-101bf8-5357ce5f7ea80\"","last-modified":"Fri, 03 Feb 2017 19:08:10 GMT","cache-control":"public, max-age=2592000"}
url: /video.mpg
request: {"host":"sample-videos.com","user-agent":"VLC/2.1.5 LibVLC/2.1.5","range":"bytes=1055735-","connection":"close","cookie":"null","icy-metadata":"1"}
response: {"server":"nginx/1.4.0","date":"Sat, 11 Feb 2017 14:34:08 GMT","content-type":"video/mp4","transfer-encoding":"chunked","connection":"close","display":"staticcontent_sol","expires":"Mon, 13 Mar 2017 14:34:08 UTC","response":"206","vary":"Origin,Accept-Encoding,X-APP-JSON","x-middleton-display":"staticcontent_sol","x-middleton-response":"206","set-cookie":null,"content-range":"bytes 1055735-1055735/1055736","etag":"\"34168e-101bf8-5357ce5f7ea80\"","last-modified":"Fri, 03 Feb 2017 19:08:10 GMT","cache-control":"public, max-age=2592000"}
url: /video.mpg
request: {"host":"sample-videos.com","user-agent":"VLC/2.1.5 LibVLC/2.1.5","range":"bytes=48072-","connection":"close","cookie":"null","icy-metadata":"1"}
response: {"server":"nginx/1.4.0","date":"Sat, 11 Feb 2017 14:34:15 GMT","content-type":"video/mp4","transfer-encoding":"chunked","connection":"close","display":"staticcontent_sol","expires":"Mon, 13 Mar 2017 14:34:15 UTC","response":"206","vary":"Origin,Accept-Encoding,X-APP-JSON","x-middleton-display":"staticcontent_sol","x-middleton-response":"206","set-cookie":null,"content-range":"bytes 48072-1055735/1055736","etag":"\"34168e-101bf8-5357ce5f7ea80\"","last-modified":"Fri, 03 Feb 2017 19:08:10 GMT","cache-control":"public, max-age=2592000"}
"use strict";
var
url = require('url'),
http = require('http'),
acceptor = http.createServer().listen(3128);
acceptor.on('request', function(request, response) {
console.log("url: " + request.url);
request.pause();
request.url = "http://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_1mb.mp4";
var options = url.parse(request.url);
options.headers = request.headers;
options.method = request.method;
options.agent = false;
options.headers.host = "sample-videos.com";
console.log("request: " + JSON.stringify(options.headers));
var connector = http.request(options, function(serverResponse) {
serverResponse.headers["set-cookie"] = null;
console.log("response: " + JSON.stringify(serverResponse.headers));
serverResponse.pause();
response.writeHeader(serverResponse.statusCode, serverResponse.headers);
serverResponse.pipe(response);
serverResponse.resume();
});
request.pipe(connector);
request.resume();
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment