Saturday, February 13, 2010

Play Streaming Videos on SharePoint

As we all know that SharePoint 2007 can not play streaming Videos out-of-the box so i decided to find out a way by which you can stream videos on your MOSS 2007 site so i turned to my best friend... Google. I found a little material on the web where i came to know that to play streaming videos on the web you need a Streaming Server. So i decided to integrate SharePoint with a streaming Server. To play streaming videos Microsoft provides something called as Windows Media Services.Windows Media Services (WMS) is a streaming media server from Microsoft  that allows an administrator to generate streaming media (audio/video). It is an update for Windows Server operating system. You can install it on your Windows Server 2003/2008 as a windows server role and then your server will be a Streaming Server.

Ok so after this introduction to Windows Media Services (WMS) let us move ahead and look at the steps to integrate SharePoint with WMS.

Once Windows Media Services is Installed open the Windows Media Services Manager.

In the WMS Manager click the tab called Announce (using this you can create a Video Stream)

The media stream that WMS creates uses mms protocol the link that it will generate can be put directly in Windows Media Player to play the video stream but you can not store this link in SharePoint because the Link List in SharePoint only takes http protocol so we will run the Unicast Announcement Wizard which will create asx file which supports http protocol.

Clicking on the "Run Unicast Announcement Wizard" will start the Unicast Announcement Wizard. Click on Next

On the "On-Demand Directory" window click the browse button and select a video that you want to stream then click on Next


On the Access the Content Screen click on Next

On the Save Announcement Option screen select the path where you want to save the announcement. I decided to save the asx file on an IIS web site so that i can get an hhtp link to that file. So i created a simple IIS website called Media Services and gave its physical path as "C:\Inetpub\wwwroot\Media" and saved the asx file on the same path



On the Edit Announcement Metadata page you add metadata to the asx file and then click Next

On the Complete Announcement Wizard Page click Finish.

Till now we have a Video Stream created but now we need a Video Player web part to play this stream on the SharePoint site.

So the next step is to create Media Player Web part. I created a simple webpart which embeds the Windows Media Player on the SharePoint page and takes the source parameter of the Video dynamically from the query string. The following is the code for the Media Player Web Part.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using Microsoft.SharePoint;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI;
namespace MediaPlayerWebPart
{
    public class MediaPlayer : WebPart
    {
        private string videoPath = string.Empty;
        [WebBrowsable(true), Personalizable(true), WebDisplayName("Video Path")]
        public string VideoPath
        {
            get
            {
                return ((this.videoPath == null) ? string.Empty : this.videoPath);
            }
            set
            {
                this.videoPath = value;
            }
        }
        private string width = "192";
        [WebBrowsable(true), Personalizable(true), WebDisplayName("Width")]
        public string Width
        {
            get
            {
                return ((this.width == null) ? string.Empty : this.width);
            }
            set
            {
                this.width = value;
            }
        }
        private string height = "190";
        [WebBrowsable(true), Personalizable(true), WebDisplayName("Height")]
        public string Height
        {
            get
            {
                return ((this.height == null) ? string.Empty : this.height);
            }
            set
            {
                this.height = value;
            }
        }
        protected override void CreateChildControls()
        {
            //if(Page.Request.QueryString["VideoPath"] != null || Page.Request.QueryString["VideoPath"] != string.Empty)
              if (Page.Request.QueryString["VideoPath"] != null)
            {
                videoPath = Page.Request.QueryString["VideoPath"].ToString();
            }
            this.Controls.Add(new LiteralControl("<body><OBJECT ID=\"MediaPlayer\" WIDTH=\"" + width + "\" HEIGHT=\"" + height + "\" CLASSID=\"CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95\"STANDBY=\"Loading Windows Media Player components...\" TYPE=\"application/x-oleobject\"><PARAM NAME=\"FileName\" VALUE=\"" + videoPath + "\"><PARAM name=\"autostart\" VALUE=\"true\"> <PARAM name=\"ShowControls\" VALUE=\"true\"><param name=\"ShowStatusBar\" value=\"false\"><PARAM name=\"ShowDisplay\" VALUE=\"false\"><EMBED TYPE=\"application/x-mplayer2\" SRC=\"" + videoPath + "\" NAME=\"MediaPlayer\"WIDTH=\"192\" HEIGHT=\"190\" ShowControls=\"1\" ShowStatusBar=\"0\" ShowDisplay=\"0\" autostart=\"0\"> </EMBED> </OBJECT> </body>");
}


Next.. create a Links List on a SharePoint site and add the link to the asx file that we just created.

Once all this is done add the Media Player Web Part and a List View Web Part showing the list of videos on a SharePoint Web Part Page. For this PoC I added a DataView web part of this Links list which displayed the Name of the Video as a hyperlink to the same page with the url of the Video as the query string so that the Media Player Web Part picks up the source of the Video from the Query string and plays the Video.

So here it is Video Streaming on SharePoint!!!

Now you can play videos from your Streaming Server directly on SharePoint.

Tuesday, February 9, 2010

Configuring MOSS farm with cross domain WFE and Application Server

Hello there,

Recently we were trying to create a farm where we have a WFE (Web Front End) Server in a domain called Domain 2 and its MOSS Application Server in Domain 1. WFE is used to handle the Internet users whereas Application server is used to handle intranet users.






Here in this blog i will try to explain step by step process that we took in order to achieve the required topology and also will list all the gotchas that we faced. In our farm we used exclusively Windows Server 2008 R2 operating system for the reason that we believe in working on cutting edge. With this being said lets start with the configuration steps.

  1. Our first assumption is that we have two fully functional domains setup with all the required user accounts functional, viz a domain administrator account is needed for the time being at both the domains :)
  2. To Domain 1 add a Server box and install MOSS and SQL Server to it. If required MOSS and SQL server can be also in two different boxes, but we managed with a single box. Here take care that you install the required Servers with domain admin account or else later we would have to update farm administrator and add permissions to SQL Server. (Installation and configuration steps for MOSS and SQL Server are not covered).
  3. Now, establishing domain trust is required. For this purpose go to any of the DC machine and open Active Directory Domains and Trusts. But wait..... before this step go to you TCP/IPv4 properties in Network and Sharing Centre and add the other DNS server ip address in the alternate DNS field. By other DNS server i mean that the DNS server that the other DC is using. In our case we have configured DNS in the same box. Do this for both the DCs. Now in Active Directory Domains and Trusts right click on the listed domain and go to properties. Go to trust Tab and click New Trust. Select the the option mentioning two way trust. It should be noted that we can also create incoming and outgoing trust between domains can be set-up, but to be on the safer side we decided to create two way trust. In the wizard it will ask for domain administrator credentials, provide it and complete the wizard. Now the domain trust is created, we can cross check it by logging in to the other DC and check out the Active Directory Domains and Trust console.
  4. Now on Domain 2 add another box on which we will install MOSS with WFE role. Again in TCP/IPv4 properties of this box put the IP address of Domain 1 DNS in alternate DNS feild. Do the same for MOSS Server box. You will now notice that you can add users form Domain 1 into Domain 2. Add the domain admin (Domain1Admin-- account with which MOSS Server was configured) account of Domain 1 into Administrators group of WFE box. Log out and log in with the Domain1Admin account and start installing WFE role of MOSS in it. After installation run the SharePoint Product and Technologies Configuration Wizard. Select the option Add to an existing Farm. On next step give the SQL server name and click on Find Database button. Now this wizard will populate two thing for you. Config database and the farm administrator account. Verify that the farm administrator account is the account that you are logged in with. click next and finish the configuration wizard. If the wizard fails at step 2 then the possibility is that the Web application owner credentials does not match with the logged in account. Change those credentials from central admin and restart the configuration wizard at WFE end. After completing the wizard open the CA site at WFE.
  5. If the home page of CA shows that the WFE is not configured, go to Operations and Services on Server, there check that the Web Application Services has started on not... it might happen that its on Starting. To resolve this manually stop and start the service using stsadm command.
If you follow these 5 steps you will have fully functioning farm with required topology. Will evaluate the advantage and other challenges faced in functioning of this topology and soon update the blog. So keep checking.......

You can shoot me a mail if you have any queries regarding the blog or suggest any improvements in the blog.

Till then.... Enjoy SharePointing :)

Regards
Juzar Bharmal
MCP (SharePoint 3.0 Configuration and Development)
juzar30986@gmail.com
when going gets tough.... great ones party ;)