Скачать как браузер, используя CURL для ffmpeg - PullRequest
0 голосов
/ 11 августа 2011

Я хочу ввести HTTP-файл в параметре ffmpeg, и я попробовал этот код

<?php

    $fname=time().'_myfile.mp3';
    $cmd = "/usr/local/bin/ffmpeg -i 'http://tinyurl.com/url' -vn -b 64k -f mp3 -acodec libmp3lame - $fname"; 
    header('Content-type: audio/mpeg');
    header("Content-Type: application/octet-stream");
    header("Content-Disposition: attachment; filename=\"$fname\"");
    passthru($cmd);

>?

Я пытался передать URL tinyurl, но ffmpeg не удалось создать файл. Этот код работает нормально, если я передаю какой-то другой прямой URL-адрес параметру.

Я думаю о создании одного файла PHP и использовании CURL с правильными заголовками и передаче этого файла PHP во входной параметр, это будет работать? Проще говоря, ffmpeg не удалось, если ввод не является прямой ссылкой. Что мне делать?

Кто-нибудь может мне помочь в этом?

1 Ответ

0 голосов
/ 11 августа 2011

На основании комментария от http://getsatisfaction.com/soup/topics/reverse_lookup_for_tinyurls Вы можете использовать нижеприведенную функцию curl, чтобы получить реальный URL, с которого вы сможете продолжить работу, как планировалось.

function resolve($url)
{
    $options = array(
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HEADER => true,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_ENCODING => "",
        CURLOPT_USERAGENT => "spider",
        CURLOPT_AUTOREFERER => true,
        CURLOPT_CONNECTTIMEOUT => 120,
        CURLOPT_TIMEOUT => 120,
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_NOBODY => 1
    );

    $ch = curl_init($url);
    curl_setopt_array($ch, $options);
    $content = curl_exec($ch);
    $err = curl_errno($ch);
    $errmsg = curl_error($ch);
    $header = curl_getinfo($ch);
    curl_close($ch);
    return $header['url'];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...