3

ビデオがブラウザで再生されているとします。動画の下にボタンがあります。ボタンをクリックすると、再生中のビデオのスナップショットがキャプチャされ、その下のスライダーにスナップショットが表示されます。

jQuery または JavaScript で何かが必要です。

4

1 に答える 1

2

ビデオがライブストリームでない場合は、先ほど小さなメディアプロジェクト用に書いたこのコードスニペットで適切な答えを見つけることができます。PHPですが、他の言語でも同じ概念を適用できます

public function actionAjaxSetThumbnailFromFrame()
{
    if(!isset($_POST['Video'], $_POST['Video']['id']) || !isset($_POST['time']))
        throw new CHttpException(400,'Invalid request.');

    $video = Video::model()->findByPk($_POST['Video']['id']);
    $path = Utils::generateUniquePath("thumbnail.jpg", Config::getParam('mediaPath'));

    $command = "ffmpeg  -itsoffset -{$_POST['time']}  -i \"$video->filePath\" -vframes 1 -an -f image2 \"$path\"";
    //generate thumbnail
    exec(
        $command,
        $out,
        $retval
    );

    $thumbnail = new Image();
    $thumbnail->name = basename($path);
    $thumbnail->serverUrl = '';
    $thumbnail->filePath = $path;
    $thumbnail->relativeServerUrl = Utils::relativeUrlPath($path);
    $thumbnail->save();

    [...]
}

この関数は、ビデオIDと保存するフレームの時間を入力として受け取ります。次に、ffmpeg(http://ffmpeg.org/)ユーティリティを使用してスクリーンショットを抽出します。

コアラインは次のとおりです。

$command = "ffmpeg  -itsoffset -{$_POST['time']}  -i \"$video->filePath\" -vframes 1 -an -f image2 \"$path\"";

Javaでは、次のようになります。

String command = "ffmpeg  -itsoffset -"+time+"  -i \""+videoPath+"\" -vframes 1 -an -f image2 \""+screenshotPath+"\"";
Process child = Runtime.getRuntime().exec(command);

次に、ajax呼び出しを作成し、上記の関数を呼び出すためのjavascriptコードが必要です。

于 2012-09-29T21:36:35.717 に答える