브라우저에서 비디오가 재생되고 있다고 가정합니다. 동영상 아래에는 버튼이 있습니다. 동영상을 재생하는 스냅 샷을 캡처해야하는 곳을 클릭하면 아래에있는 슬라이더에 &이 표시됩니다.브라우저에서 재생중인 비디오의 스냅 샷을 가져와야합니다.
jQuery 또는 java에서 뭔가가 필요합니다.
감사
브라우저에서 비디오가 재생되고 있다고 가정합니다. 동영상 아래에는 버튼이 있습니다. 동영상을 재생하는 스냅 샷을 캡처해야하는 곳을 클릭하면 아래에있는 슬라이더에 &이 표시됩니다.브라우저에서 재생중인 비디오의 스냅 샷을 가져와야합니다.
jQuery 또는 java에서 뭔가가 필요합니다.
감사
비디오 라이브 스트림이 아닌 경우, 당신은 내가 작은 미디어 프로젝트에 대한 약간의 시간 전에 쓴이 코드에 적절한 답을 찾을 수 있습니다. 그것은 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/) 유틸리티를 사용하여 스크린 샷을 추출합니다.
핵심 라인은 다음과 같습니다
String command = "ffmpeg -itsoffset -"+time+" -i \""+videoPath+"\" -vframes 1 -an -f image2 \""+screenshotPath+"\"";
Process child = Runtime.getRuntime().exec(command);
그런 다음 당신은 Ajax 호출을 작성하고 위의 함수를 호출하는 일부 자바 스크립트 코드가 필요합니다 : 자바에서
$command = "ffmpeg -itsoffset -{$_POST['time']} -i \"$video->filePath\" -vframes 1 -an -f image2 \"$path\"";
이 같은 것을 할 것이다.
어려운 문제에 대한 좋은 해결책. 그러나 두 가지 문제는 - 임의의 명령을 호출하기 위해 수정하지 못하도록'time' 값을 위생 처리해야합니다. 비디오 파일에서 썸네일을 추출하는 것이 잠재적 인 DOS 벡터임을주의해야합니다. 적당히 비싼 작업이므로 누군가가 호출 할 수 없는지 확인해야합니다. –
웃긴다. Google 검색 'JQuery를 사용하여 스크린 샷 캡처'의 첫 번째 결과는 StackOverflow 게시입니다. – mcfinnigan
@Funny OP가 웹 사이트가 아닌 비디오에 대해 이야기하기 때문에 완전히 관련이 없지만. ;) – Yoshi
@ Yoshi, 그가 요구하는 것은 비디오가 재생되는 브라우저의 스냅 샷을 찍는 것이기 때문에 관련이 있습니다. 플래시로 재생하면 어려울 것입니다. – Niranjan