2016-02-20 4 views
0

В моем приложении meteor я использую youtube-dl для загрузки видео с веб-сайтов YouTube и других сайтов; на самом деле, я могу получить информацию о видео со стороны сервера, используя код нижеКак я могу выполнить загрузку видео на стороне клиента с помощью python youtube-dl и meteorjs

var exec = Meteor.npmRequire('child_process').exec; 
    var Future = Meteor.npmRequire("fibers/future"); 

Meteor.methods({ 
    'comman': function(url){ 
     this.unblock(); 
     var future = new Future(); 

     exec("youtube-dl -F " + url, function(error, stdout, stderr) { 

     future.return({stdout: stdout, stderr: stderr}); 
     }); 

     return future.wait(); 
    } 
}); 

и вызов на клиенте

Meteor.call('comman', url, function(error, result){ 
     if (result.stdout) { 
      console.log('output:' + result.stdout); 

     } else { 
      console.log('error:'+ result.stderr); 
     } 
     }); 

Следующий шаг состоит в том, что пользователь может увидеть миниатюру клипа, список доступных форматов, возможность загрузки и сохранения желаемого формата с клиентской стороны;

Как я могу выполнить это? Любые идеи?

Спасибо за вашу помощь

ответ

3

Вы должны добавить этот пакет https://atmospherejs.com/meteorhacks/npm вашего Метеор приложение, чтобы иметь возможность использовать пакеты НПХ.

Затем используйте команду https://www.npmjs.com/package/ytdl-core вместо команды exec с помощью youtube-dl, это проще. Для того, чтобы использовать его, вы должны добавить к packages.json в основной папке:

{ 
    "ytdl-core":"0.7.9", 
} 

Теперь на server.js создать метод с использованием ydtl-жильный пример. Вы должны использовать фьючерсы, чтобы ждать ответа и вернуть его обратно к клиенту:

// load future from fibers 
var Future = Meteor.npmRequire("fibers/future"); 

// load ytdl-core 
var ytdl = Meteor.npmRequire('ytdl-core'); 

Meteor.methods({ 
    // Get info from Youtube video 
    'getVideoInfo':function(videoUrl) { 
    this.unblock(); 
    var future = new Future(); 

    ytdl.getInfo(videoUrl, function(err, result) { 
     future.return(result) 
    }); 
    return future.wait(); 
    }, 
}); 

На client.js:

var videoUrl = "http://youtube.com/watch?v=I8qtzxpDM4k"; 

Meteor.call('getVideoInfo', videoUrl, function(err, result) { 
    console.log(result); 
    console.log (result.thumbnail_url); 
} 

EDIT: Чтобы скачать видео вы можете создать ссылку и нажмите на него с помощью JavaScript. Вам нужно выбрать формат, который вы хотите скачать. В этом примере я загружаю первый доступный формат.

на client.js

var videoUrl = "http://youtube.com/watch?v=I8qtzxpDM4k"; 

Meteor.call('getVideoInfo', videoUrl, function(err, result) { 
    console.log(result); 
    console.log (result.thumbnail_url); 
    downloadLink(result.formats[0].url); 
} 

downloadLink = function(link) { 
    //Create url to download from 
    var url = document.createElement('a'); 
    // Add direct video link to a clickable link 
    url.setAttribute('href', link); 
    // Add download attribute to initiate download 
    url.setAttribute('download', 'filename.mp4'); 
    // Click to start download 
    url.click(); 
} 
+0

Спасибо за ответ; именно то, что я ищу. Как насчет загрузки с клиента? как я могу это сделать после получения url? – abdou

+0

, потому что вы возвращаете форматы [0] - это означает первую ссылку в массиве формата. Вы можете взглянуть на базовый javascript, прежде чем начать с Meteor – mhlavacka

 Смежные вопросы

  • Нет связанных вопросов^_^