IWMSPlaylistParser.ReadPlaylist (C#)
The ReadPlaylist method is called by the server to retrieve a playlist from an INSSBufferINSSBuffer Object (C#).
void IWMSPlaylistParser.ReadPlaylist(
INSSBuffer pBuffer,
IXMLDOMDocument pPlaylist,
IWMSPlaylistParserCallback pCallback,
ulong qwContext
);
Arguments
INSSBuffer object specifying the buffer containing the playlist file. |
|
IXMLDOMDocumentIXMLDOMDocument Object (C#) in which to store playlist can be understood by the server. |
|
IWMSPlaylistParserCallbackIWMSPlaylistParserCallback Object (C#) that is used by the plug-in to report to the server the result of a call to the ReadPlaylist method. |
|
ulong containing a value defined by the server to identify which call to ReadPlaylist the plug-in is responding to when it calls IWMSPlaylistParserCallback.OnReadPlaylist. You must pass this value back unaltered when you call OnReadPlaylist. |
Return Value
This method does not return a value. To report an error, the plug-in can throw a COMException object to the server. If the plug-in uses the IWMSEventLogIWMSEventLog Object (C#) to log error information, it is recommended that it throw NS_E_PLUGIN_ERROR_REPORTED (0xC00D157D). Typically, the server attempts to make plug-in error information available to the server object model, the Windows Event Viewer, and the troubleshooting list in the details pane of the Windows Media Services MMC. However, if the plug-in uses the IWMSEventLog object to send custom error information to the Windows Event Viewer, throwing NS_E_PLUGIN_ERROR_REPORTED stops the server from also logging to the event viewer. For more information about plug-in error information, see Identifying Plug-in Errors.
Remarks
This method retrieves a playlist from an INSSBuffer object, parses it, and populates an IXMLDOMDocument object. This method is implemented by the plug-in and called by the server.
Example
The following is a sample user-defined playlist that can be parsed by the ReadPlaylist method.
!- DJ_FILE v1.0 -! (this is a required tag)
media1.wmv
!- This is a comment -!
media2.wmv
!- Attributes apply to the next media element -!
# author=\"My Name\"
# description=\"My media file\"
# repeatCount=\"5\"
media3.wmv
This implementation of the ReadPlaylist method will parse the user-defined playlist.
void IWMSPlaylistParser.ReadPlaylist(
INSSBuffer pBuffer,
IXMLDOMDocument pPlaylist,
IWMSPlaylistParserCallback pCallback,
ulong qwContext)
{
IXMLDOMNode pNode;
IXMLDOMElement pSMIL;
IXMLDOMElement pElement;
int i;
uint pdwLength;
IntPtr pPlsBuf;
string strPlsBuf = "";
string strEntry;
string[] strPlsEntries;
Queue colAttributes = new Queue();
Decoder Dec = Encoding.UTF8.GetDecoder();
char[] Chars;
byte[] Bytes;
int iChars;
try
{
pNode = pPlaylist.createNode(
tagDOMNodeType.NODE_PROCESSING_INSTRUCTION, "wsx", "");
pPlaylist.appendChild(pNode);
pNode.text = "version='1.0'";
pSMIL = pPlaylist.createElement("smil");
pPlaylist.appendChild(pSMIL);
pBuffer.GetBufferAndLength(out pPlsBuf, out pdwLength);
Bytes = (byte[])Array.CreateInstance(typeof(byte),
Convert.ToInt32(pdwLength));
Marshal.Copy(pPlsBuf, Bytes, 0, Convert.ToInt32(pdwLength));
iChars = Dec.GetCharCount(Bytes, 0, Convert.ToInt32(pdwLength));
Chars = (char[])Array.CreateInstance(typeof(char), iChars);
iChars = Dec.GetChars(Bytes, 0, Convert.ToInt32(pdwLength),
Chars, 0);
for( i = 0; i < Chars.Length; i++ )
{
strPlsBuf = strPlsBuf + Chars[i];
}
strPlsBuf = strPlsBuf.TrimStart();
if( !strPlsBuf.StartsWith("!- DJ_FILE v") )
{
pCallback.OnReadPlaylist((int)E_FAIL, qwContext);
return;
}
strPlsEntries = strPlsBuf.Split('\n');
foreach( string strLine in strPlsEntries )
{
strEntry = strLine;
strEntry = strEntry.TrimStart();
strEntry = strEntry.TrimEnd();
if( !strEntry.Equals("") )
{
if( strEntry.StartsWith("#") )
{
strEntry = strEntry.Remove(0, 1);
strEntry = strEntry.TrimStart();
strEntry = strEntry.Replace("\"", "");
i = strEntry.IndexOf("=");
colAttributes.Enqueue(strEntry.Substring(0, i));
colAttributes.Enqueue(strEntry.Substring(i + 1,
strEntry.Length - i - 1));
}
else if( !strEntry.StartsWith("!-") )
{
pElement = pPlaylist.createElement("media");
pElement.setAttribute("src", strEntry);
for( int j = 0; j < (colAttributes.Count * 2); j++ )
{
pElement.setAttribute(
(string)colAttributes.Dequeue(),
(string)colAttributes.Dequeue());
}
pSMIL.appendChild(pElement);
}
}
strEntry = "";
}
pCallback.OnReadPlaylist(S_OK, qwContext);
}
catch
{
pCallback.OnReadPlaylist(E_FAIL, qwContext);
}
}
Requirements
Reference: Add a reference to Microsoft.WindowsMediaServices.
Namespace: Microsoft.WindowsMediaServices.Interop.
Assembly: Microsoft.WindowsMediaServices.dll.
Library: WMSServerTypeLib.dll.
Platform: Windows Server 2003, Enterprise Edition; Windows Server 2003, Datacenter Edition; Windows Server 2008.