3

YouTube から動画をダウンロードするために、curl lib の curlpp を使用しています。

flv をダウンロードすることはできましたが、あらゆる種類のビデオ プレーヤーを使用して開くことができません。

別の YouTube ビデオ ダウンローダーを使用して、まったく同じ品質のまったく同じビデオをダウンロードしました。リクエストが同じで、ファイル サイズもほぼ同じであることに気付きました。ここに問題があると思います。例: MyVideo.flv - 4.55MB ワーキングビデオ.flv - 4.53MB

コードは次のとおりです。

// 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);
}

}

誰でもアイデアはありますか??

ありがとう。

4

2 に答える 2

1

私は Windows プラットフォームで開発しているので、ファイルのダウンロードには URLDownloadToFile 情報を使用することにしました: http://msdn.microsoft.com/en-us/library/ms775123%28VS.85%29.aspx

これは魅力のように機能します.curlがIEやFF、または上記のwin32 API関数とは少し異なるファイルを保存する理由はまだわかりません.

于 2010-10-04T13:28:09.940 に答える
0

Youtubeは、h263(flashvideo)、h264などのいくつかの形式でエンコードされたビデオを提供できます。どの形式をダウンロードしていますか?このサイトには、YouTubeのオーディオ/ビデオ形式に関する優れた情報もあります)

ツールを使用してファイルのヘッダーを確認し、ダウンロードしたものに問題がないことを確認してください。* nixを使用している場合は、コマンドラインで ファイルを実行できます。file filename.flv

もう1つの可能性は、ビデオの再生に必要なコーデックがない可能性があることです。これは、システム上のビデオプレーヤーがダウンロードしたビデオを再生できない理由を説明している可能性があります。

于 2010-10-03T18:21:52.580 に答える