Скачивание FLV с YouTube с помощью curlpp поверх curl - видео не воспроизводится - PullRequest
3 голосов
/ 03 октября 2010

Я использую curlpp on of curl lib для загрузки видео с youtube.

Мне удалось скачать FLV, но я не могу открыть его с помощью всех видов видеоплееров.

Я использовал другой загрузчик видео с YouTube и загружал точно такое же видео с точно таким же качеством, я заметил, что запросы одинаковы, а также размер файла почти идентичен - здесь, я думаю, проблема, например: MyVideo .flv - 4,55 МБ WorkingVideo.flv - 4,53 МБ

Вот код:

// Callback Function size_t FileCallback(FILE <em>f, char</em> ptr, size_t size, size_t nmemb) { return fwrite(ptr, size, nmemb, f); }</p> <p>void GetVideo(std::wstring videoUrl) {</p> <pre><code> 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); }

}

Любые идеи кто-нибудь ??

Спасибо.

Ответы [ 2 ]

1 голос
/ 04 октября 2010

Поскольку я занимаюсь разработкой на платформе Windows, я решил, что для загрузки файла я буду использовать URLDownloadToFile Info: http://msdn.microsoft.com/en-us/library/ms775123%28VS.85%29.aspx

Это работает как шарм. До сих пор не уверен, почему curl сохраняет файл немного по-другому, чем IE или FF или вышеупомянутая функция win32 api.

0 голосов
/ 03 октября 2010

Youtube может предоставлять видео, закодированные в нескольких форматах , таких как h263 (flashvideo), h264 и т. Д. Какой формат вы загружаете? ( этот сайт также имеет хорошую информацию о аудио / видео форматах YouTube)

Используйте инструмент, чтобы проверить заголовок файла и убедиться, что все, что вы скачали, в порядке! Если вы используете * nix, вы можете выполнить file в командной строке: file filename.flv

Другая возможность заключается в том, что у вас может не быть кодека, необходимого для воспроизведения видео. Это может объяснить, почему ни один видеопроигрыватель в вашей системе не может воспроизводить загруженное вами видео.

...