2012-05-03 7 views
3

브라우저에서 비디오가 재생되고 있다고 가정합니다. 동영상 아래에는 버튼이 있습니다. 동영상을 재생하는 스냅 샷을 캡처해야하는 곳을 클릭하면 아래에있는 슬라이더에 &이 표시됩니다.브라우저에서 재생중인 비디오의 스냅 샷을 가져와야합니다.

jQuery 또는 java에서 뭔가가 필요합니다.

감사

+2

웃긴다. Google 검색 'JQuery를 사용하여 스크린 샷 캡처'의 첫 번째 결과는 StackOverflow 게시입니다. – mcfinnigan

+0

@Funny OP가 웹 사이트가 아닌 비디오에 대해 이야기하기 때문에 완전히 관련이 없지만. ;) – Yoshi

+0

@ Yoshi, 그가 요구하는 것은 비디오가 재생되는 브라우저의 스냅 샷을 찍는 것이기 때문에 관련이 있습니다. 플래시로 재생하면 어려울 것입니다. – Niranjan

답변

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/) 유틸리티를 사용하여 스크린 샷을 추출합니다.

핵심 라인은 다음과 같습니다

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\""; 

이 같은 것을 할 것이다.

+1

어려운 문제에 대한 좋은 해결책. 그러나 두 가지 문제는 - 임의의 명령을 호출하기 위해 수정하지 못하도록'time' 값을 위생 처리해야합니다. 비디오 파일에서 썸네일을 추출하는 것이 잠재적 인 DOS 벡터임을주의해야합니다. 적당히 비싼 작업이므로 누군가가 호출 할 수 없는지 확인해야합니다. –

관련 문제