#video #thumbnails #jquery
#Видео #миниатюры #jquery
Вопрос:
Я использую jwplayer для отображения видео на веб-сайте.
Я ищу плагин jQuery, который может извлекать уменьшенные изображения из этих видео, потому что загрузчики загружают только видео, без миниатюр. Моя цель — показать видео в виде миниатюр в таблице (например, Youtube).
Есть идеи, как я могу этого добиться?
Комментарии:
1. почему понижающий голос? Это может быть возможно с помощью html5 fileapi или filereader, поэтому троллям не следует спешить голосовать против!
Ответ №1:
Это не работает с jQuery.Вы не можете заставить jQuery извлекать миниатюры из видеофайла, потому что это библиотека Javascript на стороне клиента, которая даже не знает, что такое «видеофайл».
Что делать вместо этого: Чтобы получить миниатюру видео, вам нужен язык программирования на стороне сервера, который имеет доступ к загруженному видеофайлу. Вероятно, вы можете сделать это с помощью любого языка программирования, если на вашем сервере есть исполняемая программа, которая может извлекать изображения.
Простой рабочий процесс был бы (например): после того, как пользователь загружает файл, ваш веб-сайт вызывает скрипт на сервере, который извлекает миниатюру, и после его завершения вы можете перенаправить пользователя на последнюю страницу.
Итак, например, на вашем сервере вам нужно, ffmpeg
а затем посмотрите , что другие используют для получения миниатюр из видеофайлов.
Комментарии:
1. как насчет html5 FileReader или FileAPI?
2. Я не гуру JS, но сомневаюсь, что это было бы возможно.
Ответ №2:
есть способ с использованием HTML5, исходная ссылка http://jsfiddle.net/vphyr `
<input type="button" id="capture" value="Capture" /> Press play, and then start capturing
<div id="screen"></div>`
var VideoSnapper = {
/**
* Capture screen as canvas
* @param {HTMLElement} video element
* @param {Object} options = width of screen, height of screen, time to seek
* @param {Function} handle function with canvas element in param
*/
captureAsCanvas: function(video, options, handle) {
// Create canvas and call handle function
var callback = function() {
// Create canvas
var canvas = $('<canvas />').attr({
width: options.width,
height: options.height
})[0];
// Get context and draw screen on it
canvas.getContext('2d').drawImage(video, 0, 0, options.width, options.height);
// Seek video back if we have previous position
if (prevPos) {
// Unbind seeked event - against loop
$(video).unbind('seeked');
// Seek video to previous position
video.currentTime = prevPos;
}
// Call handle function (because of event)
handle.call(this, canvas);
}
// If we have time in options
if (options.time amp;amp; !isNaN(parseInt(options.time))) {
// Save previous (current) video position
var prevPos = video.currentTime;
// Seek to any other time
video.currentTime = options.time;
// Wait for seeked event
$(video).bind('seeked', callback);
return;
}
// Otherwise callback with video context - just for compatibility with calling in the seeked event
return callback.apply(video);
}
};
$(function() {
$('video').bind('video_really_ready', function() {
var video = this;
$('input').click(function() {
var canvases = $('canvas');
VideoSnapper.captureAsCanvas(video, { width: 160, height: 68, time: 40 }, function(canvas) {
$('#screen').append(canvas);
if (canvases.length == 4)
canvases.eq(0).remove();
})
});
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>
<video id="video" controls preload="none" width="640" poster="http://media.w3.org/2010/05/sintel/poster.png" onloadedmetadata="$(this).trigger('video_really_ready')">
<source id='mp4' src="http://media.w3.org/2010/05/sintel/trailer.mp4" type='video/mp4' />
<source id='webm' src="http://media.w3.org/2010/05/sintel/trailer.webm" type='video/webm'/>
<source id='ogv' src="http://media.w3.org/2010/05/sintel/trailer.ogv" type='video/ogg' />
</video>
<br />
<input type="button" id="capture" value="Capture" /> Press play, and then start capturing
<div id="screen"></div>
Ответ №3:
Когда пользователь загружает видео, показывайте это видео в <Video/>
теге. Я показываю изображение, чтобы сообщить пользователю, что его видео готово, и он может нажать кнопку загрузить сейчас, чтобы загрузить его на сервер.
Этот MVC-код просто скопируйте и вставьте и протестируйте, чтобы он полностью работал сам по себе
@Html.TextBox("VideoPath", "", new { type = "file", id = "VideoPath", title = "select Only Video Path here" })<br />
<video id="ShowImage" />
Здесь просто используйте input type =file, вы можете сделать это обычным способом с помощью HTML:
document.getElementById('VideoPath').addEventListener('change', putImage, false);
function showImage(src, target) {
var fr = new FileReader();
fr.onload = function () {
target.src = fr.result; //<img src="H://file1.jpg" />
}
fr.readAsDataURL(src.files[0]);
}
function putImage() {
if (!document.getElementById("VideoPath").files[0].type.match('video.*')) {
document.getElementById("ShowImage").style["display"] = "none";
document.getElementById("Error").innerHTML = "Please Select video File Only (Recommended Mp4) Size LowerThan 100mb";
document.getElementById("VideoPath").value = "";
}
else {
document.getElementById("Error").innerHTML = "";
var src = document.getElementById("VideoPath");
var target = document.getElementById("ShowImage");
target.style["display"] = "block";
showImage(src, target);
}
}
Когда пользователь изменяет или выбирает файл, который является видео, вы должны добавить проверку с использованием файла.введите, если хотите. Функция Show image: она просто использует программу чтения файлов javascript для создания файла base64, чтобы поместить его в атрибут src видео или изображения.
цель: является ли тег видео, который я в него вставил, src = 64base видео
поместить изображение: простая функция проверяет, есть ли в файле видео, если да, то оно переходит в else
сделайте src = HTML-тег файла, в котором пользователь выбирает файл, используя его
target= HTML-тег video, в котором пользователь увидит изображение видео
В заключение, когда пользователь загружает видео со своего устройства, я просто показываю видео в теге video без кнопки воспроизведения, чтобы он мог знать, что его видео готово.
Комментарии:
1. Пожалуйста, не публикуйте только код в качестве ответа, но включайте объяснение, что делает ваш код и как он решает проблему вопроса. Ответы с объяснением, как правило, более высокого качества и с большей вероятностью получат положительные отзывы.
2. Хорошо, отметьте, что я буду