Upload large videos to youtube (and others) via Google's 'resumable upload' API, following https://developers.google.com/youtube/v3/guides/using_resumable_upload_protocol
Benchmarked with an 800mb video - this module bypasses the filesize restrictions on node's fs.readFileSync()
(used by the official googleapis node client for uploading) by using fs.createReadStream()
and then piping the stream to Youtube's servers.
Requires OAuth2 tokens from google - packages such as googleapis
(the official nodejs client) and Passport
will do the trick.
If you need a more robust CLI OAuth2 solution, I suggest trying martinheidegger/google-cli-auth instead of the google-auth-cli
that is used in this library's test file.
Install with npm install node-youtube-resumable-upload
The module emits the video metadata that Google responds with on a successful upload, or emits an error if something goes wrong. If monitoring is enabled (it is by default), the number of bytes uploaded is emitted every 5 seconds.
Look at test/test.js for a use-case example, but this is the gist of it:
var ResumableUpload = require('node-youtube-resumable-upload');
var resumableUpload = new ResumableUpload(); //create new ResumableUpload
resumableUpload.tokens = tokens; //Google OAuth2 tokens
resumableUpload.filepath = './video.mp4';
resumableUpload.metadata = metadata; //include the snippet and status for the video
resumableUpload.retry = 3; // Maximum retries when upload failed.
resumableUpload.upload();
resumeableUpload.on('progress', function(progress) {
console.log(progress);
});
resumableUpload.on('success', function(success) {
console.log(success);
});
resumableUpload.on('error', function(error) {
console.log(error);
});