2013-07-23 2 views
1

Вы, ребята, видели 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"; 
} 

и здесь есть образ того, что я не подвожу до сих пор: Sample

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

ответ

0

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

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

Это то, что я делаю в случае загрузки страницы на бэкэнд.

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 без знака ~ ~ перед дорожкой. Теперь его хорошо работает и хорошо, и здесь есть образ того, что я ожидал ... :)

Final View

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

4

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

На каждом видеоролике 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 для миниатюры как такового

enter image description here

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

+0

Я очень благодарен за ответ, но то, что я пытаюсь сделать, я сохраняю это видео из папки на стороне клиента, чтобы на стороне сервера, где будут сохранены видео. Скажем, что я загружаю видео из своей системы. Так будет ли этот метод работать для метода I o/pt. –

+0

Хорошо, что я сказал в значительной степени, просто подскажет вам, как создать URL-адрес одного из больших пальцев YouTube. Можете ли вы прояснить этот комментарий? Я не понимаю, что вы пытаетесь сделать, я думал, что вам нужен только эскиз, поэтому вы можете отобразить это. –

+0

Позвольте мне рассказать об этом. Пользователь сказал, что у администратора есть видео, и он загружает его. Мой код сохраняет загруженный URL-адрес видео в базе данных, а также в папке на стороне сервера и в то время, когда я ссылаюсь на это видео из папки, существующей на стороне сервера. Итак, как я могу получить изображение с этого видео. У вас появилась некоторая идея сейчас .. Пожалуйста, дайте мне знать ... Спасибо ... :) –

1

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

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

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

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); } 

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

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

+0

, вероятно, это проблема с разрешениями. это папка, которую вы сохраняете внутри веб-сайта? вы пытались запустить его из командной строки удаленного компьютера, чтобы подтвердить, что приложение ffmpeg работает так, как вы ожидаете? – rtpHarry

+0

@rtpHarry .. Спасибо за ответ .. Я думаю, у меня есть ссылка, которая может быть полным решением для моей проблемы .. Попробует это и опубликует, если это возможно .. Ну, действительно, спасибо за то, что у cs ur ответ дал базовое представление о том, как проблема может быть решена. Спасибо ... :) –

Смежные вопросы