我需要拍摄在浏览器中播放的视频的快照

时间:2012-05-03 11:37:04

标签: java javascript jquery jquery-plugins mediaelement.js

假设正在浏览器中播放视频。在视频下方,有一个按钮。点击我需要捕捉播放视频的快照&显示在它下方的滑块中。

我需要jQuery或java中的东西。

由于

1 个答案:

答案 0 :(得分: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);

然后你需要一些javascript代码来创建一个ajax调用并调用上面的函数。