Intereting Posts
Transact-SQL: как я токенизировать строку? Не удалось обновить конкретную запись в таблице с помощью сервлета и jsp Разница между производительностью двух запросов sql? Удаление повторяющихся строк из таблицы Как выполнить SQL с комментариями и операциями GO с помощью SqlConnection? динамическое число условий в оракуле sql Эмулирование TO_SECONDS () в более старых версиях MySQL (<5.5.0) Динамическая «строка» в R Как долго должны быть поля электронной почты SQL? Ошибка таймаута – отправка почты через SQL Mail – очередь сервисного брокера Как преобразовать двоичную строку обратно в Byte в CSharp. Hex-номер, созданный SQL Server 2012 Varbinary (8) Переносимый SQL, чтобы определить, существует ли таблица или нет? Является ли порядок полей в предложении WHERE влиять на производительность в MySQL? Сложные отношения активной записи – полиморфные двунаправленные самореференциальные Похоже, что эквивалентные запросы в LINQ и SQL возвращают разные результаты

Как показать изображения из видео в виде предварительного просмотра для плейлиста

Вы, ребята, видели Youtube правильно. Там, пока вы смотрите видео, вы также получите предварительный просмотр связанных видео по ссылке. Итак, как мы можем получить его от самого видео. Возможно ли это сделать. Я могу получить URL-адрес из базы данных и отобразить его .. и когда будет нажата ссылка, он будет воспроизводиться в jQuery-проигрывателе. перед этим предварительный просмотр этого или вы можете сказать, что список воспроизведения будет доступен для пользователя.

Я обновил свой код ссылкой, которую я нашел .. Но все же я не могу получить изображение из видео. Есть ли что-то не так в моем коде .. Пожалуйста, поправьте меня, если я ошибаюсь ..

Ниже приведен код моего интерфейса:

<form id="form1" runat="server"> <div id="examples" runat="server" style="height:100%;width:100%"> <div id="vidhead">Latest Videos</div> </div> </form> 

и я добавляю все свои видео-ссылки из бэкэнд при загрузке страницы, как показано ниже:

  try { con.Open(); com = new SqlCommand("Select videourl, videoname from video order by [vid] desc",con); DbDataReader dr = com.ExecuteReader(); DataTable dt = new DataTable(); if (dr.HasRows) { int i = 0; dt.Load(dr); int rows = dt.Rows.Count; for (i = 0; i < rows; i++) { HtmlGenericControl d = new HtmlGenericControl("div"); HtmlGenericControl s = new HtmlGenericControl("span"); string[] link = new string[rows]; string[] name = new string[rows]; d.Attributes.Add("class", "plst"); s.Attributes.Add("class", "text"); link[i] = dt.Rows[i]["videourl"].ToString(); name[i] = dt.Rows[i]["videoname"].ToString(); string videothumb = link[i]; string svthto="**Path to save Image**"; string imgpath=GetVideoThumbnail(videothumb, svthto, 30); sb.Append("<a id=" + "\"a" + i + "\"" + " href=" + "\"" + link[i] + "\"" + " class=" + "\"links\"" + ">" + name[i] + "</a>"); s.InnerHtml = sb.ToString(); d.Controls.Add(s); examples.Controls.Add(d); sb.Clear(); } } } catch(Exception ex) { ex.Message.ToString(); } public string GetVideoThumbnail(string path, string saveThumbnailTo, int seconds) { string parameters = string.Format("-ss {0} -i {1} -f image2 -vframes 1 -y {2}", seconds, path, saveThumbnailTo); string pathToConvertor = "C:\\Program Files\\ffmpeg\\ffmpeg.exe"; var processInfo = new ProcessStartInfo(); processInfo.FileName = pathToConvertor; processInfo.Arguments = parameters; processInfo.CreateNoWindow = true; processInfo.UseShellExecute = false; File.Delete(saveThumbnailTo); using (var process = new Process()) { process.StartInfo = processInfo; process.Start(); process.WaitForExit(); } if (File.Exists(saveThumbnailTo)) return saveThumbnailTo; else return "File not Found"; } -  try { con.Open(); com = new SqlCommand("Select videourl, videoname from video order by [vid] desc",con); DbDataReader dr = com.ExecuteReader(); DataTable dt = new DataTable(); if (dr.HasRows) { int i = 0; dt.Load(dr); int rows = dt.Rows.Count; for (i = 0; i < rows; i++) { HtmlGenericControl d = new HtmlGenericControl("div"); HtmlGenericControl s = new HtmlGenericControl("span"); string[] link = new string[rows]; string[] name = new string[rows]; d.Attributes.Add("class", "plst"); s.Attributes.Add("class", "text"); link[i] = dt.Rows[i]["videourl"].ToString(); name[i] = dt.Rows[i]["videoname"].ToString(); string videothumb = link[i]; string svthto="**Path to save Image**"; string imgpath=GetVideoThumbnail(videothumb, svthto, 30); sb.Append("<a id=" + "\"a" + i + "\"" + " href=" + "\"" + link[i] + "\"" + " class=" + "\"links\"" + ">" + name[i] + "</a>"); s.InnerHtml = sb.ToString(); d.Controls.Add(s); examples.Controls.Add(d); sb.Clear(); } } } catch(Exception ex) { ex.Message.ToString(); } public string GetVideoThumbnail(string path, string saveThumbnailTo, int seconds) { string parameters = string.Format("-ss {0} -i {1} -f image2 -vframes 1 -y {2}", seconds, path, saveThumbnailTo); string pathToConvertor = "C:\\Program Files\\ffmpeg\\ffmpeg.exe"; var processInfo = new ProcessStartInfo(); processInfo.FileName = pathToConvertor; processInfo.Arguments = parameters; processInfo.CreateNoWindow = true; processInfo.UseShellExecute = false; File.Delete(saveThumbnailTo); using (var process = new Process()) { process.StartInfo = processInfo; process.Start(); process.WaitForExit(); } if (File.Exists(saveThumbnailTo)) return saveThumbnailTo; else return "File not Found"; } 

и вот образ того, что я получаю до сих пор: Образец

Обратите внимание: я не концентрируюсь на видеороликах с трубами. Я спрашиваю о видео, которое храню в папке на стороне сервера. Поэтому, если для этого есть какая-либо техника jquery или какой-либо метод, пожалуйста, дайте мне знать. 🙂

Да, можно делать то, что вы пытаетесь сделать. Во-первых, вам нужно проанализировать идентификатор видео с URL-адреса. Например, возьмите это видео (первое видео YouTube, которое появилось при поиске по адресу stackoveflow, FYI): http://www.youtube.com/watch?v=zsYjsgm4Psg . Идентификатором видео является zsYjsgm4Psg . Цитируя @Asaph из этого сообщения ,

На каждом видеоролике YouTube есть 4 сгенерированных изображения. Они предсказуемо отформатированы следующим образом:

  http://img.youtube.com/vi/<insert-youtube-video-id-here>/0.jpg http://img.youtube.com/vi/<insert-youtube-video-id-here>/1.jpg http://img.youtube.com/vi/<insert-youtube-video-id-here>/2.jpg http://img.youtube.com/vi/<insert-youtube-video-id-here>/3.jpg 

@Asaph из связанного сообщения предоставляет дополнительную информацию о различных изображениях, доступных для видео. На данный момент достаточно знать, что 1.jpg является одним из миниатюр для видео. Используя идентификатор видео выше, мы можем создать URL-адрес для миниатюры как таковой

введите описание изображения здесь

Очевидно, вам понадобится изображение на стороне клиента, и вам нужно будет установить источник этого элемента изображения на созданный вами эскиз, как показано выше.

Я не знаю, можете ли вы это сделать, используя магии html5 и JavaScript в наши дни, но так, как я традиционно знаю о том, как добиться обработки видео на стороне сервера, нужно использовать популярную утилиту преобразования видео в командной строке ffmpeg.

Его можно скачать по адресу http://www.ffmpeg.org/ .

С быстрым поиском я нашел это сообщение на форуме, в котором содержится следующий фрагмент кода:

 string videothumb = uniquefilename + fileExt; Process p; ProcessStartInfo info = new ProcessStartInfo(); info.FileName = "D:\\web\\upload\\ffmpeg.exe"; info.WindowStyle = ProcessWindowStyle.Hidden; info.Arguments = " -i " + "D:\\web\\upload\\files\\" + videothumb + " -vframes 25 -f image2 -vcodec mjpeg " + "D:\\web\\upload\\thumbnails\\" + uniquefilename + "%d.jpg"; p = Process.Start(info); while (!p.HasExited) { Thread.Sleep(10); } 

Теперь это не похоже на лучший фрагмент кода, который я когда-либо видел, но он должен вас начать.

Далее по связанным потокам они также решают, как управлять созданием эскизов.

Прежде всего, я хотел бы поблагодарить @rtpHarry, который познакомил меня с ffmpeg .. иначе я бы не узнал о том, как достичь этого .. Это может быть не единственный способ. Но это был хороший способ для меня .. 🙂 Спасибо @rtpHarry .. +50 за это … 🙂

Ну, после долгого поиска я придумал это решение, и теперь он выглядит круто и прекрасно, и это то, чего я ожидал .. 🙂

Это то, что я делаю в backend page load event.

 con.Open(); com = new SqlCommand("Select * from video order by [vid] desc", con); string thumbname = ""; string newthumb = ""; string newpath = ""; reader = com.ExecuteReader(); if (reader.HasRows) { dt.Load(reader); int rows = dt.Rows.Count; int i = 0; for (i = 0; i < rows; i++) { int[] id = new int[rows]; string[] link=new string[rows]; string[] nid = new string[rows]; id[i] = Convert.ToInt32(dt.Rows[i]["vid"].ToString()); link[i] = dt.Rows[i]["videourl"].ToString(); nid[i]=id[i].ToString(); thumbname = Server.MapPath("~//Images//Video_Thumbs//") + nid[i] + ".jpg"; newthumb = nid[i] + ".jpg"; string link1 = Server.MapPath("~//Videos//") + link[i]; string param = String.Format("-ss {0} -i \"" + link1 + "\" -s 150*120 -vframes 1 -f image2 -vcodec mjpeg \"" + thumbname + "\"",20); Process p = new Process(); p.StartInfo.Arguments = param; p.StartInfo.FileName = Server.MapPath("~\\ffmpeg\\ffmpeg.exe"); p.StartInfo.CreateNoWindow = true; p.StartInfo.UseShellExecute = false; p.Start(); newpath="Images//Video_Thumbs//"+newthumb.ToString(); com1 = new SqlCommand("update video set vidthumb='" + newpath + "' where vid=" + id[i] + "", con); com1.ExecuteNonQuery(); } } con.Close(); 

На данный момент я не создал часть файла для загрузки видео, поэтому я написал этот код при загрузке страницы. Поэтому, когда страница загружает видео из таблицы, «Видео» будет извлекаться один за другим, а кадр в 20 секунд будет записан и сохранен в определенной папке, а также в таблице «Видео». На самом деле проблема заключалась в том, что она не распознавала Server.Mappath без Server.Mappath «~» перед Server.Mappath . Теперь его хорошо работает и прекрасно, и вот образ того, что я ожидал … 🙂

Финальный просмотр

Если кто-то посещает проверяет этот вопрос и ответ, и если у кого-то есть сомнения, пожалуйста, прокомментируйте здесь. Я буду рад помочь вам … и большое спасибо ffmpeg .. 🙂