IWMSPlaylistParser.ReadPlaylist (C#)
Previous | Next |
IWMSPlaylistParser.ReadPlaylist (C#)
The ReadPlaylist method is called by the server to retrieve a playlist from an INSSBuffer object.
Syntax
Parameters
pBuffer
INSSBuffer object specifying the buffer containing the playlist file.
pPlaylist
IXMLDOMDocument object in which to store the interpreted playlist that can be understood by the server.
pCallback
IWMSPlaylistParserCallback object that is used by the plug-in to report to the server the result of a call to the ReadPlaylist method.
qwContext
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 Values
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 IWMSEventLog object 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 Code
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.
See Also
Previous | Next |