You guys Have seen Youtube right. There while you are watching a video, You will also get related videos preview alongwith link. So how we can get it from video itself.. Is it possible to do so.. I am able to get the url from database and display it.. and when the link is clicked it will be played in a jquery player.. So before that a preview of that or you can say playlist of that will be available for user.
I have updated my code with a link I found.. But still I am not able to get the Image from Video.. Is there anything wrong in my code.. Please correct me if I am wrong..
Below is my front end code:
<form id="form1" runat="server">
<div id="examples" runat="server" style="height:100%;width:100%">
<div id="vidhead">Latest Videos</div>
</div>
</form>
and I am adding all my video links from backend on page load as shown below:
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";
}
and here is the image of what I am getting until now:
Please note: I am not concentrating on you tube videos. I am questioning regarding the videos which I store in server side folder. So if there is any jquery technique or any sort of technique to do this then please let me know.:)
First of all I would like to thank @rtpHarry who introduced me to ffmpeg.. otherwise I wouldn't come to know about how to achieve this.. This might not be the only way.. But this was good way for me.. :) Thanks @rtpHarry.. +50 for that... :)
Well after a long search I have come up with this solution and it looks cool and fine now and this is what I was expecting.. :)
This is what I do in backend page load event.
As of now I have not designed the fileupload part for the videos so I have written this code in page load. So when ever the page loads the videos from the table "Video" will be retrieved one by one and a frame at 20sec time will be captured and saved in a specific folder and also in table "Video". Actually, the problem was, it was not recognizing the
Server.Mappath
without "~" sign before the path. Now its working well and fine and here is the image of what I was expecting... :)If anyone visits checks this question and answer and if anyone has some doubt then please comment here.. It will be my pleasure to help you people... and Great thanks to ffmpeg.. :)
Yes, it's possible to do what you're trying to do. First, you'll need to parse out the ID of the video from the URL. For example, take this video (first YouTube video that came up when searching stackoveflow, FYI) URL: http://www.youtube.com/watch?v=zsYjsgm4Psg. The video ID of that is
zsYjsgm4Psg
. Quoting @Asaph from this post,@Asaph from the linked post provides more information about the different images that are available for a video. For now, suffice it to know that 1.jpg is one of the thumbnails for the video. Using the video ID from above, we can build up a URL for a thumbnail as such
You're going to need an image on the client side obviously, and you'll need to set that image element's source to the thumbnail URL you generate as shown above.
I dont know if you can pull this out using the magic of html5 and JavaScript these days but the way I traditionally know of achieving video manipulation on the server side is to use a popular command line video conversion utility call ffmpeg.
It can be downloaded at http://www.ffmpeg.org/.
With a quick search I found this forum post which contained the following snippet of code:
Now that doesn't seem like the best piece of code I've ever seen but it should get you started.
Further down the linked thread they also solve how to control which thumbnails are generated.