This was a simple solution I built for a SharePoint user group presentation to show the power of Lists.
Videos can be added to list items as attachments and when the list item is opened, the video is embedded in the list view item page using Silverlight.
Yes, I know Microsoft created the Asset library but you don't get that feature with SharePoint Foundation. I could have also used a document library to store the video but then it would have had anything to do with the topic of my user group presentation;-) It also seemed much easier to initiate the "New" item process from a list rather than a document library which would have involved a 2 step process (upload video then edit properties to add metadata).
It is interesting to look at how attachments are handled in lists. You can see via SharePoint Designer that each attachment is stored in a sub folder

I could even get to these folder from Windows Explorer (\\server\davwwwroot\training\Lists\Videos\Attachments\1)
In this solution I make use of the lists web service to access the attachments.
The solution is made up of a web part page, custom list item display form and 2 lists.
The web part page looks like this and has 2 web parts with a connection so that selecting a product will filter the list of relevant videos.

The display item page looks like this and has the video player for the list item attachment included on the page.

The 2 lists are defined as follows:
List: Products (based on Custom list template)
Â
Column: Title
Rename field to Product
Column: icon (Hyperlink or Picture column)
OOTB Attachment support. Upload icon as attachment to list item and copy the attachment url into this field (could be automated with workflow or calculated column + script).
Better solution from ArtfulBits: http://j.mp/y5RqZa
Other list settings
Default view sort order: By Title
Hide from quick launce navigation
Search items in this list disabled
Â
List: Videos (based on Custom list template)
Â
Column: Title
Rename field to Product
Column: Description
Multiple lines of text (plain text is easier to deal with in the data view web part).
Column: Product (lookup to Products – Title)
Â
Column: Level (Choice)
Beginner
Intermediate
Advanced
Column: Topic (Choice)
This is used to group short videos into a series.
What's New
(allow Fill-in choices)
Other list settings
Upload video as attachment to list item
Default view sort order: By Title
Default view group by: Series
Â
The web part page can be created entirely in the browser UI. I find it useful to disable the Tabular View option in the web part view to remove the row selection tick boxes.
The connection can only be made when the page is in edit mode.

Note: I found a bug – because the connection is based on a lookup field, the web part connection will fail for product titles that have a space in them. This can only be fixed by editing the connection in SharePoint Designer.
It seems the ddwrt:ConnEncode(string(@Title)) puts %20 in place of a space but the receiving web part the string comparison doesn't decode the connection parameter so it doesn't find a match.
If you do fix this problem in SPD (as I did), never edit the web part connection in the browser, otherwise you lose your customization (as I did while writing this)
The Display Item page is edited with SharePoint designer to hide the default web part and add 2 additional web parts:

Hide the default List Form web part by setting the web part properties Layout/Hidden value to True.
Add a Data View web part of the Videos List with only the Title and Description fields visible. Because I built this so that it would work with SharePoint Foundation I didn't include rating or tagging fields but these would be great additions if you do have the full server version:

Create a parameter for the web part to get the current list item ID from the URL

Set the Paging limit to 1 item.
You should test the page at this point to check that the correct item is displayed in the page when you select to view it from the list.
Add a new SOAP Services Data Source called VideoAttachments with the following settings:

Note: listName GUID value can be obtained from the List settings page. listItemID is set to 1 as a default value but will be replaced at runtime by the web part connection.
Add another Data View to the page for the VideoAttachment data source:

In the code view for the web part, find the <xsl:template name="dvt_1.rowview"> and after the first <table> tag within this template, place the following code:
<tr>
    <td width="75%" class="ms-vb">
        <div id="silverlightControlHost{generate-id()}">
        <xsl:text disable-output-escaping="yes"><![CDATA[<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="640" height="480">
        <param name="source" value="/training/VideoPlayer.xap" />
        <param name="background" value="white" />
        <param name="initParams" value="m=]]></xsl:text>
        http://<xsl:value-of select="$Hosturl" /><xsl:value-of select="$relVideoUrl" />
<xsl:text disable-output-escaping="yes"><![CDATA[">
<param name="minruntimeversion" value="2.0.31005.0" />
<a href="http://go.microsoft.com/fwlink/?LinkId=124807" style="text-decoration: none;"><img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none" /></a>
        </object>]]></xsl:text>
        </div>http://<xsl:value-of select="$Hosturl" /><xsl:value-of select="$relVideoUrl" />
</td>
</tr>
Note: Download VideoPlayer.xap from codeplex.com http://slvideoplayer.codeplex.com/ and place in folder or library (training document library in my case). Copy paste this code via Notepad if required.
Create a web part connection between the 2 new web parts on the page.

Next step is to connect to another web part on this page, then…



After saving the page, you can test it out from the Videos list by selecting an item to view.
Clicking on an an item from the web part page should also display the video.
One important lesson I learnt from building this solution, be careful of absolute URL's if you are using Alternate Access Mappings (AAM). When you create a SOAP data source in SharePoint designer, the resulting dataview configuration FQDN address for the SharePoint web service is not AAM aware. Edit the data source xml file in SharePoint Designer before you add the DVWP to a page or edit the DVWP directly to make the web service URL relative.