I"m using curlpp on to of curl lib in order to download videos from youtube.
I have managed to download the flv but unable to open it using all sorts of video players.
I used another youtube video downloader and download the exactly same video with the exactly same quality, I've noticed the requests are the same and also the file size is almost identical - here I think is the problem, For example: MyVideo.flv - 4.55MB WorkingVideo.flv - 4.53MB
Here is the 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);
}
}
Any ideas anyone??
Thanks.
Since I"m developing on windows platform I've decided that for downloading the file I'll use URLDownloadToFile Info: http://msdn.microsoft.com/en-us/library/ms775123%28VS.85%29.aspx
This one works like a charm, Still not sure why curl saves the file a little bit different than IE or FF or the above win32 api function.