2010-10-03 23 views
3

I "m avec curlpp sur de lib boucle afin de télécharger des vidéos de youtubeTélécharger flv à partir de YouTube en utilisant curlpp au-dessus de boucle - vidéo ne joue pas

J'ai réussi à télécharger le flv, mais incapable d'ouvrir. J'ai utilisé un autre téléchargeur vidéo YouTube et télécharger exactement la même vidéo avec exactement la même qualité, j'ai remarqué que les demandes sont les mêmes et la taille du fichier est presque identique - ici, je pense que c'est le problème, Par exemple: MyVideo.flv - 4.55MB WorkingVideo.flv - 4.53MB

Voici le code:

// Callback Function size_t FileCallback(FILE f, char ptr, size_t size, size_t nmemb) { return fwrite(ptr, size, nmemb, f); }

void GetVideo(std::wstring videoUrl) {

FILE * file = fopen("C:\\locatin\\b.flv", "w"); 

if (file) 
{ 
    curlpp::Cleanup cleaner; 
    curlpp::Easy request; 

    // Set the writer callback to enable cURL to write result in a memory area 
    curlpp::types::WriteFunctionFunctor functor(utilspp::BindFirst(utilspp::make_functor(&FileCallback), file)); 
    curlpp::options::WriteFunction *getFileOpt = new curlpp::options::WriteFunction(functor); 
    request.setOpt(getFileOpt); 

    // Setting the URL to retrive. 
    request.setOpt(new curlpp::options::Url(videoUrl)); 
    request.setOpt(new curlpp::options::Verbose(true)); 
    request.setOpt(new Timeout(2000)); 

    std::list<std::string> headers; 
    headers.push_back("Connection: keep-alive"); 
    headers.push_back("Keep-Alive: 115"); 
    headers.push_back("Accept-Encoding: gzip,deflate"); 
    headers.push_back("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"); 
    headers.push_back("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10"); 
    headers.push_back("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); 
    headers.push_back("Accept-Language: en-us,en;q=0.5"); 

    request.setOpt<HttpHeader>(headers); 
    request.perform(); 

    fclose(file); 
} 

}

Toute personne idées ??

Merci.

+0

Salut, j'ai réussi à télécharger le FLV, mais ne peut pas changer le FMT en HD est-ce possible en quelque sorte? –

+0

Oui, vous savez que c'est un 3 appels procédure depuis que vous avez réussi à télécharger une vidéo, Le premier vous donne le FMT, Dans le deuxième appel, vous passez le lien FMT approprié, Utilisez ce http://en.wikipedia.org/wiki/YouTube#Quality_and_codecs à choisissez la qualité tu veux. – YanivH

Répondre

1

Depuis que je "m sur le développement de la plate-forme Windows, j'ai décidé que pour télécharger le fichier que je vais utiliser URLDownloadToFile Info: http://msdn.microsoft.com/en-us/library/ms775123%28VS.85%29.aspx

Celui-ci fonctionne comme un charme, toujours pas pourquoi le fichier enregistre boucle un peu peu différent que IE ou FF ou la fonction ci-dessus win32 api

+0

Après avoir enlevé curlpp et en utilisant seulement curl tout fonctionne très bien, je suppose que c'est un bug dans curlpp ou peut-être que je l'ai utilisé dans un mauvais façon. – YanivH

0

Youtube peut fournir des vidéos codées sur several formats comme h263 (flashvideo), h264, etc. Quel format téléchargez-vous? (this site a également de bonnes informations de formats audio/vidéo youtube)

Utilisez un outil pour vérifier l'en-tête du fichier et assurez-vous que ce que vous avez téléchargé est ok! Si vous êtes sur * nix vous pouvez exécuter fichier sur la ligne de commande: file filename.flv

Une autre possibilité est que vous ne pouvez pas avoir le codec nécessaire pour lire la vidéo. Cela pourrait expliquer pourquoi aucun lecteur vidéo sur votre système n'est capable de lire la vidéo que vous avez téléchargée.

+0

Eh bien, Les formats des deux fichiers sont flv. Encore, celui que j'ai téléchargé en utilisant curl ne joue pas. J'ai comparé les deux fichiers et ils sont identiques mais la taille est un peu différente. Je pense que la façon dont j'écris le fichier est mal en quelque sorte, Mais c'est juste une supposition, j'ai essayé d'écrire le fichier en utilisant un support de flux de curl, mais je reçois le même résultat. – YanivH

+0

Ok mon pote, j'ai compris que le conteneur que vous utilisez est FLV. Mais à l'intérieur, vous pourriez avoir plusieurs formats d'encodage vidéo. Quel codage vidéo est utilisé? h263 ou h264? – karlphillip

+0

Peu importe, j'expliquerai pourquoi: J'ai pris l'URL que j'utilise pour télécharger directement la vidéo, la mettre dans Firefox et la télécharger, j'ajoute le suffixe flv et l'ai joué, ça a fonctionné parfaitement, donc je suis En supposant qu'il doit être dans la façon dont je suis en train d'écrire le fichier ou la façon dont j'utilise curl pour l'obtenir. (Oh et son H263, également essayé celui qui était H264, même problème avec les deux.) – YanivH