-
-
Save paolorossi/1993068 to your computer and use it in GitHub Desktop.
/* | |
* Inspired by: http://stackoverflow.com/questions/4360060/video-streaming-with-html-5-via-node-js | |
*/ | |
var http = require('http'), | |
fs = require('fs'), | |
util = require('util'); | |
http.createServer(function (req, res) { | |
var path = 'video.mp4'; | |
var stat = fs.statSync(path); | |
var total = stat.size; | |
if (req.headers['range']) { | |
var range = req.headers.range; | |
var parts = range.replace(/bytes=/, "").split("-"); | |
var partialstart = parts[0]; | |
var partialend = parts[1]; | |
var start = parseInt(partialstart, 10); | |
var end = partialend ? parseInt(partialend, 10) : total-1; | |
var chunksize = (end-start)+1; | |
console.log('RANGE: ' + start + ' - ' + end + ' = ' + chunksize); | |
var file = fs.createReadStream(path, {start: start, end: end}); | |
res.writeHead(206, { 'Content-Range': 'bytes ' + start + '-' + end + '/' + total, 'Accept-Ranges': 'bytes', 'Content-Length': chunksize, 'Content-Type': 'video/mp4' }); | |
file.pipe(res); | |
} else { | |
console.log('ALL: ' + total); | |
res.writeHead(200, { 'Content-Length': total, 'Content-Type': 'video/mp4' }); | |
fs.createReadStream(path).pipe(res); | |
} | |
}).listen(1337, '127.0.0.1'); | |
console.log('Server running at http://127.0.0.1:1337/'); |
I am having trouble getting stream to work in chrome .. This works perfectly in Mozilla. Any ideas ? Appreciate all your help.
Thank you!
I have the same issue as rajswarnam, works like a charme on all desktop browsers and mobile firefox & safari, but not mobile chrome for android. Console log shows the same request from chrome mobile than chrome desktop, but the player stays blank.
This helped me learn how to do it. Thanks!
Man, you're the best. I spent two hours for tries to send video correctly. Thank you
works like magic , thx
Works fine. I left it as it was and it played video at http://localhost:1337/
I used it to pipe video to my public port http://127.0.0.1:8000/
When the public port received the video it needed no name - just < source src="http://127.0.0.1:1337" type="video/mp4">
It worked fine to broadcast on internet.
I started this side project based on code on this Gist : https://github.com/ricardoalcocer/node_mediasite
Video streaming server under a minute.. Excellent work !!!
It works! But I have one question,
Can I save the current time ends my video in my Javascript? I need to save the current time when start the video in my navigator and when finished the video in the navigator or when I close my navigator.
Nice work. i need to prevent download option on videos in all browser to the users.
can please help
You're using a sync method using Node.js. That's probably the worst thing you could do since the whole process hangs while .statSync() gets invoked.
Hi @paolorossi.
Thanks for share your code. I want to ask to you a question!
How to prevent download video when streaming for user? Thanks!
How would be a live stream? I mean, this way every time you open "localhost:port", it plays the file from the beginning over again
great stuff
thank you so so much!!!!!
yea works. But i need help on how to make play on selected video.
Thanks, man <3, its works as expected.
worked fine I can ssh pipe videos from my VPS
The best!
9 years, and still works flawlessly. Kudos!
Very helpful! Thank you! ❤️
var range = req.headers.range;
console.log("range>>>>>>>>>>>>>>>>>>>>>>>>>>>>> "+range);
var total = fs.statSync("/home/nitin/Minecraft + Node.js + Socket.io = Awesome-dTIv_f-Ll2g.mp4").size;// your video size.. you can use fs.statSync("filename").size to get the size of the video if it is stored in a file system
splitq = range.split(/[-=]/),
start = +splitq[1],
end = splitq[2] ? +splitq[2] : total - 1,
chunkSize = end - start + 1;
Use this one for correct it...enjoy