Introduction
This extended version of embedded YouTube™ API demonstrates additional customization features, namely:
- Setting the startup options
- Selecting the item from the playlist
- Setting the autoplay mode
- Setting player's dimension (W/H)
- Changing the border options
- Starting the video at predefined time
Start-up options could be set by using Web Query; as an example, the following query sets the autoplay option and selected item index=2 (see the sample screenshot taken from the functional demo here).
Also, the start-up time for each item could be set programmatically. Notice two command buttons at the bottom of the sample screenshot in Figure 1; clicking on these buttons when the actual application is running will cause the playback to start at a certain predefined position (15 sec and 60 sec correspondingly).

Figure 1: Embedded YouTube™ player with item start-up time set programmatically
Background
This project extends the functionality of embedded YouTube Video Player API described in my previous article, published here (see the sample screenshot in Figure 2 related to the previous project).

Figure 2: Embedded YouTube™ Video Player, sample screenshot
You could also see the functional demo of Data-Bound YouTube™ API here.
Using the Code
Project includes:
- Default Web page "Default.aspx" with corresponding code behind: both to be placed in Application root directory
- Class module YouTubeScript.cs to be placed in App_Code application folder
Sample Web Page includes a Literal1 control, serving as a JavaScript container and a populated DropDownList control with two sample items, serving as a simple playlist:
<%@ Page Language="C#"
AutoEventWireup="true"
CodeFile="Default.aspx.cs"
Inherits="_DEMO" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ Register assembly="AjaxControlToolkit"
namespace="AjaxControlToolkit"
tagprefix="cc1" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>ASP.NET Embedded Video Player | YouTube DEMO</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server" updatemode="Conditional" >
<ContentTemplate>
<div>
<!---->
<asp:DropDownList ID="cmbPlaylist"
runat="server" AutoPostBack="True">
<asp:ListItem Value="x_4CNvG1Q_M">
Anastasia Volochkova dancing (Adiemus)
</asp:ListItem>
<asp:ListItem Value="raRaxt_KM9Q">
Sound Of Silence (Masters of Chant)
</asp:ListItem>
</asp:DropDownList>
<br /><br />
<asp:Literal ID="Literal1" runat="server"></asp:Literal>
</div>
<asp:Button ID="Button1" runat="server"
Text="START AT 15 SEC" onclick="Button1_Click" />
<asp:Button ID="Button2" runat="server"
Text="START AT 60 SEC" onclick="Button2_Click" />
</ContentTemplate>
</asp:UpdatePanel>
<hr />
<h4>Sample Demo: Anastasia Volochkova,
Russian prima ballerina is dancing "Adiemus"</h4>
<h4>Initial settings: 640x505, autoplay=0</h4>
<hr />
More Demo available at: www.webinfocentral.com
<hr />
</form>
</body>
</html>
Code Behind Page
using System;
public partial class _DEMO : System.Web.UI.Page
{
#region init settings
private int _W = 640;
private int _H = 505;
bool auto = false;
#endregion
#region Page Load event
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
#region Start mode customization via Web Query String
int idx = 0;
string qry = "";
try {
qry = "auto";
qry = (Request.QueryString[qry] == null) ?
"" : Request.QueryString[qry];
if (qry != "") { auto = Boolean.Parse(qry); }
} catch { }
try {
qry = "item";
qry = (Request.QueryString[qry] == null) ?
"" : Request.QueryString[qry];
if (qry != "") { idx = int.Parse(qry); }
} catch { }
#endregion
cmbPlaylist.SelectedIndex = idx;
Literal1.Text = YouTubeScript.Get
(cmbPlaylist.SelectedValue, auto, _W, _H);
}
else
{
Literal1.Text = YouTubeScript.Get
(cmbPlaylist.SelectedValue, false, _W, _H);
}
}
#endregion
#region User events
protected void Button1_Click(object sender, EventArgs e)
{
Literal1.Text =
YouTubeScript.Get(cmbPlaylist.SelectedValue, true,
_W, _H, true, "maroon", "", 15);
}
protected void Button2_Click(object sender, EventArgs e)
{
Literal1.Text =
YouTubeScript.Get(cmbPlaylist.SelectedValue, true,
_W, _H, false, "", "", 60);
}
#endregion
}
Note: try-catch blocks in Page_Load event procedure are inserted for future development.
Class Module
using System;
using System.Text;
public static class YouTubeScript
{
#region YouTube Player default script: no autoplay, 320x240
public static string Get(string id)
{ return Get(id, false, 320, 240); }
#endregion
#region YouTube Player script w/autoplay option (320x240)
public static string Get(string id, bool auto)
{ return Get(id, auto, 320, 240); }
#endregion
#region YouTube Player script w/autoplay option (320x240)
public static string Get(string id, int auto)
{ return Get(id, ((auto == 1) ? true : false), 320, 240); }
#endregion
#region YouTube Player script w/selectable: autoplay and W/H
public static string Get(string id, bool auto, int W, int H)
{ return Get(id, auto, W, H, true); }
#endregion
#region YouTube Player script w/selectable: autoplay, W/H and default border
public static string Get(string id, bool auto, int W, int H, bool Border)
{ return Get(id, auto, W, H, Border, "0x2b405b", "0x6b8ab6",0 ); }
#endregion
#region YouTube Player script w/selectable: autoplay, W/H and border color
public static string Get
(string id,
bool auto,
int W,
int H,
string C1,
string C2)
{ return Get(id, auto, W, H, true, C1,C2, 0); }
#endregion
#region YouTube Player script w/selectable: autoplay, W/H and border color
public static string Get
(string id,
bool auto,
int W,
int H,
bool Border,
string C1,
string C2,
int Start)
{
StringBuilder sb = new StringBuilder();
sb.Append(@"<embed src='http://www.youtube.com/v/");
sb.Append(id);
if (auto) sb.Append("&autoplay=1");
sb.Append("&rel=0");
if (Border)
{
sb.Append("&border=1");
sb.Append("&color1=" + @C1);
sb.Append("&color2=" + @C2);
}
if (Start>0) sb.Append("&start=" + Start.ToString());
sb.Append("&fs=1");
sb.Append("' ");
sb.Append("type='application/x-shockwave-flash' ");
sb.Append("id='youTubePlayer" + DateTime.Now.Millisecond.ToString() + "' ");
sb.Append("allowscriptaccess='never' enableJavascript ='false' ");
sb.Append("allowfullscreen='true' ");
sb.Append("width='" + W.ToString() + "' ");
sb.Append("height='" + H.ToString() + "' ");
sb.Append(@"></embed>");
string scr = sb.ToString();
sb = null;
return scr;
}
#endregion
}
Browser compatibility
This technique has been tested against 4 major browsers:
- Microsoft Internet Explorer 7.0+
- Mozilla Firefox
- Google Chrome
- Apple Safari
Points of Interest
Other points of interest may include a video playback customization, related to the linked (not embedded) YouTube video items. These customization technique allows to:
- Start video playback at specific position (set offset in minutes and second)
- Specify the number of video re-plays (Loop)
- Start the video playback in Full Screen Mode
- Turn “Related Video” options ON/OFF
- Set the Autoplay option
- Set the Playback Video Quality
Click on the sample screenshot below to learn more about this useful customization technique
History
- Article was published on 09/15/2009
- Updated on 04/14/2013 with more customization options
References
-
YouTube embedded video player on webinfocentral.com
-
How to customize YouTube® video playback
-
YouTube key stats (05/01/2013)