<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>s.ghosh</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/sghosh/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/sghosh/feed.xml</link>
    <description />
    <lastBuildDate>Wed, 17 Apr 2019 03:50:23 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Programmatic management of IIS</title>
      <link>https://docs.microsoft.com/archive/blogs/sghosh/programmatic-management-of-iis</link>
      <pubDate>Tue, 29 May 2012 09:28:53 GMT</pubDate>
      <dc:creator><![CDATA[mschap]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/sghosh/2012/05/29/programmatic-management-of-iis/</guid>
      <description><![CDATA[Creation of Application Pool on IIS
Note: Add Microsoft.Web.Management.dll as reference(This can be...]]></description>
      <content:encoded><![CDATA[<h1><span style="color: #365f91;" color="#365f91"><span style="font-family: Cambria;" face="Cambria">Creation of Application Pool on IIS</span></span></h1>
<p><span style="color: #365f91; font-size: medium;" color="#365f91"><span style="font-family: Cambria;" face="Cambria">Note: Add Microsoft.Web.Management.dll as reference(This can be found Windows/system32/inetsrv folder)</span></span></p>
<p><span style="font-family: Calibri; font-size: small;" face="Calibri" size="3">&nbsp;</span><span style="font-family: Calibri; font-size: small;" face="Calibri" size="3">1)</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size: small;" size="3"><span style="font-family: Calibri;" face="Calibri">Create a class structure to take input parameters for Creation of Application Pool</span></span></p>
<pre class="scroll"><code class="cplusplus"> /// &lt;summary&gt;<br /> /// This class just provides parameters for application pool creation.<br /> /// &lt;/summary&gt;<br /> public class ApplicationPoolParams<br /> {<br /> public ApplicationPoolParams(string appPoolName,string metabasePath, uint queueLength,string managedRuntimeVersion,ManagedPipelineMode managedPipeLineMode,<br /> ProcessModelAppPool processModel, RecyclingAppPool recycleAppPool,CpuAppPool cpuAppPool)<br /> {<br /> Name = appPoolName;<br /> MetabasePath = metabasePath;<br /> QueueLength = queueLength;<br /> ManagedRuntimeVersion = managedRuntimeVersion;<br /> PipelineMode = managedPipeLineMode;<br /> ProcessModelData = processModel;<br /> RecycleAppPoolData = recycleAppPool;<br /> CpuData = cpuAppPool;<br /> }<br /> public string Name { get; set; }<br /> public string MetabasePath { get; set; }<br /> public uint QueueLength { get; set; }<br /> public string ManagedRuntimeVersion { get; set; }<br /> public ManagedPipelineMode PipelineMode { get; set; }<br /> public ProcessModelAppPool ProcessModelData { get; set;}<br /> public RecyclingAppPool RecycleAppPoolData { get; set; }<br /> public CpuAppPool CpuData { get; set; }<br /> <br /> }<br /> public class ProcessModelAppPool<br /> {<br /> public ProcessModelAppPool(TimeSpan idleTimeOut,uint maxProcesses)<br /> {<br /> IdleTimeout = idleTimeOut;<br /> MaxProcesses = maxProcesses;<br /> <br /> }<br /> public TimeSpan IdleTimeout { get; set; }<br /> public uint MaxProcesses { get; set; }<br /> }<br /> public class RecyclingAppPool<br /> {<br /> public RecyclingAppPool(bool isOverlappingRotation,bool isRotationOnConfigChange, PeriodicRestartAppPool periodic)<br /> {<br /> DisallowOverlappingRotation = isOverlappingRotation;<br /> DisallowRotationOnConfigChange = isRotationOnConfigChange;<br /> PeriodicRestartData = periodic;<br /> }<br /> <br /> public bool DisallowOverlappingRotation { get; set; }<br /> public bool DisallowRotationOnConfigChange { get; set; }<br /> public PeriodicRestartAppPool PeriodicRestartData { get; set; }<br /> <br /> }<br /> public class PeriodicRestartAppPool<br /> {<br /> public PeriodicRestartAppPool(int privatememory,int memory,int requests,TimeSpan timespan)<br /> {<br /> PrivateMemory = privatememory;<br /> Memory = memory;<br /> Requests = requests;<br /> Time = timespan;<br /> }<br /> public int PrivateMemory { get; set; }<br /> public int Memory { get; set; }<br /> public int Requests { get; set; }<br /> public TimeSpan Time { get; set; }<br /> <br /> }<br /> public class CpuAppPool<br /> {<br /> public CpuAppPool(int limit,CpuActions action)<br /> {<br /> Limit = limit;<br /> Action = action;<br /> }<br /> public int Limit { get; set; }<br /> public CpuActions Action { get; set; }<br /> }<br /> public enum CpuActions<br /> {<br /> NoAction,<br /> KillW3wp<br /> }<br /> public static class VersionName<br /> {<br /> public static string Version2 = "v2.0";<br /> public static string Version4 = "v4.0";<br /> public static string UnManaged = "No Managed Code";<br /> }</code></pre>
<p><span style="font-size: small;" size="3"><span style="font-family: Calibri;" face="Calibri"></span></span></p>
<p><span style="font-family: Calibri; font-size: small;" face="Calibri" size="3">2)</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size: small;" size="3"><span style="font-family: Calibri;" face="Calibri">Create Application Programmatically using the parameters set in the above class</span></span></p>
<pre class="scroll"><code class="cplusplus">/// &lt;summary&gt;<br /> /// Function to create Application Pool.<br /> /// &lt;/summary&gt;<br /> /// &lt;param name="appPoolData"&gt;Class Object with Input application pool data&lt;/param&gt;<br /> public static void CreateAppPool(ApplicationPoolParams appPoolData)<br /> {<br /> Console.WriteLine("\nCreating application pool named {0}/{1}:", appPoolData.MetabasePath, appPoolData.Name);<br /> try<br /> {<br /> if (appPoolData.MetabasePath.EndsWith("/W3SVC/AppPools"))<br /> {<br /> DirectoryEntry newpool;<br /> DirectoryEntry apppools = new DirectoryEntry(appPoolData.MetabasePath);<br /> using (var manager = new ServerManager())<br /> {<br /> ApplicationPool appPoolIIS = manager.ApplicationPools.FirstOrDefault&lt;ApplicationPool&gt;(pool =&gt; pool.Attributes["name"].Value.ToString().ToLower() == appPoolData.Name.ToLower());<br /> if (appPoolIIS == null)<br /> {<br /> newpool = apppools.Children.Add(appPoolData.Name, "IIsApplicationPool");<br /> newpool.CommitChanges();<br /> manager.CommitChanges();<br /> appPoolIIS = manager.ApplicationPools.FirstOrDefault&lt;ApplicationPool&gt;(pool =&gt; pool.Attributes["name"].Value.ToString().ToLower() == appPoolData.Name.ToLower());<br /> if(appPoolData.QueueLength &gt; 0)<br /> appPoolIIS.SetAttributeValue("queueLength", appPoolData.QueueLength);<br /> if(!string.IsNullOrEmpty(appPoolData.ManagedRuntimeVersion))<br /> appPoolIIS.SetAttributeValue("managedRuntimeVersion", appPoolData.ManagedRuntimeVersion);<br /> if (!string.IsNullOrEmpty(appPoolData.PipelineMode.ToString()))<br /> appPoolIIS.SetAttributeValue("managedPipelineMode", appPoolData.PipelineMode);<br /> if (appPoolData.ProcessModelData != null)<br /> {<br /> appPoolIIS.ProcessModel.SetAttributeValue("idleTimeout", appPoolData.ProcessModelData.IdleTimeout);<br /> appPoolIIS.ProcessModel.SetAttributeValue("maxProcesses", appPoolData.ProcessModelData.MaxProcesses);<br /> }<br /> <br /> if (appPoolData.RecycleAppPoolData != null)<br /> {<br /> appPoolIIS.Recycling.SetAttributeValue("disallowOverlappingRotation", appPoolData.RecycleAppPoolData.DisallowOverlappingRotation);<br /> appPoolIIS.Recycling.SetAttributeValue("disallowRotationOnConfigChange", appPoolData.RecycleAppPoolData.DisallowRotationOnConfigChange);<br /> if (appPoolData.RecycleAppPoolData.PeriodicRestartData != null)<br /> {<br /> appPoolIIS.Recycling.PeriodicRestart.SetAttributeValue("memory", appPoolData.RecycleAppPoolData.PeriodicRestartData.Memory);<br /> appPoolIIS.Recycling.PeriodicRestart.SetAttributeValue("privateMemory", appPoolData.RecycleAppPoolData.PeriodicRestartData.PrivateMemory);<br /> appPoolIIS.Recycling.PeriodicRestart.SetAttributeValue("requests", appPoolData.RecycleAppPoolData.PeriodicRestartData.Requests);<br /> appPoolIIS.Recycling.PeriodicRestart.SetAttributeValue("time", appPoolData.RecycleAppPoolData.PeriodicRestartData.Time);<br /> }<br /> }<br /> if (appPoolData.CpuData != null)<br /> {<br /> appPoolIIS.Cpu.SetAttributeValue("limit", appPoolData.CpuData.Limit);<br /> appPoolIIS.Cpu.SetAttributeValue("action", appPoolData.CpuData.Action.ToString());<br /> }<br /> manager.CommitChanges();<br /> <br /> }<br /> <br /> }<br /> <br /> <br /> Console.WriteLine(" Done.");<br /> }<br /> else<br /> Console.WriteLine(" Failed in CreateAppPool; application pools can only be created in the */W3SVC/AppPools node.");<br /> }<br /> catch (Exception ex)<br /> {<br /> Console.WriteLine("Failed in CreateAppPool with the following exception: \n{0}", ex.Message);<br /> }<br /> }<br /> </code></pre>
<p><span style="font-family: Calibri; font-size: small;" face="Calibri" size="3">&nbsp;</span></p>
<h1><span style="color: #365f91;" color="#365f91"><span style="font-family: Cambria;" face="Cambria">Creation of Virtual Directory on IIS</span></span></h1>
<p><span style="font-family: Calibri; font-size: small;" face="Calibri" size="3">1)</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size: small;" size="3"><span style="font-family: Calibri;" face="Calibri">This function will take Website Url&nbsp; under which virtual directory/web application have to be created, Name of the virtual directory and physical path to which it must point to.</span></span></p>
<pre class="scroll"><code class="cplusplus">/// &lt;summary&gt;<br /> /// Function to create web application if does not exists.<br /> /// &lt;/summary&gt;<br /> /// &lt;param name="websiteUrl"&gt;Root website url&lt;/param&gt;<br /> /// &lt;param name="vDirName"&gt;Name of the web application&lt;/param&gt;<br /> /// &lt;param name="physicalPath"&gt;Physical path to which the web application will point to&lt;/param&gt;<br /> public static void CreateVDir(string websiteUrl, string vDirName, string physicalPath)<br /> {<br /> <br /> Console.WriteLine("\nCreating application {0}/{1}, mapping the Root application to {2}:",<br /> websiteUrl, vDirName, physicalPath);<br /> <br /> try<br /> {<br /> DirectoryEntry site = new DirectoryEntry(websiteUrl);<br /> string className = site.SchemaClassName.ToString();<br /> if ((className.EndsWith("Server")) || (className.EndsWith("VirtualDir")))<br /> {<br /> DirectoryEntries vdirs = site.Children;<br /> DirectoryEntry newVDir = vdirs.Add(vDirName, (className.Replace("Service", "VirtualDir")));<br /> newVDir.Properties["Path"][0] = physicalPath;<br /> newVDir.Properties["AccessScript"][0] = true;<br /> newVDir.Properties["AppFriendlyName"][0] = vDirName;<br /> newVDir.Properties["AppIsolated"][0] = "1";<br /> newVDir.Properties["AppRoot"][0] = "/LM" + websiteUrl.Substring(websiteUrl.IndexOf("/", ("IIS://".Length)));<br /> newVDir.CommitChanges();<br /> <br /> Console.WriteLine(" Done.");<br /> }<br /> else<br /> Console.WriteLine(" Failed. A virtual directory can only be created in a site or virtual directory node.");<br /> }<br /> catch (Exception ex)<br /> {<br /> Console.WriteLine("Failed in CreateVDir with the following exception: \n{0}", ex.Message);<br /> }<br /> }</code></pre>
<p><span style="font-size: small;" size="3"><span style="font-family: Calibri;" face="Calibri"></span></span></p>
<h1><span style="color: #365f91;" color="#365f91"><span style="font-family: Cambria;" face="Cambria">Assigning Application Pool to virtual directory</span></span></h1>
<p><span style="font-family: Calibri; font-size: small;" face="Calibri" size="3">1)</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size: small;" size="3"><span style="font-family: Calibri;" face="Calibri">This function will take web application/virtual Directory &nbsp;name and application pool name</span></span></p>
<pre class="scroll"><code class="cplusplus">/// &lt;summary&gt;<br /> /// Function to assign application pool to web application created.<br /> /// &lt;/summary&gt;<br /> /// &lt;param name="webApplicationUrl"&gt;Web Application Url&lt;/param&gt;<br /> /// &lt;param name="appPoolName"&gt;Application pool name this web application to be assigned to&lt;/param&gt;<br /> public static void AssignVDirToAppPool(string webApplicationUrl, string appPoolName)<br /> {<br /> Console.WriteLine("\nAssigning application {0} to the application pool named {1}:", webApplicationUrl, appPoolName);<br /> <br /> try<br /> {<br /> DirectoryEntry vDir = new DirectoryEntry(webApplicationUrl);<br /> string className = vDir.SchemaClassName.ToString();<br /> object[] param = { 0, appPoolName, true };<br /> vDir.Invoke("AppCreate3", param);<br /> vDir.Properties["AppIsolated"][0] = "2";<br /> Console.WriteLine(" Done.");<br /> <br /> }<br /> catch (Exception ex)<br /> {<br /> Console.WriteLine("Failed in AssignVDirToAppPool with the following exception: \n{0}", ex.Message);<br /> }<br /> }<br /> </code></pre>
<p><span style="font-size: small;" size="3"><span style="font-family: Calibri;" face="Calibri"></span></span></p>]]></content:encoded>
    </item>
    <item>
      <title>Live Smooth Streaming Using IIS Media Services: Overview and Automation</title>
      <link>https://docs.microsoft.com/archive/blogs/sghosh/live-smooth-streaming-using-iis-media-services-overview-and-automation</link>
      <pubDate>Wed, 23 May 2012 07:11:00 GMT</pubDate>
      <dc:creator><![CDATA[mschap]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/sghosh/2012/05/23/live-smooth-streaming-using-iis-media-services-overview-and-automation/</guid>
      <description><![CDATA[Introduction
In this post I will give detailed overview of the following:

What is Live Smooth...]]></description>
      <content:encoded><![CDATA[<h2><span style="color: #365f91;"><span style="font-family: Cambria;">Introduction</span></span></h2>
<p><span style="font-family: Calibri;"><span style="font-size: small;">In this post I will give detailed overview of the following:</span></span></p>
<ul>
<li><em><span style="font-size: small;"><span style="font-family: Calibri;">What is Live Smooth streaming?</span></span></em></li>
<li><em><span style="font-size: small;"><span style="font-family: Calibri;">IIS Media Services as an Integrated media platform for IIS</span></span></em></li>
<li><em><span style="font-size: small;"><span style="font-family: Calibri;">Using IIS Media Services for Live Smooth Streaming Broadcast over HTTP</span></span></em></li>
<li><em><span style="font-family: Calibri; font-size: small;">Creating Live Smooth Streaming Publishing Points in IIS using IIS Media Services</span></em></li>
<li><em><span style="font-family: Calibri; font-size: small;">Programmatically creation of Publishing Points for automation</span></em></li>
<li><em><span style="font-size: small;"><span style="font-family: Calibri;">Network Architecture for Live Smooth Streaming Implementation Using IIS Media Services</span></span></em></li>
</ul>
<h2><span style="font-size: medium;"><span style="color: #4f81bd;"><span style="font-family: Cambria;">Live Smooth Streaming</span></span></span></h2>
<p><span style="font-size: small;">&bull;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: Calibri;"><span style="font-size: small;">Enables adaptive streaming of live events to Smooth Streaming clients</span></span></p>
<p><span style="font-size: small;">&bull;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size: small;"><span style="font-family: Calibri;">IIS Media Services extension</span></span></p>
<p><span style="font-size: small;">&bull;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: Calibri;"><span style="font-size: small;">Uses HTTP to deliver live events</span></span></p>
<p><span style="font-size: small;">&bull;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: Calibri;"><span style="font-size: small;">Existing HTTP networks and keeps content close to your viewers</span></span></p>
<p><span style="font-size: small;">&bull;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: Calibri;"><span style="font-size: small;">Makes True HD(720+) a realistic option</span></span></p>
<p><span style="font-size: small;">&bull;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: Calibri;"><span style="font-size: small;">Existing HTTP infrastructure also drastically increases live event availability</span></span></p>
<p><span style="font-size: small;">&bull;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size: small;"><span style="font-family: Calibri;">For most popular live web broadcasts, CDNs and content providers can take advantage of&nbsp; their network resources using HTTP</span></span></p>
<p><span style="font-size: small;">&bull;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: Calibri;"><span style="font-size: small;">Adaptation based on user&rsquo;s network bandwidth</span></span></p>
<p><span style="font-size: small;">&bull;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: Calibri;"><span style="font-size: small;">Support Typical PVR(Personal Video Recorder) style interaction</span></span></p>
<p><span style="font-size: small;">&bull;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="font-family: Calibri; font-size: small;">World&rsquo;s First IIS Based Live Streaming: French Open 2009</span></strong></p>
<h2><span style="font-size: medium;"><span style="color: #4f81bd;"><span style="font-family: Cambria;">IIS Media Service: An IIS Integrated Media Platform</span></span></span></h2>
<ul>
<li><span style="font-family: Calibri; font-size: small;">An integrated HTTP-based media delivery package for IIS </span></li>
<li><span style="font-family: Calibri; font-size: small;">Supported with IIS 7 on Windows Server 2008, Windows Server 2008 R2, Windows Vista with SP1, Windows 7</span></li>
</ul>
<p><span style="font-family: Calibri;"><span style="font-size: small;"><strong>Key Features</strong></span>:</span></p>
<ul>
<li>&nbsp;&nbsp;<span style="font-family: Calibri; font-size: small;">&nbsp; <strong>Smooth Streaming</strong><strong>: </strong>adaptive streaming of on-demand media over HTTP</span></li>
<li><span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp;&nbsp; <strong>Live Smooth Streaming</strong><strong>:</strong> live adaptive streaming for broadcast events</span></li>
<li><span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp;&nbsp; <strong>Bit Rate Throttling</strong><strong>:</strong> meters the speed at which content is delivered to a player</span></li>
<li><span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp;&nbsp; <strong>Web Playlists</strong><strong>:</strong> secure sequencing and server-side control of media content </span></li>
<li><span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp;&nbsp; <strong>Advanced Logging</strong><strong>:</strong> rich, real-time client- and server-side logging</span></li>
<li><span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp;&nbsp; <strong>Application Request Routing (ARR)</strong><strong>:</strong> intelligent HTTP proxying and caching </span></li>
<li><span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp;&nbsp; <strong>Smooth Streaming Player Development Kit</strong><strong>:</strong> for creating customized players</span></li>
</ul>
<p>&nbsp;</p>
<h2><span style="font-size: medium;"><span style="color: #4f81bd;"><span style="font-family: Cambria;">Live Smooth Streaming Using IIS Media Services</span></span></span></h2>
<ul>
<li><span style="font-family: Calibri;"><span style="font-size: small;"><strong>Publishing Points</strong>: These are IIS Based URLs which will point to specific Live smooth streaming provider encoder.</span></span></li>
<li><span style="font-family: Calibri;"><span style="font-size: small;"><strong>There are two source types</strong>:-</span></span></li>
</ul>
<p><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &bull;</span>&nbsp;<span style="font-family: Calibri;"><span style="font-size: small;"><strong>Push</strong> &ndash; This will push live content to the client or another publishing point of PULL type.</span></span></p>
<p><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &bull;</span>&nbsp;<span style="font-family: Calibri;"><span style="font-size: small;"><strong>Pull</strong>- This will pull live content from another PUSH type publishing point or encoder.</span></span></p>
<p><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &bull;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: Calibri;"><span style="font-size: small;"><strong>ISML files</strong>: These are xml based files which are generated when a publishing point is created.</span></span></p>
<p><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &bull;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size: medium;"><strong><span style="font-family: Calibri;"><span><span style="text-decoration: underline;">Features:</span></span></span></strong></span></p>
<p><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &ndash;</span>&nbsp;<strong><span style="font-family: Calibri;"><span style="font-size: small;">Broadcasting live streams</span></span></strong></p>
<p><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&bull;</span>&nbsp;<span style="font-size: small;"><span style="font-family: Calibri;">IIS Media Services Enables broadcasting live streams over HTTP by the concept of publishing points</span></span></p>
<p><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&bull;</span>&nbsp;<span style="font-size: small;"><span style="font-family: Calibri;">This gets the live stream from the encoder and broadcasts over HTTP.</span></span></p>
<p><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&ndash; </span><strong><span style="font-family: Calibri;"><span style="font-size: small;">Distributing live streams</span></span></strong></p>
<p><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&bull;</span>&nbsp;<span style="font-size: small;"><span style="font-family: Calibri;">IIS Media Services enables distributing live streams to various sources</span></span></p>
<p><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&bull;</span>&nbsp;<span style="font-size: small;"><span style="font-family: Calibri;">This basically enables user to point to publishing point URLs where the live streams has to be pushed.</span></span></p>
<p><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&ndash;</span>&nbsp;<strong><span style="font-family: Calibri;"><span style="font-size: small;">Archiving live streams</span></span></strong></p>
<p><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&bull;</span>&nbsp;&nbsp;<span style="font-size: small;"><span style="font-family: Calibri;">IIS media services enabled archiving of live streams for a specific period of time which can be configured.</span></span></p>
<p><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&bull;</span>&nbsp;&nbsp;<span style="font-size: small;"><span style="font-family: Calibri;">This archived stream can be used in future by provider as Video On Demand</span></span></p>
<p><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&bull;</span>&nbsp;&nbsp;<span style="font-size: small;"><span style="font-family: Calibri;">This also enables <strong>digital video recording</strong> which will enable user to rewind back when live stream is in progress</span></span></p>
<p><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&bull;</span>&nbsp;&nbsp;<span style="font-size: small;"><span style="font-family: Calibri;">Default archived stream is stored in %<em>SystemDrive</em>%\inetpub\media\archives\<em>SiteName</em>\<em>PublishingPointFileName</em>-isml</span></span></p>
<p>&nbsp;</p>
<h2><span style="font-size: medium;"><span style="color: #4f81bd;"><span style="font-family: Cambria;">Creating Live Smooth Streaming Publishing Point in IIS</span></span></span></h2>
<ul>
<li><span style="font-size: small;"><span style="font-family: Calibri;">Check if IIS Media Services 4.1 is Installed or not.</span></span><span style="font-family: Calibri; font-size: small;">&nbsp;IIS Media Services can be installed from <a href="https://www.microsoft.com/en-us/download/details.aspx?id=27955"><span style="color: #0000ff;">Here</span></a></span></li>
</ul>
<p><span style="font-family: Calibri; font-size: small;"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/53/13/4061.pub1.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-13/4061.pub1.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/53/13/4061.pub1.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/350x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-13/4061.pub1.png" alt="" border="0" /></a></span></p>
<ul>
<li><span style="font-size: small;"><span style="font-family: Calibri;">Click on </span><strong><span style="color: #4f81bd;"><span style="font-family: Cambria;">Live Smooth Streaming Publishing Point</span></span></strong></span><span style="font-family: Calibri; font-size: small;">&nbsp;</span></li>
</ul>
<p><span style="font-family: Calibri; font-size: small;"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/53/13/0537.pub2.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-13/0537.pub2.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/53/13/0537.pub2.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-13/0537.pub2.png" alt="" border="0" /></a></span></p>
<ul>
<li><span style="font-size: small;"><span style="font-family: Calibri;">Now Click on Add which is there in the right hand pane</span></span></li>
</ul>
<p><span style="font-size: small;"><span style="font-family: Calibri;"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/53/13/0676.pub3.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-13/0676.pub3.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/53/13/0676.pub3.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-13/0676.pub3.png" alt="" border="0" /></a></span></span></p>
<ul>
<li><span style="font-size: small;"><span style="font-family: Calibri;">Once you click on add the &ldquo;Add Publishing Point&rdquo; window will open from where you can add publishing point.</span></span></li>
</ul>
<p><span style="font-size: small;"><span style="font-family: Calibri;"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/53/13/5340.pub4.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-13/5340.pub4.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/53/13/5340.pub4.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-13/5340.pub4.png" alt="" width="484" height="500" border="0" /></a></span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/53/13/7041.pub5.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-13/7041.pub5.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/53/13/7041.pub5.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-13/7041.pub5.png" alt="" width="549" height="600" border="0" /></a></span></span></p>
<p>&nbsp;</p>
<p><strong><span style="font-size: small;"><span style="color: #4f81bd; font-family: Cambria;">Description of Each Input Element for Creating Live Smooth Streaming Publishing Point</span><span style="font-family: Calibri;">:-</span></span></strong></p>
<p><strong><span style="font-family: Calibri; font-size: small;">a.</span> </strong><strong><span style="font-family: Calibri;"><span style="font-size: small;">Basic Settings</span></span></strong></p>
<ul>
<li><span style="font-size: small;"><span style="font-family: Calibri;"><strong>File Name</strong>:- Name of the ISML file which will created</span></span></li>
<li><span style="font-size: small;"><span style="font-family: Calibri;"><strong>Title</strong>:- Title of the publishing point</span></span></li>
<li><span style="font-size: small;"><span style="font-family: Calibri;"><strong>Estimated Duration</strong>: If you know the length of your live stream then this will create a progress bar on the client setting an end time like in case of normal videos</span></span></li>
<li>&nbsp;<span style="font-size: small;"><span style="font-family: Calibri;"><strong>Live Source Type</strong>:- This has been described in earlier section</span></span></li>
<ul>
<li><span style="font-size: small;"><span style="font-family: Calibri;">Push</span></span></li>
<li><span style="font-size: small;"><span style="font-family: Calibri;">Pull</span></span></li>
</ul>
</ul>
<p><strong><span style="font-family: Calibri; font-size: small;">b.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </strong><strong><span style="font-family: Calibri;"><span style="font-size: small;">Advanced Settings</span></span></strong></p>
<ul>
<li><span style="font-size: small;"><span style="font-family: Calibri;"><strong>Archive Media</strong>: If you enable this then Archiving of the live stream will be enabled and this will be storing the Live Stream in the default location (%<em>SystemDrive</em>%\inetpub\media\archives\<em>SiteName</em>\<em>PublishingPointFileName</em>-isml)</span></span></li>
</ul>
<p><span style="font-size: small;"><span style="font-family: Calibri;"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Archive as single Presentation</strong>: This will archive the live stream as single smooth streaming file</span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Archive as Segmented Presentation</strong>: This will archive the live stream in chunks based on the time given in Segment Length(in Minutes) specified.</span></span></p>
<ul>
<li>&nbsp;<span style="font-size: small;"><span style="font-family: Calibri;"><strong>Allow Client Connections</strong>: This will enable the client to send request to the server to rewind back and will also enable digital view recording </span></span></li>
</ul>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: small;"><span style="font-family: Calibri;"><strong>Enable DVR for the entire event</strong>: This will enable Digital video recording for the live stream i.e. client can rewind back to start from the current state</span></span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: small;"><span style="font-family: Calibri;"><strong>Enable DVR for recent content</strong>: This will enable client to rewind back only to specified amount of time based on DVR Window Length(in minutes) specified</span></span></p>
<ul>
<li><span style="font-size: small;"><span style="font-family: Calibri;"><strong>Allow Server Connections</strong>: This will allow a publishing point to push or pull live content to/from another publishing point</span></span></li>
<li><span style="font-size: small;"><span style="font-family: Calibri;"><strong>Start Publishing point automatically upon fir request</strong>: This will start the publishing as soon as it gets request first live streaming request</span></span></li>
<li><span style="font-size: small;"><span style="font-family: Calibri;"><strong>Number of lookahead fragments</strong>: &nbsp;Enter the number of fragments that will be buffered by the server. Clients use the information about the buffered fragments, which is stored in the current response, to optimize requests for the subsequent buffered fragments in a stream. This enables smoother playback of video.</span></span></li>
</ul>
<p><strong><span style="font-family: Calibri; font-size: small;">c.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </strong><strong><span style="font-family: Calibri;"><span style="font-size: small;">Mobile Devices</span></span></strong></p>
<ul>
<li><span style="font-size: small;"><strong>Enable output to Apple mobile digital devices : </strong><span style="font-family: Calibri;">enable the Live Smooth Streaming publishing point to convert live Smooth Streaming MPEG-4 (MP4) fragments to MPEG-2 Transport Stream (MPEG-2 TS) segments, and to create an Apple HTTP Live Streaming (.m3u8) playlist file that describes the MPEG-2 TS presentation for the mobile device.</span></span></li>
<li><span style="font-size: small;"><strong>Segment length: </strong><span style="font-family: Calibri;">duration of each MPEG-2 TS segment, in seconds. The default value is 10 seconds, which is recommended for most Apple mobile digital devices.</span></span></li>
<li><span style="font-size: small;"><strong>Maximum bit rate: </strong><span style="font-family: Calibri;">maximum bit rate, in kilobits per second (Kbps), to be created for the MPEG-2 TS segments. &nbsp;Some bit rates in a Live Smooth Streaming presentation are too high to be played by an Apple device after they are converted to MPEG-2 TS container format. Most Apple devices can play media encoded at bit rates up to 1,600 Kbps.</span></span></li>
<li><span style="font-size: small;"><strong>Enable iOS 3.0 compatibility: </strong><span style="font-family: Calibri;">enable the MPEG-2 TS segments to be played on Apple devices that use the iOS 3.0 mobile operating system, such as the iPhone 3GS and iPod Touch&reg; devices.</span></span></li>
<li><span style="font-size: small;"><strong>Apple AES-128 encryption: </strong><span style="font-family: Calibri;">Live Smooth Streams for Apple devices can be encrypted so that they can only be viewed by devices that obtain a file that contains the content key to decrypt the streaming content. Live Smooth Streaming encrypts content by using the Advanced Encryption Standard (AES) with a 128-bit key. It can also provide the content key file to clients, or you can specify that the content key be provided from an alternate location, such as a custom ASP.NET Web page.</span></span></li>
</ul>
<h2><span style="font-size: medium;"><span style="color: #4f81bd;"><span style="font-family: Cambria;">Creating Live Smooth Streaming Publishing Point Programmatically</span></span></span></h2>
<p><span style="font-size: small;"><span style="font-family: Calibri;">As mentioned above when you create a publishing point in the IIS using IIS Media Services then it will create a file with .isml extension which contains data in xml format with UTF-8 encoding.</span></span></p>
<p><strong><span style="text-decoration: underline;"><span style="font-size: small;"><span style="font-family: Calibri;">NOTE:-</span></span></span></strong></p>
<p><span style="font-family: Calibri; font-size: small;">1)</span>&nbsp;<span style="font-size: small;"><span style="font-family: Calibri;">The web application which will host these publishing points should be kept in a separate application pool as this is supposed to be running all the time.</span></span></p>
<p><span style="font-family: Calibri; font-size: small;">2)</span>&nbsp; <span style="font-size: small;"><span style="font-family: Calibri;">This application pool should be enabled to server live content which can be done by going to the Live Smooth Streaming of the IIS media services in the web application and on the right hand side it will ask to enable application pool. See the screenshot below.</span></span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/53/13/3582.pub6.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-13/3582.pub6.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/53/13/3582.pub6.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-13/3582.pub6.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p><strong><span style="font-family: Calibri; font-size: small;">Step1:</span>&nbsp;&nbsp;&nbsp; </strong><strong><span style="font-size: small;"><span style="font-family: Calibri;">Create a class which will have the publishing point data to be set as input</span></span></strong></p>
<pre class="scroll"><code class="csharp">public enum SourceType<br /> {<br /> Push,<br /> Pull<br /> }<br /> /// &lt;summary&gt;<br /> /// Class to provide data for creating publishing point URL.<br /> /// &lt;/summary&gt;<br /> public class PublishingPointParams<br /> {<br /> public PublishingPointParams()<br /> {<br /> ToolAction = true;<br /> FileName = string.Empty;<br /> Title = string.Empty;<br /> Module = string.Empty;<br /> SourceType = IISMediaServicesHelper.SourceType.Push;<br /> EstimatedTime = "0";<br /> LookaheadChunks = 0;<br /> ManifestWindowLength = "0";<br /> StartOnFirstRequest = false;<br /> PublishPointUrls = new List&lt;string&gt;();<br /> WebSiteName = WebSiteConstants.WebSiteName;<br /> ArchiveSegmentLength = string.Empty;<br /> WebApplicationTargetName = string.Empty;<br /> IsArchive = true;<br /> AllowClientConnections = true;<br /> Publishing = string.Empty;<br /> AppPoolName = string.Empty;<br /> WebApplicationDefaultPath = WebSiteConstants.WebApplicationPhysicalPath;<br /> }<br /> <br /> public bool ToolAction { get; set; }<br /> public string FileName { get; set; }<br /> public string Title { get; set; }<br /> public string Module { get; set; }<br /> public SourceType SourceType { get; set; }<br /> public string Publishing { get; set; }<br /> public string EstimatedTime { get; set; }<br /> public uint LookaheadChunks { get; set; }<br /> public string ManifestWindowLength { get; set; }<br /> public bool StartOnFirstRequest { get; set; }<br /> public string ArchiveSegmentLength { get; set; }<br /> public List&lt;string&gt; PublishPointUrls { get; set; }<br /> public string WebSiteName { get; set; }<br /> public string WebApplicationTargetName { get; set; }<br /> public bool IsArchive { get; set; }<br /> public bool AllowClientConnections { get; set; }<br /> public string AppPoolName { get; set; }<br /> public string WebApplicationDefaultPath { get; set; }<br /> }<br /></code></pre>
<p><strong><span style="font-family: Calibri; font-size: small;">Step 2:</span>&nbsp;</strong><strong><span style="font-size: small;"><span style="font-family: Calibri;">Generate the xml data to be stored</span></span></strong></p>
<pre class="scroll"><code class="csharp">/// &lt;summary&gt;<br /> /// Function to generate the publish point XML for creating ISML file.<br /> /// &lt;/summary&gt;<br /> /// &lt;param name="pubPoint"&gt;&lt;/param&gt;<br /> /// &lt;returns&gt;&lt;/returns&gt;<br /> private XDocument GeneratePubPointXMLData(PublishingPointParams pubPoint)<br /> {<br /> XNamespace ns = "https://www.w3.org/2001/SMIL20/Language";<br /> XDocument doc = new XDocument(new XDeclaration("1.0", "utf-8", ""));<br /> XElement eleHead = new XElement(ns + "head",<br /> new XElement(ns + "meta", new XAttribute("name", "title"), new XAttribute("content", pubPoint.Title)),<br /> new XElement(ns + "meta", new XAttribute("name", "module"), new XAttribute("content", pubPoint.Module)),<br /> new XElement(ns + "meta", new XAttribute("name", "sourceType"), new XAttribute("content", pubPoint.SourceType)),<br /> new XElement(ns + "meta", new XAttribute("name", "publishing"), new XAttribute("content", pubPoint.Publishing)),<br /> new XElement(ns + "meta", new XAttribute("name", "estimatedTime"), new XAttribute("content", pubPoint.EstimatedTime)),<br /> new XElement(ns + "meta", new XAttribute("name", "lookaheadChunks"), new XAttribute("content", pubPoint.LookaheadChunks)),<br /> new XElement(ns + "meta", new XAttribute("name", "manifestWindowLength"), new XAttribute("content", pubPoint.ManifestWindowLength)),<br /> new XElement(ns + "meta", new XAttribute("name", "startOnFirstRequest"), new XAttribute("content", pubPoint.StartOnFirstRequest)),<br /> new XElement(ns + "meta", new XAttribute("name", "archiveSegmentLength"), new XAttribute("content", pubPoint.ArchiveSegmentLength)),<br /> new XElement(ns + "meta", new XAttribute("name", "formats"), new XAttribute("content", "")),<br /> new XElement(ns + "meta", new XAttribute("name", "filters"), new XAttribute("content", "")));<br /> XElement eleBody = new XElement(ns + "body");<br /> XElement eleUrl;<br /> <br /> if (pubPoint.SourceType == SourceType.Push)<br /> eleUrl = new XElement(ns + "par");<br /> else<br /> eleUrl = new XElement(ns + "switch");<br /> foreach (string pubLishUrl in pubPoint.PublishPointUrls)<br /> {<br /> eleUrl.Add(new XElement(ns + "ref", new XAttribute("src", pubLishUrl)));<br /> }<br /> eleBody.Add(eleUrl);<br /> XElement eleIsml = new XElement(ns + "smil", new XElement(eleHead), new XElement(eleBody));<br /> doc.Add(eleIsml);<br /> return doc;<br /> <br /> }<br /></code></pre>
<p><strong><span style="font-family: Calibri; font-size: small;">Step 3:</span>&nbsp;</strong><strong><span style="font-size: small;"><span style="font-family: Calibri;">Get the data stored in a file and save the file into the web application path using &ldquo;Microsostf.Web.Administration dll&rdquo; which can be found in the inetsrv folder of System32. This is a managed API of IIS.</span></span></strong></p>
<p>&nbsp;</p>
<pre class="scroll"><code class="csharp">/// &lt;summary&gt;<br /> /// Function to create live publishing point url.<br /> /// &lt;/summary&gt;<br /> /// &lt;param name="pubPoint"&gt;Publish point param class object with input parameters to create publishing point.&lt;/param&gt;<br /> /// &lt;param name="logger"&gt;&lt;/param&gt;<br /> /// &lt;returns&gt;&lt;/returns&gt;<br /> public bool CreatePublishingPointUrl(PublishingPointParams pubPoint, ILogger logger)<br /> {<br /> bool retVal = false;<br /> try<br /> {<br /> using (var manager = new ServerManager())<br /> {<br /> Site site = manager.Sites[pubPoint.WebSiteName];<br /> Application application = site.Applications["/" + pubPoint.WebApplicationTargetName];<br /> string livePubPointData = string.Empty;<br /> <br /> if (application == null)<br /> {<br /> if (!(CreateWebApplication(pubPoint, manager, site)))<br /> {<br /> logger.Write("Unable to create web application. Publish point URL can not be created.");<br /> return false;<br /> }<br /> }<br /> <br /> XDocument doc = GeneratePubPointXMLData(pubPoint);<br /> StringWriter streamWriter = new StringWriterWithEncoding(Encoding.UTF8);(This is a custom class which will return UTF8 enecoded object of string writer class)<br /> doc.Save(streamWriter, SaveOptions.None);<br /> livePubPointData = streamWriter.ToString();<br /> <br /> string path = (application == null) ? string.Format(@"{0}\{1}", pubPoint.WebApplicationDefaultPath, pubPoint.FileName + ".isml") : <br /> string.Format(@"{0}\{1}", application.VirtualDirectories[0].PhysicalPath, pubPoint.FileName + ".isml");<br /> <br /> if (!File.Exists(path))<br /> {<br /> File.WriteAllText(path, livePubPointData);<br /> retVal = true;<br /> }<br /> else<br /> {<br /> logger.Write("Publishing point " + pubPoint.Title + " already exists. Please try again with some other name.");<br /> }<br /> }<br /> }<br /> catch (Exception ex)<br /> {<br /> logger.Write("Cannot create Publishing Point error ar CreatePubPoinUtl():" + ex);<br /> return false;<br /> }<br /> return retVal;<br /> } </code></pre>
<h2><span style="font-size: medium;"><span style="color: #4f81bd;"><span style="font-family: Cambria;">Architecture followed to provide Live Smooth Streaming Using IIS Media Services</span></span></span></h2>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/53/13/0844.Live%20Smooth%20Streaming%20Using%20IIS%20Media%20Services%20Architecture.bmp" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-13/0844.Live-Smooth-Streaming-Using-IIS-Media-Services-Architecture.bmp"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/53/13/0844.Live%20Smooth%20Streaming%20Using%20IIS%20Media%20Services%20Architecture.bmp" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-13/0844.Live-Smooth-Streaming-Using-IIS-Media-Services-Architecture.bmp" alt="" width="644" height="315" border="0" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
  </channel>
</rss>