<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>John Crosby</title>
	
	<link>http://www.thekuroko.com</link>
	<description>Behind the scenes</description>
	<lastBuildDate>Thu, 19 Apr 2012 20:45:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/codecook" /><feedburner:info uri="codecook" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>39.767536</geo:lat><geo:long>-105.019736</geo:long><creativeCommons:license>http://creativecommons.org/licenses/by/2.0/</creativeCommons:license><feedburner:emailServiceId>codecook</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>OSMF Fix: “Local HDS” Playback</title>
		<link>http://feedproxy.google.com/~r/codecook/~3/OYWpsDEk5LA/</link>
		<comments>http://www.thekuroko.com/osmf-fix-local-hds-playback/#comments</comments>
		<pubDate>Thu, 19 Apr 2012 16:35:21 +0000</pubDate>
		<dc:creator>John Crosby</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Streaming Media]]></category>
		<category><![CDATA[hds]]></category>
		<category><![CDATA[http dynamic streaming]]></category>
		<category><![CDATA[local file]]></category>
		<category><![CDATA[osmf]]></category>
		<category><![CDATA[playback]]></category>

		<guid isPermaLink="false">http://www.thekuroko.com/?p=1050</guid>
		<description><![CDATA[The Open Source Media Framework (OSFM) doesn't respond well when you pass it a local F4M file path for playback. Playing back local HDS fragments is an edge case, but enough people have encountered this problem that I think it deserves a little attention.]]></description>
			<content:encoded><![CDATA[<h2>OSMF &#038; Local F4M Files</h2>
<p>The Open Source Media Framework (OSFM) doesn&#8217;t respond well when you pass it a local F4M file path for playback. Playing back local HDS fragments is an edge case, but enough people have encountered this problem that I think it deserves a little attention.</p>
<h2>Fixing the IndexHandler</h2>
<p>The basics involve extending the HTTPStreamingF4FIndexHandler then overriding the constructFragmentRequest() method &amp; removing the requirement that HTTP be part of the URI.</p>
<p>So, after you&#8217;ve created your new class that extends org.osmf.net.httpstreaming.f4f.HTTPStreamingF4FIndexHandler, add the following override:</p>
<pre class="brush: as3; title: ; notranslate">override protected function constructFragmentRequest(serverBaseURL:String, streamName:String, segmentId:uint, fragmentId:uint):String
{
  var requestUrl:String = &quot;&quot;;
  requestUrl += streamName + &quot;Seg&quot; + segmentId + &quot;-Frag&quot; + fragmentId;
  return requestUrl;
}</pre>
<p>The original constructFragmentRequest() method looks like:</p>
<pre class="brush: as3; title: ; notranslate">protected function constructFragmentRequest(serverBaseURL:String, streamName:String, segmentId:uint, fragmentId:uint):String
{
  var requestUrl:String = &quot;&quot;;
  if (streamName.indexOf(&quot;http&quot;) != 0)
  {
    requestUrl = serverBaseURL + &quot;/&quot; ;
  }
  requestUrl += streamName + &quot;Seg&quot; + segmentId + &quot;-Frag&quot; + fragmentId;
  return requestUrl;
}</pre>
<p>So you can see we just removed the &#8220;http&#8221; requirement.</p>
<p>Now you need to get OSMF to use your adjusted IndexHandler. This means you need to create a custom NetLoader, that creates a custom StreamingFactory &amp; then the Factory creates your IndexHandler. Once you have all of this done, you can then create a custom MediaFactory (I usually just extend DefaultMediaFactory) and create a MediaFactoryItem that can handle your local F4M file resource, &amp; specify your new NetLoader for the element that is returned.</p>
<p><em>Convoluted eh? Let&#8217;s break it down.</em></p>
<h2>Creating the Factory</h2>
<p>Since we are dealing with HDS content extend org.osmf.net.httpstreaming.f4f.HTTPStreamingF4FFactory &amp; override the createIndexHandler() method. In this method set the indexHandler property equal to an instance of your IndexHandler (mine is named &#8220;LocalFileStreamingF4FIndexHandler&#8221;).</p>
<p>Example:</p>
<pre class="brush: as3; title: ; notranslate">override public function createIndexHandler(resource:MediaResourceBase, fileHandler:HTTPStreamingFileHandlerBase):HTTPStreamingIndexHandlerBase
{
  indexHandler = new LocalFileStreamingF4FIndexHandler(fileHandler);
  return indexHandler;
}</pre>
<h2>Creating a NetLoader</h2>
<p>Now we need our NetLoader &#8211; this is where the Factory is created. I extended org.osmf.net.httpstreaming.HTTPStreamingNetLoader &amp; created an override for the createHTTPStreamignFactory() method.</p>
<p>Example:</p>
<pre class="brush: as3; title: ; notranslate">override protected function createHTTPStreamingFactory():HTTPStreamingFactory
{
  return new LocalFileStreamingF4FFactory();
}</pre>
<h2>Creating a custom MediaFactory</h2>
<p>Now we need to be able to injet this NetLoader into the system. So extend the org.osmf.media.DefaultMediaFactory &amp; add a MediaFactoryItem that return a new VideoElement. Pass in an instance of your NetLoader to the the VideoElement constructor.</p>
<p>Example:</p>
<pre class="brush: as3; title: ; notranslate">localFileStreamingNetLoader = new LocalFileStreamingNetLoader();
localHDSFileNetLoader = new LocalHDSContentNetLoader();
  addItem( new MediaFactoryItem( &quot;com.realeyes.osmf.elements.video.httpstreaming&quot;, localHDSFileNetLoader.canHandleResource,
    function():MediaElement
    {
      return new VideoElement(null, localHDSFileNetLoader);
    }
  )
);</pre>
<h2>Specifying the canHandle and passing in the NetLoader</h2>
<p>You can also see in the previous bit of code that the MediaFactoryItem asks for a canHandleResource function. This is where conditions are added to make sure the you&#8217;re working with the right type of media. For this situations you can default to the super&#8217;s canHandleResource() which checks the resource HTTP Streaming metadata.</p>
<p>Now you have a setup that can handle a local F4M file and the downloaded fragments. There are a couple of considerations you&#8217;ll need to keep in mind:</p>
<ol>
<li>The fragments and F4M file must reside in the same directory. OSMF looks for the fragments in the directory that they F4M is in.</li>
<li>Multi-bitrate won&#8217;t work, unless you can download the fragments for all the bitrates and work out storage for them.</li>
</ol>
<p>The provided examples is the least obtrusive way to get local HDS content to play. Alternatively  you can edit the HTTPStreamingIndexHandler and compile an OSMF swc to use for a quick and dirty fix.</p>
<div class="SPOSTARBUST-Related-Posts"><H3>Related Posts</H3><ul class="entry-meta"><li class="SPOSTARBUST-Related-Post"><a title="OSMF 1 Day Course: What do you want?" href="http://www.thekuroko.com/osmf-1-day-course-what-do-you-want/" rel="bookmark">OSMF 1 Day Course: What do you want?</a></li>
<li class="SPOSTARBUST-Related-Post"><a title="OSMF Custom Media Elements" href="http://www.thekuroko.com/osmf-custom-media-elements/" rel="bookmark">OSMF Custom Media Elements</a></li>
<li class="SPOSTARBUST-Related-Post"><a title="Adobe Marketplace and the GTrack OSMF Plugin" href="http://www.thekuroko.com/adobe-mktplace-gtrack-plugin/" rel="bookmark">Adobe Marketplace and the GTrack OSMF Plugin</a></li>
<li class="SPOSTARBUST-Related-Post"><a title="OSMF 1.5 is in the Wild!" href="http://www.thekuroko.com/osmf-1-5-is-in-the-wild/" rel="bookmark">OSMF 1.5 is in the Wild!</a></li>
</ul></div>
<p><a href="http://feedads.g.doubleclick.net/~a/IcnMDTVm1xsRyNyZJ8lOcGGAaoQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/IcnMDTVm1xsRyNyZJ8lOcGGAaoQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/IcnMDTVm1xsRyNyZJ8lOcGGAaoQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/IcnMDTVm1xsRyNyZJ8lOcGGAaoQ/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/codecook?a=OYWpsDEk5LA:7PpUDqJO0GM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/codecook?i=OYWpsDEk5LA:7PpUDqJO0GM:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=OYWpsDEk5LA:7PpUDqJO0GM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/codecook?i=OYWpsDEk5LA:7PpUDqJO0GM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=OYWpsDEk5LA:7PpUDqJO0GM:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/codecook?i=OYWpsDEk5LA:7PpUDqJO0GM:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=OYWpsDEk5LA:7PpUDqJO0GM:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/codecook?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=OYWpsDEk5LA:7PpUDqJO0GM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/codecook?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=OYWpsDEk5LA:7PpUDqJO0GM:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/codecook?i=OYWpsDEk5LA:7PpUDqJO0GM:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=OYWpsDEk5LA:7PpUDqJO0GM:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/codecook?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/codecook/~4/OYWpsDEk5LA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.thekuroko.com/osmf-fix-local-hds-playback/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		<feedburner:origLink>http://www.thekuroko.com/osmf-fix-local-hds-playback/</feedburner:origLink></item>
		<item>
		<title>HTTP Dynamic Streaming Content Download and Playback</title>
		<link>http://feedproxy.google.com/~r/codecook/~3/oCq8ngvgcBk/</link>
		<comments>http://www.thekuroko.com/http-dynamic-streaming-download-and-playback/#comments</comments>
		<pubDate>Tue, 13 Mar 2012 15:22:06 +0000</pubDate>
		<dc:creator>John Crosby</dc:creator>
				<category><![CDATA[osmf]]></category>
		<category><![CDATA[Streaming Media]]></category>
		<category><![CDATA[adobe air]]></category>
		<category><![CDATA[file io]]></category>
		<category><![CDATA[filestream]]></category>
		<category><![CDATA[hds]]></category>
		<category><![CDATA[http dynamic streaming]]></category>

		<guid isPermaLink="false">http://www.thekuroko.com/?p=1007</guid>
		<description><![CDATA[Recently I&#8217;ve been working on a system to playback HTTP Dynamic Streaming (HDS) content locally, from a single file. If you have seen my previous post on HTTP Dynamic Streaming (HDS) or are already familiar with it, you know that the media item is packaged in such a way that there are multiple segments and fragments [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I&#8217;ve been working on a system to playback HTTP Dynamic Streaming (HDS) content locally, from a single file. If you have seen my previous <a title="Getting Started with HTTP Dynamic Streaming" href="http://www.thekuroko.com/http-dynamic-streaming-getting-started/">post</a> on HTTP Dynamic Streaming (HDS) or are already familiar with it, you know that the media item is packaged in such a way that there are multiple segments and fragments that make up an entire media item. Similar to the image below:</p>
<div id="attachment_812" class="wp-caption alignnone" style="width: 310px"><a href="http://www.thekuroko.com/wp-content/uploads/2011/06/HDS_Seg-frag.png" rel="lightbox[1007]"><img class="size-medium wp-image-812 " title="HDS Segment and Fragments" src="http://www.thekuroko.com/wp-content/uploads/2011/06/HDS_Seg-frag-300x58.png" alt="A sample segment and its fragments" width="300" height="58" /></a><p class="wp-caption-text">A sample segment and its fragments</p></div>
<p>The system involves a client, an AIR application, requesting some remote HDS content (basically an F4M file). The client downloads the fragment data for the media item and writes it to disk. Instead of writing each fragment to a separate file, the fragment data is written to a single file. This part alone is pretty straight forward. The tricky part is when you want to play the content back.</p>
<p>A few problems needed to be overcome to get playback to work. First, to get the local fragments to playback, I needed to fix an issue in the OSMF framework that only accounts for requests for remote HDS fragments. This was accomplished by overriding the HTTPStreamingIndexHandler class and removing some code that only accounted for &#8220;HTTP&#8221; being part of the request. Second, and more importantly, I needed to intercept the request for the HDS fragment that is generated when OSMF is playing back HDS content, use the request to determine where the fragment&#8217;s byte data exists in local file that was created when the client downloaded the content. Then return this byte data to the rest of the OSMF code that parses it into FLV data to pass onto the appendBytes() method on the NetStream.</p>
<p>On top of that, we wanted to allow for playback while the fragments were still downloading. On OS X this wasn&#8217;t a huge deal because AIR on OS X can have multiple FileStreams open the same file. On Windows the file is locked when it is opened by the first FileStream that open the file. This is a problem because I want to write the downloaded fragment data to the file <em>and</em> I want to read fragment data for playback at the same time. This issue was solved with a little utility library that uses only 1 FileStream instance and manages read and write requests by queuing up requests and only allowing the requests to happen 1 at a time.</p>
<p>It was a huge headache and lots of time was spent in the OSMF rabbit hole but, I now have a great File IO library for AIR and I&#8217;m able to download and playback HDS content locally.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/GEi-0gg8n3YKWw-ITCYDu4wsgsU/0/da"><img src="http://feedads.g.doubleclick.net/~a/GEi-0gg8n3YKWw-ITCYDu4wsgsU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/GEi-0gg8n3YKWw-ITCYDu4wsgsU/1/da"><img src="http://feedads.g.doubleclick.net/~a/GEi-0gg8n3YKWw-ITCYDu4wsgsU/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/codecook?a=oCq8ngvgcBk:1YwWUAfgj6U:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/codecook?i=oCq8ngvgcBk:1YwWUAfgj6U:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=oCq8ngvgcBk:1YwWUAfgj6U:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/codecook?i=oCq8ngvgcBk:1YwWUAfgj6U:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=oCq8ngvgcBk:1YwWUAfgj6U:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/codecook?i=oCq8ngvgcBk:1YwWUAfgj6U:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=oCq8ngvgcBk:1YwWUAfgj6U:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/codecook?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=oCq8ngvgcBk:1YwWUAfgj6U:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/codecook?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=oCq8ngvgcBk:1YwWUAfgj6U:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/codecook?i=oCq8ngvgcBk:1YwWUAfgj6U:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=oCq8ngvgcBk:1YwWUAfgj6U:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/codecook?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/codecook/~4/oCq8ngvgcBk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.thekuroko.com/http-dynamic-streaming-download-and-playback/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.thekuroko.com/http-dynamic-streaming-download-and-playback/</feedburner:origLink></item>
		<item>
		<title>Sencha’s EXTJS 4: Getting Started Quickly</title>
		<link>http://feedproxy.google.com/~r/codecook/~3/PwDDJrd1wzA/</link>
		<comments>http://www.thekuroko.com/extjs-4-getting-started-sencha/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 18:01:00 +0000</pubDate>
		<dc:creator>John Crosby</dc:creator>
				<category><![CDATA[How To]]></category>
		<category><![CDATA[extjs]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[sencha]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.thekuroko.com/?p=966</guid>
		<description><![CDATA[Prerequisites: Web server &#8211; I’m using XAMPP Text editor/IDE &#8211; I’m using Aptana &#38; TextMate Getting started with Sencha’s EXTJS Download the Library &#8211; EXTJS 4.0.7: http://www.sencha.com/products/extjs/download/ext-js-4.0.7/1234 Unzip the contents of the download to a folder in root of your web server. I used /extjs. It should look something like the following image where “extjs” is [...]]]></description>
			<content:encoded><![CDATA[<p>Prerequisites:</p>
<ul>
<li>Web server &#8211; I’m using <a title="XAMPP" href="http://www.apachefriends.org/en/xampp.html" target="_blank">XAMPP</a></li>
<li>Text editor/IDE &#8211; I’m using <a title="Aptana Studio 3" href="http://aptana.com/" target="_blank">Aptana</a> &amp; <a title="TextMate" href="http://macromates.com/" target="_blank">TextMate</a></li>
</ul>
<p>Getting started with Sencha’s EXTJS</p>
<ol>
<li>Download the Library &#8211; EXTJS 4.0.7: <a href="http://www.sencha.com/products/extjs/download/ext-js-4.0.7/1234">http://www.sencha.com/products/extjs/download/ext-js-4.0.7/1234</a></li>
<li>Unzip the contents of the download to a folder in root of your web server. I used /extjs. It should look something like the following image where “extjs” is at the root of your web server:
<p><div id="attachment_982" class="wp-caption alignnone" style="width: 267px"><a href="http://www.thekuroko.com/wp-content/uploads/2012/02/01-extjs-getting-started.png" rel="lightbox[966]"><img class="size-full wp-image-982 " title="Getting Started with EXTJS: Screen Shot of Unpacked Files" src="http://www.thekuroko.com/wp-content/uploads/2012/02/01-extjs-getting-started.png" alt="Screen Shot of Unpacked EXTJS Files" width="257" height="417" /></a><p class="wp-caption-text">Screen Shot of Unpacked EXTJS Files</p></div></li>
<li>Make sure your web server is running and open <a href="http://localhost/extjs/index.html">http://localhost/extjs/index.html</a> in your browser.</li>
<li>Click the View the Examples button.</li>
<li>This is a good place to start to see what EXTJS is capable of.</li>
</ol>
<p>At this point your ready to go. The <a title="Sencha: Getting Started with EXTJS" href="http://docs.sencha.com/ext-js/4-0/#/guide/getting_started" target="_blank">Getting Started Guide</a> has plenty of information to get your rolling and provide you will a decent knowledge set for EXTJS development.</p>
<p><em>You want to build something though right? So, let’s build.</em></p>
<ol>
<li>Create a directory named “extplay” in the root of your web server.</li>
<li>In the extplay directory create a MyApp.html file.<br />
<em>Usually EXTJS applications are contained in a single HTML file.</em></li>
<li>Open the MyApp.html file in your text editor.</li>
<li>Add the following HTML template code to your application:
<pre><!--<span class="hiddenSpellError" pre=""-->&lt;!DOCTYPE HTML&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;EXTJS Getting Started: MyApp&lt;/title&gt;
        &lt;link rel="stylesheet" type="text/css" href="/extjs/resources/css/ext-all.css"&gt;
        &lt;script type="text/javascript" src="/extjs/ext-all.js"&gt;&lt;/script&gt;
        &lt;script type="text/javascript" src="app.js"&gt;&lt;/script&gt;
    &lt;/head&gt;
    &lt;body&gt;&lt;/body&gt;
&lt;/html&gt;<script type="text/javascript" src="/extjs/ext-all.js"></script><script type="text/javascript" src="app.js"></script></pre>
</li>
<li>You will notice the app.js file in the HTML above.</li>
<li>Create the app.js file in your extplay directory and open it in your text editor.</li>
<li>Now we can write some code for our simple application.</li>
<li>Add the following code to the app.js file:
<pre>Ext.onReady(function() {
 Ext.Msg.alert('Status', '&lt;h1&gt;Hello World!&lt;\/h1&gt;');
});</pre>
</li>
<li>Open MyApp.html (<a title="MyApp" href="http://localhost/extplay/MyApp.html" target="_blank">http://localhost/extplay/MyApp.html</a>) in your browser. You should see something similar to the following image:
<p><div id="attachment_983" class="wp-caption alignnone" style="width: 310px"><a href="http://www.thekuroko.com/wp-content/uploads/2012/02/02-extjs-getting-started.png" rel="lightbox[966]"><img class="size-medium wp-image-983" title="Sencha EXTJS: Message Box" src="http://www.thekuroko.com/wp-content/uploads/2012/02/02-extjs-getting-started-300x67.png" alt="Sencha EXTJS: Message Box" width="300" height="67" /></a><p class="wp-caption-text">The EXTJS Message Box</p></div></li>
<li>This is not a full-on EXTJS application &#8211; this just illustrates how you can use pieces and parts of EXTJS when and how you’d like.</li>
<li>Let’s create a EXTJS application.</li>
<li>Open app.js.</li>
<li>Replace the code in app.js with the following code:
<pre>Ext.application({
   name: 'MyApp',
   launch: function() {
    Ext.create('Ext.container.Viewport', {
    layout: 'fit',
    items: [
    {
     title: 'EXTJS: MyApp',
     html : 'Hello World!'
    }
   ]
  });
 }
});</pre>
</li>
<li>Open MyApp.html in a browser or refesh the browser if it is already open.</li>
<li>You should see something similar to the following:
<p><div id="attachment_984" class="wp-caption alignnone" style="width: 317px"><a href="http://www.thekuroko.com/wp-content/uploads/2012/02/03-extjs-getting-started.png" rel="lightbox[966]"><img class="size-full wp-image-984" title="Sencha EXTJS: EXTJS Barebones Application" src="http://www.thekuroko.com/wp-content/uploads/2012/02/03-extjs-getting-started.png" alt="Sencha EXTJS: EXTJS Barebones Application" width="307" height="217" /></a><p class="wp-caption-text">Sencha EXTJS: EXTJS Barebones Application</p></div></li>
<li>Here is what is going on in the code example:</li>
<ol>
<li>Ext.application: Defines the application named “MyApp”</li>
<li>launch: The built in launch event creates a Viewport and sets it’s config object with a layout and items.</li>
<li>layout: Tells the Viewport to fit to the size of its parent (in this case the body of the HTML)</li>
<li>items: defines the children of the viewport. In this case a title and some HTML.</li>
</ol>
</ol>
<p>Now you’ve got an EXTJS 4 application up and running. What do you think?</p>
<p>I’ll follow this post up with some more information on what really goes on with the application, creating and managing the “items” or children of your application &amp; how Sencha handles dependancies and deployment.</p>
<p><a href="http://www.thekuroko.com/wp-content/uploads/2012/02/sencha-logo.png" rel="lightbox[966]"><img class="alignright size-medium wp-image-995" title="Sencha" src="http://www.thekuroko.com/wp-content/uploads/2012/02/sencha-logo-300x112.png" alt="Sencha" width="300" height="112" /></a>Resources:</p>
<ul>
<li>EXTJS 4.0.7: <a title="Sencha: EXTJS 4.0.7 Download" href="http://www.sencha.com/products/extjs/download/ext-js-4.0.7/1234" target="_blank">http://www.sencha.com/products/extjs/download/ext-js-4.0.7/1234</a></li>
<li>Forum: <a title="Sencha: Forum" href="http://www.sencha.com/forum/register.php" target="_blank">http://www.sencha.com/forum/register.php</a></li>
<li>Learning Center: <a title="Sencha: Learning Center" href="http://www.sencha.com/learn/" target="_blank">http://www.sencha.com/learn/</a></li>
<li>Getting Started Guide for EXTJS 4: <a title="Sencha EXTJS: Getting Started" href="http://docs.sencha.com/ext-js/4-0/#/guide/getting_started" target="_blank">http://docs.sencha.com/ext-js/4-0/#/guide/getting_started</a></li>
</ul>
<div class="SPOSTARBUST-Related-Posts"><H3>Related Posts</H3><ul class="entry-meta"><li class="SPOSTARBUST-Related-Post"><a title="Apollo camp!" href="http://www.thekuroko.com/apollo-camp/" rel="bookmark">Apollo camp!</a></li>
<li class="SPOSTARBUST-Related-Post"><a title="AJAX Data Services Released" href="http://www.thekuroko.com/flex-ajax-bridge/" rel="bookmark">AJAX Data Services Released</a></li>
<li class="SPOSTARBUST-Related-Post"><a title="Expand to the Desktop with Apollo!" href="http://www.thekuroko.com/expand-to-the-desktop-with-apollo/" rel="bookmark">Expand to the Desktop with Apollo!</a></li>
<li class="SPOSTARBUST-Related-Post"><a title="Quick IE Fix" href="http://www.thekuroko.com/quick-ie-fix/" rel="bookmark">Quick IE Fix</a></li>
</ul></div>
<p><a href="http://feedads.g.doubleclick.net/~a/6_OdHGduLGnlQZEHMKvbsosimRI/0/da"><img src="http://feedads.g.doubleclick.net/~a/6_OdHGduLGnlQZEHMKvbsosimRI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/6_OdHGduLGnlQZEHMKvbsosimRI/1/da"><img src="http://feedads.g.doubleclick.net/~a/6_OdHGduLGnlQZEHMKvbsosimRI/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/codecook?a=PwDDJrd1wzA:R2KJoijZy50:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/codecook?i=PwDDJrd1wzA:R2KJoijZy50:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=PwDDJrd1wzA:R2KJoijZy50:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/codecook?i=PwDDJrd1wzA:R2KJoijZy50:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=PwDDJrd1wzA:R2KJoijZy50:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/codecook?i=PwDDJrd1wzA:R2KJoijZy50:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=PwDDJrd1wzA:R2KJoijZy50:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/codecook?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=PwDDJrd1wzA:R2KJoijZy50:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/codecook?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=PwDDJrd1wzA:R2KJoijZy50:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/codecook?i=PwDDJrd1wzA:R2KJoijZy50:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=PwDDJrd1wzA:R2KJoijZy50:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/codecook?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/codecook/~4/PwDDJrd1wzA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.thekuroko.com/extjs-4-getting-started-sencha/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.thekuroko.com/extjs-4-getting-started-sencha/</feedburner:origLink></item>
		<item>
		<title>Aptana SDOCML &amp; Code Hinting Support</title>
		<link>http://feedproxy.google.com/~r/codecook/~3/Nn4d4k8l94E/</link>
		<comments>http://www.thekuroko.com/aptana-sdocml-code-hinting-support/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 18:43:03 +0000</pubDate>
		<dc:creator>John Crosby</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[aptana]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[extjs]]></category>
		<category><![CDATA[sdocml]]></category>
		<category><![CDATA[sencha]]></category>

		<guid isPermaLink="false">http://www.thekuroko.com/?p=948</guid>
		<description><![CDATA[Prompted by this post, I&#8217;ve been working on a tool that uses jsduck and Adobe AIR to create the SDOCML necessary for Aptana code hinting. Specifically I&#8217;ve been playing with EXTJS 4.0 becuaseof some interest in Sencha. In the near future I&#8217;ll post the SDOCML files that I&#8217;ve created for the code hinting and once [...]]]></description>
			<content:encoded><![CDATA[<p>Prompted by <a title="Aptana Studio 3 EXTJS 4.0 Support" href="https://aptanastudio.tenderapp.com/discussions/suggestions/342-aptana-support-for-extjs-40">this post</a>, I&#8217;ve been working on a tool that uses <a title="jsduck: Simple JavaScript Duckumentation generator." href="https://github.com/senchalabs/jsduck">jsduck</a> and Adobe AIR to create the <a title="ScriptDoc XML (SDOCML) 2.0 Specification" href="https://wiki.appcelerator.org/display/tis/ScriptDoc+XML+%28SDOCML%29+2.0+Specification">SDOCML</a> necessary for Aptana code hinting. Specifically I&#8217;ve been playing with EXTJS 4.0 becuaseof some interest in Sencha.</p>
<p>In the near future I&#8217;ll post the SDOCML files that I&#8217;ve created for the code hinting and once I get the tool looking presentable and working efficiently, I&#8217;ll post the source of that to GitHub.</p>
<p>Here is the current version of the file. I&#8217;m not completely sure is has everything it needs. So, it is a work in progress and I&#8217;ll post updates as I create them.<br />
<a title="Aptana SDOCML &amp; Code Hinting Support SDOCML File" href="http://www.thekuroko.com/wp-content/plugins/downloads-manager/upload/extjs4.0-v0.1.sdocml" target="_blank">extjs4.0-v0.1.sdocml</a></p>
<p>If you&#8217;d like the SDOCML for EXTJS 4.1 Beta<br />
<a title="Aptana Code Hinting Support SDOCML File EXTJS 4.1 Beta" href="http://thekuroko.com/wp-content/plugins/downloads-manager/upload/extjs4.1.beta-v.0.1.sdocml" target="_blank">extjs4.1.beta-v0.1.sdocml</a></p>
<div class="SPOSTARBUST-Related-Posts"><H3>Related Posts</H3><ul class="entry-meta"><li class="SPOSTARBUST-Related-Post"><a title="E4X XML Namespaces" href="http://www.thekuroko.com/e4x-xml-namespaces/" rel="bookmark">E4X XML Namespaces</a></li>
<li class="SPOSTARBUST-Related-Post"><a title="Setting up Cruisecontrol &#8211; Continuous Integration System" href="http://www.thekuroko.com/setting-up-cruisecontrol-continuous-integration-system/" rel="bookmark">Setting up Cruisecontrol &#8211; Continuous Integration System</a></li>
<li class="SPOSTARBUST-Related-Post"><a title="Continuous Integration &#8211; The pieces and parts!" href="http://www.thekuroko.com/continuous-integration-the-pieces-and-parts/" rel="bookmark">Continuous Integration &#8211; The pieces and parts!</a></li>
<li class="SPOSTARBUST-Related-Post"><a title="David is on Adobe &#8211; H.264 Article" href="http://www.thekuroko.com/david-is-on-adobe-h264-article/" rel="bookmark">David is on Adobe &#8211; H.264 Article</a></li>
<li class="SPOSTARBUST-Related-Post"><a title="More Flexible Code &#8211; Programming to an Interface" href="http://www.thekuroko.com/more-flexible-code-programming-to-an-interface/" rel="bookmark">More Flexible Code &#8211; Programming to an Interface</a></li>
</ul></div>
<p><a href="http://feedads.g.doubleclick.net/~a/IM1HBiVZkpsCSOHnWYWBJxMXw6s/0/da"><img src="http://feedads.g.doubleclick.net/~a/IM1HBiVZkpsCSOHnWYWBJxMXw6s/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/IM1HBiVZkpsCSOHnWYWBJxMXw6s/1/da"><img src="http://feedads.g.doubleclick.net/~a/IM1HBiVZkpsCSOHnWYWBJxMXw6s/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/codecook?a=Nn4d4k8l94E:2VyseH6xjP0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/codecook?i=Nn4d4k8l94E:2VyseH6xjP0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=Nn4d4k8l94E:2VyseH6xjP0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/codecook?i=Nn4d4k8l94E:2VyseH6xjP0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=Nn4d4k8l94E:2VyseH6xjP0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/codecook?i=Nn4d4k8l94E:2VyseH6xjP0:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=Nn4d4k8l94E:2VyseH6xjP0:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/codecook?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=Nn4d4k8l94E:2VyseH6xjP0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/codecook?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=Nn4d4k8l94E:2VyseH6xjP0:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/codecook?i=Nn4d4k8l94E:2VyseH6xjP0:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=Nn4d4k8l94E:2VyseH6xjP0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/codecook?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/codecook/~4/Nn4d4k8l94E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.thekuroko.com/aptana-sdocml-code-hinting-support/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.thekuroko.com/aptana-sdocml-code-hinting-support/</feedburner:origLink></item>
		<item>
		<title>Take the PIA out of load testing AMF services</title>
		<link>http://feedproxy.google.com/~r/codecook/~3/pDhzxzAafPc/</link>
		<comments>http://www.thekuroko.com/take-the-pia-out-of-load-testing-amf-services/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 17:01:00 +0000</pubDate>
		<dc:creator>John Crosby</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[How To]]></category>
		<category><![CDATA[amf]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[load test]]></category>
		<category><![CDATA[loadui]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[remoting]]></category>
		<category><![CDATA[soapui]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.thekuroko.com/?p=934</guid>
		<description><![CDATA[Testing service APIs is a big pain. More so when you are using a format that isn&#8217;t widely supported by testing tools. Load testing AMF services&#8230;ugh. Recently I was tasked with finding a way to load test some AMF services built using PHP. In the past I had used jMeter for load testing. So, that [...]]]></description>
			<content:encoded><![CDATA[<p>Testing service APIs is a big pain. More so when you are using a format that isn&#8217;t widely supported by testing tools. Load testing AMF services&#8230;ugh.</p>
<p>Recently I was tasked with finding a way to load test some AMF services built using PHP. In the past I had used jMeter for load testing. So, that is where I started. jMeter is a good tool, but not for AMF. A few extensions for jMeter have been built for AMF, but they are a PIA to setup.</p>
<p>I found a couple of tools that have made load testing AMF serivices a snap. Both of the tools are from SmartBear, and both are open source and free to use. Bonus!</p>
<ol>
<li>Tool one: <a href="http://soapui.org/">soapUI</a></li>
<li>Tool two: <a href="http://loadui.org/">loadUI</a></li>
</ol>
<p>The following are the basic steps to get a simple load test set up:</p>
<h2>Setting up the project</h2>
<ol>
<li>Download and install soapUI (you&#8217;ll need Java too).</li>
<li>Start up soapUI.<br />
<img style="border: 0pt none;" title="001-start-up-soapui.PNG" src="http://www.thekuroko.com/wp-content/uploads/2011/11/001-start-up-soapui.png" alt="soapUI Startup" width="360" height="276" border="0" /></li>
<li>Create a new soapUI project &#8211; File -&gt; &#8216;New soapUI Project&#8217;</li>
<li>Name your project and click &#8216;OK&#8217;.<br />
<img style="border: 0pt none;" title="002-soapUI-new-project.PNG" src="http://www.thekuroko.com/wp-content/uploads/2011/11/002-soapUI-new-project.png" alt="soapUI New Project" width="360" height="276" border="0" /></li>
<li>Add a new TestSuite &#8211; right-click your new project -&gt; &#8216;New TestSuite&#8217;</li>
<li>Name your TestSuite and click &#8216;OK&#8217;<br />
<img title="003-soapui-new-testsuite.PNG" src="http://www.thekuroko.com/wp-content/uploads/2011/11/003-soapui-new-testsuite.png" alt="soapUI New TestSuite" width="321" height="150" border="0" /></li>
<li>Create a new TestCase &#8211; right-click the new TestSuite -&gt; &#8216;New TestCase&#8217;</li>
<li>Name your TestCase and click &#8216;OK&#8217;<br />
<img title="004-soapui-new-testcase.PNG" src="http://www.thekuroko.com/wp-content/uploads/2011/11/004-soapui-new-testcase.png" alt="soapui New TestCase" width="329" height="153" border="0" /></li>
<li>Expand the Test Case</li>
<li>Right-click &#8216;Test Steps&#8217;, select &#8216;Add Step&#8217; -&gt; AMF Request.<br />
<img title="005-soapui-new-AMF-request.PNG" src="http://www.thekuroko.com/wp-content/uploads/2011/11/005-soapui-new-AMF-request.png" alt="soapui New AMF Request" width="253" height="183" border="0" /></li>
<li>Your project is set up and ready-to-roll. Save it.</li>
</ol>
<h2>Configuring the AMF Request</h2>
<p>Now that we have a request set up we need to specify the arguments for the call. The is where I had troubles with jMeter &#8211; setting up the data required proxies and additional tools. There was no where to easily create &amp; edit AMF object to pass along in the AMF request.</p>
<p>Enter soapUI. Lets say we have an API method called getMonkeys(). getMonkeys() requires an array of ids that specifies what monkeys we want in the list. The name of this parameter is &#8216;monkeyIds&#8217;.</p>
<ol>
<li>In soapUI, right-click the AMF Request object and select &#8216;Open Editor&#8217;. You should see a window similar to the following:<br />
<img style="border: 0pt none;" title="006-amf-request-editor.PNG" src="http://www.thekuroko.com/wp-content/uploads/2011/11/006-amf-request-editor.png" alt="AMF Request Editor" width="360" height="287" border="0" /></li>
<li>In the text field for &#8216;Endpoint&#8217; enter your service end point. For example: http://www.thekuroko.com/Monkey/amfphp/gateway.php</li>
<li>Enter the name of your call in the text field for the AMF Call setting: For example Monkey.getMonkeys</li>
<li>Just under the entry for Endpoint add property to the property list for the call by clicking the &#8216;Add Property&#8217; button.<br />
<img title="007a-new-property-button.PNG" src="http://www.thekuroko.com/wp-content/uploads/2011/11/007a-new-property-button.png" alt="New Property Button" width="27" height="26" border="0" /></li>
<li>Enter &#8216;monkeyIds&#8217; as the name of the property. If the value for this property were a simple value we could enter it into the value column. We need an array though.</li>
<li>To set the value for the property we&#8217;ll use the script window just under the property list.</li>
<li>In the script window, enter the following to create an Array that contains the id values 1,2 &amp; 3 and assigns that Array to the monkeyIds parameter.<br />
<span style="font-family: monospace; white-space: pre;">parameters["monkeyIds"] = [1,2,3];</span></li>
<li>That is it. The call for getMonkeys() is set up.</li>
<li>To test the call click the little green arrow in the top left of the AMF Request editor.</li>
<li>If your paths and data are set up correctly, you should see an XML formatted response in the window to the right of the Script editor.<br />
<img style="border: 0pt none;" title="008-soapui-amf-request-result.PNG" src="http://www.thekuroko.com/wp-content/uploads/2011/11/008-soapui-amf-request-result.png" alt="soapUI AMF Request Result" width="269" height="305" border="0" /></li>
</ol>
<h2>Creating and Running a Load Test</h2>
<p>So now we have a test for a service, but we wanted to get some load testing done. If you&#8217;re looking for quick and simple load testing, you don&#8217;t have to go much further than soapUI itself. To create a load test in soapUI:</p>
<ol>
<li>Right-click the &#8216;Load Tests&#8217; node under &#8216;Test Steps&#8217; -&gt; &#8216;New Load Test&#8217;</li>
<li>Name the new load test and click &#8216;OK&#8217;</li>
<li>2 steps. That&#8217;s it, the load test is set up. You can run the test &#8220;as-is&#8221;.</li>
</ol>
<p>Now, this is a very simple load test and there are a ton of things you can add to the test to improve it to build more useful load tests within soapUI.</p>
<h3>Running Load Test with loadUI</h3>
<p>The other tool I mentioned, loadUI, is built to integrate with soapUI and make load testing &#8220;easier and more efficient&#8221;.</p>
<p>Once loadUI is installed can you execute the test case that you set up in soapUI in loadUI.</p>
<ol>
<li>Right-click the test case, then select &#8216;Run with loadUI&#8217;.</li>
<li>You will be prompted to save the project, do so.</li>
<li>Select &#8216;Fixed Rate for the &#8216;Default Generator&#8217; selection &#8211; this will determine how &#8220;clients&#8221; are generated for the load test.</li>
<li>Select &#8216;Statistics&#8217; for the &#8216;Default Statistics&#8217; selection &#8211; this will display a graph for the load test metrics.<br />
<img title="009-loadui-test-settings.PNG" src="http://www.thekuroko.com/wp-content/uploads/2011/11/009-loadui-test-settings.png" alt="loadUI Test Settings" width="472" height="295" border="0" /></li>
<li>Click &#8216;OK&#8217;.</li>
<li>loadUI will launch.<br />
<img style="border: 0pt none;" title="010-loadui-startup.PNG" src="http://www.thekuroko.com/wp-content/uploads/2011/11/010-loadui-startup.png" alt="loadUI Sstartup" width="360" height="299" border="0" /></li>
<li>Click the &#8216;Play/Stop&#8217; button to start the load test.<br />
<img title="010a-loadui-play-stop-button.PNG" src="http://www.thekuroko.com/wp-content/uploads/2011/11/010a-loadui-play-stop-button.png" alt="load Play/Stop Button" width="36" height="38" border="0" /></li>
</ol>
<p>You can play around with the Generator settings to change the rate at which clients are created to see changes in the load test results while the load test is running.<br />
<img title="011a-loadui-generator.PNG" src="http://www.thekuroko.com/wp-content/uploads/2011/11/011a-loadui-generator.png" alt="loadUI Generator" width="278" height="172" border="0" /></p>
<p><img title="011c-load-ui-stats.PNG" src="http://www.thekuroko.com/wp-content/uploads/2011/11/011c-load-ui-stats.png" alt="loadUI Stats" width="483" height="382" border="0" /></p>
<p>To view a report of the results you can click the &#8216;Summary Report&#8217; button in the top right of the loadUI interface.<br />
<img title="012-loadui-summary-report button.PNG" src="http://www.thekuroko.com/wp-content/uploads/2011/11/012-loadui-summary-report-button.png" alt="loadUI Summary Report Button" width="31" height="32" border="0" /></p>
<p>This is just a simple load test and there are plenty of additional settings, assertions and analysis tools that can be added, adjusted and tweaked to improve the validity of the load tests.</p>
<h2>Next Steps</h2>
<p>Our next step is to integrate the tests into our Continuous Integration (CI) system. We use <a href="http://jenkins-ci.org/">Jenkins</a> and I saw <a href="http://www.eviware.com/blog/?p=129">this post about Automating loadUI and Jenkins</a> (formerly Hudson). So, in theory it can be done. I&#8217;ll let you know what we get worked out on that end when we get there.</p>
<p>So far, I&#8217;m pretty excited about the two tools. They are very useful, and free to boot. Hey SmartBear &#8211; you really are smart, thank you &#8211; you rule.</p>
<h3>Resources:</h3>
<ul>
<li><a href="http://soapui.org/">soapUI</a></li>
<li><a href="http://loadui.org/">loadUI</a></li>
<li><a href="http://www.soapui.org/Load-Testing/loadtest-execution.html">Creating and Running LoadTests</a></li>
<li><a href="http://www.soapui.org/AMF/getting-started.html">AMF: Getting Started</a></li>
<li><a href="http://www.soapui.org/AMF/calling-amf-services.html">Calling AMF Services</a></li>
</ul>
<div class="SPOSTARBUST-Related-Posts"><H3>Related Posts</H3><ul class="entry-meta"><li class="SPOSTARBUST-Related-Post"><a title="Identifying Multiple Screens with Adobe AIR" href="http://www.thekuroko.com/213/" rel="bookmark">Identifying Multiple Screens with Adobe AIR</a></li>
<li class="SPOSTARBUST-Related-Post"><a title="Adobe Announces the Open Screen Project" href="http://www.thekuroko.com/adobe-announces-the-open-screen-project/" rel="bookmark">Adobe Announces the Open Screen Project</a></li>
<li class="SPOSTARBUST-Related-Post"><a title="Beatport Downloader 1.0 officially launched!" href="http://www.thekuroko.com/beatport-downloader-10-officially-launched/" rel="bookmark">Beatport Downloader 1.0 officially launched!</a></li>
<li class="SPOSTARBUST-Related-Post"><a title="Thinking about a Flex Project? Start here." href="http://www.thekuroko.com/thinking-about-a-flex-project-start-here/" rel="bookmark">Thinking about a Flex Project? Start here.</a></li>
<li class="SPOSTARBUST-Related-Post"><a title="My New Certifications" href="http://www.thekuroko.com/my-new-certifications/" rel="bookmark">My New Certifications</a></li>
</ul></div>
<p><a href="http://feedads.g.doubleclick.net/~a/sOkqwN4qDOmwLgN4f7apzMLWgpM/0/da"><img src="http://feedads.g.doubleclick.net/~a/sOkqwN4qDOmwLgN4f7apzMLWgpM/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/sOkqwN4qDOmwLgN4f7apzMLWgpM/1/da"><img src="http://feedads.g.doubleclick.net/~a/sOkqwN4qDOmwLgN4f7apzMLWgpM/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/codecook?a=pDhzxzAafPc:Iw7_UR0W7ow:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/codecook?i=pDhzxzAafPc:Iw7_UR0W7ow:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=pDhzxzAafPc:Iw7_UR0W7ow:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/codecook?i=pDhzxzAafPc:Iw7_UR0W7ow:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=pDhzxzAafPc:Iw7_UR0W7ow:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/codecook?i=pDhzxzAafPc:Iw7_UR0W7ow:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=pDhzxzAafPc:Iw7_UR0W7ow:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/codecook?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=pDhzxzAafPc:Iw7_UR0W7ow:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/codecook?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=pDhzxzAafPc:Iw7_UR0W7ow:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/codecook?i=pDhzxzAafPc:Iw7_UR0W7ow:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=pDhzxzAafPc:Iw7_UR0W7ow:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/codecook?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/codecook/~4/pDhzxzAafPc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.thekuroko.com/take-the-pia-out-of-load-testing-amf-services/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.thekuroko.com/take-the-pia-out-of-load-testing-amf-services/</feedburner:origLink></item>
		<item>
		<title>Multi-screen is Sexy, even at Adobe Max</title>
		<link>http://feedproxy.google.com/~r/codecook/~3/_BweqJFRpwA/</link>
		<comments>http://www.thekuroko.com/multi-screen-is-sexy-even-at-adobe-max/#comments</comments>
		<pubDate>Wed, 28 Sep 2011 17:21:21 +0000</pubDate>
		<dc:creator>John Crosby</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[adobemax]]></category>
		<category><![CDATA[max2011]]></category>
		<category><![CDATA[multiple devices]]></category>
		<category><![CDATA[presentation]]></category>
		<category><![CDATA[video player]]></category>

		<guid isPermaLink="false">http://www.thekuroko.com/?p=901</guid>
		<description><![CDATA[There are too many devices to consider when developing video players now-a-days. Don&#8217;t you wish you didn&#8217;t have to think about each and every device that Bob &#38; Sally were using to play video? We&#8217;ve got it covered with our Adobe Max 2011 BYOD Lab &#8220;Video Player Development for Multiple Devices&#8221; . (boring name right? [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.thekuroko.com/wp-content/uploads/2011/09/MAX11_125x125_SPEAKER_grey.jpg" rel="lightbox[901]"><img class="alignleft size-full wp-image-903" title="MAX11_125x125_SPEAKER_grey" src="http://www.thekuroko.com/wp-content/uploads/2011/09/MAX11_125x125_SPEAKER_grey.jpg" alt="" width="125" height="125" /></a>There are too many devices to consider when developing video players now-a-days.</p>
<p>Don&#8217;t you wish you didn&#8217;t have to think about each and every device that Bob &amp; Sally were using to play video?</p>
<p>We&#8217;ve got it covered with our Adobe Max 2011 BYOD Lab <em><strong></strong></em></p>
<p style="text-align: center;"><em><strong>&#8220;Video Player Development for Multiple Devices&#8221;</strong></em> .<br />
<em>(boring name right? I know, but still&#8230;)</em></p>
<p>WTF is <strong>BYOD</strong>? Stands for <em><strong>B</strong></em>ring <em><strong>Y</strong></em>our <em><strong>O</strong></em>wn <em><strong>D</strong></em>evice &#8211; it just means you&#8217;ll need to bring your own devices to follow along. Here is what we&#8217;re looking at for setup:</p>
<ul>
<li>Install Flash Builder 4.5.1</li>
<li>Install Flash Media Server 4.5</li>
<li>Oh, and <strong><a title="Early Access to the Max 2011 BYOD Lab files." href="http://www.thekuroko.com/update-f4fragment-extractor-app-adobe-marketplace-problems/" target="_blank">grab the lab files</a></strong></li>
</ul>
<p>We&#8217;ll go over concepts and code with you to take the tediousness out of developing video players.</p>
<p><strong>Android</strong>? Yep.</p>
<p><strong>iOS</strong>? Sure-nuff</p>
<p><strong>Blackberry</strong>? Um&#8230;.yeah, this is Flash baby &#8211; we got it.</p>
<p>We&#8217;ll show you how to AUTO-MAGICALLY detect the platform and screen size and let the player do the work for you.</p>
<p>If you&#8217;re attending our session, AWESOME. Thanks!</p>
<p>I&#8217;m sure you&#8217;d like to get going early right&#8230;I thought you might.</p>
<h3 style="text-align: center;"><strong><a title="Early Access to the Max 2011 BYOD Lab files." href="http://www.thekuroko.com/update-f4fragment-extractor-app-adobe-marketplace-problems/" target="_blank">Go download the BYOD Lab Files</a></strong></h3>
<p style="text-align: center;"><em>Hey, even if you&#8217;re not going to the session or Max, you&#8217;ll get some good sample files right? </em></p>
<p>While you&#8217;re at it, <a title="Sign up to recieve Jun's presentation files" href="http://www.thekuroko.com/update-f4fragment-extractor-app-adobe-marketplace-problems/" target="_blank">check out Jun Heider&#8217;s &#8220;Multiscreen Project Best Practices&#8221; session</a> too.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/yAgyYCOfqddHhT9amO8U_sbkHo0/0/da"><img src="http://feedads.g.doubleclick.net/~a/yAgyYCOfqddHhT9amO8U_sbkHo0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/yAgyYCOfqddHhT9amO8U_sbkHo0/1/da"><img src="http://feedads.g.doubleclick.net/~a/yAgyYCOfqddHhT9amO8U_sbkHo0/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/codecook?a=_BweqJFRpwA:54CAFMeNWFo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/codecook?i=_BweqJFRpwA:54CAFMeNWFo:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=_BweqJFRpwA:54CAFMeNWFo:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/codecook?i=_BweqJFRpwA:54CAFMeNWFo:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=_BweqJFRpwA:54CAFMeNWFo:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/codecook?i=_BweqJFRpwA:54CAFMeNWFo:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=_BweqJFRpwA:54CAFMeNWFo:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/codecook?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=_BweqJFRpwA:54CAFMeNWFo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/codecook?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=_BweqJFRpwA:54CAFMeNWFo:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/codecook?i=_BweqJFRpwA:54CAFMeNWFo:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=_BweqJFRpwA:54CAFMeNWFo:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/codecook?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/codecook/~4/_BweqJFRpwA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.thekuroko.com/multi-screen-is-sexy-even-at-adobe-max/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.thekuroko.com/multi-screen-is-sexy-even-at-adobe-max/</feedburner:origLink></item>
		<item>
		<title>UPDATE: F4Fragment Extractor App &amp; Adobe Marketplace Problems</title>
		<link>http://feedproxy.google.com/~r/codecook/~3/6qL15ygJAHA/</link>
		<comments>http://www.thekuroko.com/update-f4fragment-extractor-app-adobe-marketplace-problems/#comments</comments>
		<pubDate>Fri, 22 Jul 2011 23:19:22 +0000</pubDate>
		<dc:creator>John Crosby</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[adobe air]]></category>
		<category><![CDATA[air marketplace]]></category>
		<category><![CDATA[f4fragment extractor]]></category>
		<category><![CDATA[hds]]></category>
		<category><![CDATA[http dynamic streaming]]></category>
		<category><![CDATA[inmarket]]></category>
		<category><![CDATA[util]]></category>

		<guid isPermaLink="false">http://www.thekuroko.com/?p=894</guid>
		<description><![CDATA[I just received an email stating that Adobe will be closing down Adobe InMarket this includes the AIR Marketplace. So, I&#8217;ll start working on a way to distribute the F4Fragment Extractor. As soon as I get the app updates uploaded and in a place to mange it, I&#8217;ll let everyone know. Thanks for your patience. [...]]]></description>
			<content:encoded><![CDATA[<p>I just received an email stating that Adobe will be closing down Adobe InMarket this includes the AIR Marketplace. So, I&#8217;ll start working on a way to distribute the F4Fragment Extractor. As soon as I get the app updates uploaded and in a place to mange it, I&#8217;ll let everyone know. Thanks for your patience.</p>
<p>&nbsp;</p>
<div class="SPOSTARBUST-Related-Posts"><H3>Related Posts</H3><ul class="entry-meta"><li class="SPOSTARBUST-Related-Post"><a title="Advanced ActionScript 3 with Design Patterns" href="http://www.thekuroko.com/book-review-advanced-actionscript-3-with-design-patterns/" rel="bookmark">Advanced ActionScript 3 with Design Patterns</a></li>
<li class="SPOSTARBUST-Related-Post"><a title="ApolloRanch in Boulder CO" href="http://www.thekuroko.com/apolloranch-in-boulder-co/" rel="bookmark">ApolloRanch in Boulder CO</a></li>
<li class="SPOSTARBUST-Related-Post"><a title="Cairngen 1.0 &#8211; Now with ANT" href="http://www.thekuroko.com/cairngen-10-now-with-ant/" rel="bookmark">Cairngen 1.0 &#8211; Now with ANT</a></li>
<li class="SPOSTARBUST-Related-Post"><a title="Flex 2.0.2 hotfix released!" href="http://www.thekuroko.com/flex-202-hotfix-released/" rel="bookmark">Flex 2.0.2 hotfix released!</a></li>
<li class="SPOSTARBUST-Related-Post"><a title="Another Labs Release &#8211; LiveCycle Data Services 2.5" href="http://www.thekuroko.com/another-labs-release-livecycle-data-services-25/" rel="bookmark">Another Labs Release &#8211; LiveCycle Data Services 2.5</a></li>
</ul></div>
<p><a href="http://feedads.g.doubleclick.net/~a/wOXjBF_5lNqA1MnwoQhLnqdpbGo/0/da"><img src="http://feedads.g.doubleclick.net/~a/wOXjBF_5lNqA1MnwoQhLnqdpbGo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/wOXjBF_5lNqA1MnwoQhLnqdpbGo/1/da"><img src="http://feedads.g.doubleclick.net/~a/wOXjBF_5lNqA1MnwoQhLnqdpbGo/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/codecook?a=6qL15ygJAHA:XgRnyaDkDN0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/codecook?i=6qL15ygJAHA:XgRnyaDkDN0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=6qL15ygJAHA:XgRnyaDkDN0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/codecook?i=6qL15ygJAHA:XgRnyaDkDN0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=6qL15ygJAHA:XgRnyaDkDN0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/codecook?i=6qL15ygJAHA:XgRnyaDkDN0:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=6qL15ygJAHA:XgRnyaDkDN0:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/codecook?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=6qL15ygJAHA:XgRnyaDkDN0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/codecook?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=6qL15ygJAHA:XgRnyaDkDN0:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/codecook?i=6qL15ygJAHA:XgRnyaDkDN0:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=6qL15ygJAHA:XgRnyaDkDN0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/codecook?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/codecook/~4/6qL15ygJAHA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.thekuroko.com/update-f4fragment-extractor-app-adobe-marketplace-problems/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.thekuroko.com/update-f4fragment-extractor-app-adobe-marketplace-problems/</feedburner:origLink></item>
		<item>
		<title>HTTP Dynamic Streaming &amp; Live Events</title>
		<link>http://feedproxy.google.com/~r/codecook/~3/Zr3kfZRgqvQ/</link>
		<comments>http://www.thekuroko.com/http-dynamic-streaming-live-events/#comments</comments>
		<pubDate>Thu, 14 Jul 2011 19:52:35 +0000</pubDate>
		<dc:creator>John Crosby</dc:creator>
				<category><![CDATA[Streaming Media]]></category>
		<category><![CDATA[flash media server]]></category>
		<category><![CDATA[fms]]></category>
		<category><![CDATA[hds]]></category>
		<category><![CDATA[http dynamic streaming]]></category>
		<category><![CDATA[live events]]></category>
		<category><![CDATA[video streaming]]></category>

		<guid isPermaLink="false">http://www.thekuroko.com/?p=880</guid>
		<description><![CDATA[Flash Media Server (FMS) allows for the streaming of live video over HTTP. The following is a list of concepts that apply to HTTP Dynamic Streaming &#38; live streams: To stream live video over HTTP, the FMS uses the concept of live events. A live event is configured as part of a FMS application. An [...]]]></description>
			<content:encoded><![CDATA[<div>Flash Media Server (FMS) allows for the streaming of live video over HTTP. The following is a list of concepts that apply to HTTP Dynamic Streaming &amp; live streams:</div>
<ul>
<li>To stream live video over HTTP, the FMS uses the concept of live events.</li>
<li>A live event is configured as part of a FMS application.</li>
<li>An application configured for live events and can have multiple events.</li>
<li>As with normal FMS applications the name of the directory is the name of the event.</li>
<li>Live events can be configured for multi-bitrate streaming.</li>
<li>The streams are packaged as fragments and written to disk on the fly. Meaning a player can access the content after the live stream has stopped.</li>
<li>Live events support DVR and DRM.</li>
</ul>
<h1>Creating a live event</h1>
<p>The steps involved in creating a live event are very similar to creating a normal FMS application with the addition of the Event.xml file. They are:</p>
<ol>
<li>Create the FMS application {FMS_INSTALL}/applications/{APPLICATION_NAME}</li>
<li>In the application directory create the following directory sturcture: events/_defInst_/{EVENT_NAME}</li>
<li>Create an Event.xml file in the &#8216;events/_defInst_/{EVENT_NAME}&#8217; directory and at a minimum specify the fragment &amp; segment duration:
<pre class="brush: xml; title: ; notranslate">&lt;EventID&gt;{EVENT_NAME}&lt;/EventID&gt;
&lt;Recording&gt;
	&lt;FragmentDuration&gt;4000&lt;/FragmentDuration&gt;
	&lt;SegmentDuration&gt;10000&lt;/SegmentDuration&gt;
&lt;/Recording&gt;</pre>
</li>
</ol>
<p><em>When you install the Flash Media Server a preconfigured live event is installed as well. The application is called ‘livepkgr’ with a live event called ‘liveevent’. The configuration exists in ‘{FMS_INSTALL}/applications/livepkgr/events/_defInst_/liveevent’</em></p>
<h1 style="font-size: 2em;">Packaging for Live Events</h1>
<p>The Event.xml contains the configuration information for the live event. This includes:</p>
<ul>
<li>Segment and fragment settings</li>
<li>Content protection (Flash Access) information</li>
</ul>
<p>A sample Event.xml file with segment/fragment settings as well as content protection configuration:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;Event&gt;
	&lt;EventID&gt;liveevent&lt;/EventID&gt;
	&lt;Recording&gt;
		&lt;FragmentDuration&gt;4000&lt;/FragmentDuration&gt;
		&lt;SegmentDuration&gt;10000&lt;/SegmentDuration&gt;
		&lt;ContentProtection enabled=&quot;true&quot;&gt;
			&lt;ProtectionScheme&gt;FlashAccessV2&lt;/ProtectionScheme&gt;
			&lt;FlashAccessV2&gt;
				&lt;ContentID&gt;foo&lt;/ContentID&gt;
				&lt;CommonKeyFile&gt;common-key.bin&lt;/CommonKeyFile&gt;
				&lt;LicenseServerURL&gt;http://dill.corp.adobe.com:8090&lt;/LicenseServerURL&gt;
				&lt;TransportCertFile&gt;production_transport.der&lt;/TransportCertFile&gt;
				&lt;LicenseServerCertFile&gt;license_server.der&lt;/LicenseServerCertFile&gt;
				&lt;PackagerCredentialFile&gt;production_packager.pfx&lt;/PackagerCredentialFile&gt;
				&lt;PackagerCredentialPassword&gt;hbXX5omIhzI=&lt;/PackagerCredentialPassword&gt;
				&lt;PolicyFile&gt;policy01.pol&lt;/PolicyFile&gt;
			&lt;/FlashAccessV2&gt;
		&lt;ContentProtection&gt;
	&lt;/Recording&gt;
&lt;/Event&gt;</pre>
<p>The parts to pay attention to in the file Event.xml file above are:</p>
<ul>
<li><strong>SegmentDuration</strong>: The length of the segments in milliseconds. Each F4F file contains one segment.</li>
<li><strong>FragmentDuration</strong>: The length of the fragments in milliseconds. Each segment can contain multiple fragments.</li>
<li><strong>ContentProtection</strong>: Specifies if the content is protected as well as the details necessary for Flash Access content protection.</li>
</ul>
<h1>DVR &amp; Multi-bitrate Live Events</h1>
<p>To create a DVR or multi-bitrate (MBR) live event you will also need to create a Manifest.xml file in the live event folder (events/_defInst_/{EVENT_NAME}/Manifest.xml). This file will contain the DVR and MBR settings for the live event. Sample Manifest.xml file:</p>
<pre class="brush: xml; title: ; notranslate">&lt;manifest xmlns=&quot;http://ns.adobe.com/f4m/1.0&quot;&gt;
  &lt;dvrInfo beginOffset=&quot;0&quot; endOffset=&quot;0&quot;&gt;&lt;/dvrInfo&gt;
  &lt;media streamId=&quot;livestream1&quot; bitrate=&quot;100&quot; /&gt;
  &lt;media streamId=&quot;livestream2&quot; bitrate=&quot;200&quot; /&gt;
  &lt;media streamId=&quot;livestream3&quot; bitrate=&quot;350&quot; /&gt;
&lt;/manifest&gt;</pre>
<h2>The &lt;dvrInfo&gt; node:</h2>
<p>The &lt;dvrInfo&gt; node contains 2 attributes and controls the DVR functionality for the live event:</p>
<ul>
<li><strong>beginOffset</strong>: The value (in seconds) is where the client players will begin viewing the stream. The default is 0 &amp; negative values are treated as 0.</li>
<li><strong>endOffset</strong>: This value in seconds specifies how many seconds behind the current duration of the stream clients can view. The default is 0 &amp; negative values are treated as 0.</li>
</ul>
<p>Do not include this node if you do not want to use DVR functionality.</p>
<h2>The &lt;media&gt; node:</h2>
<p>Thenodes are used to specify the multi-bitrate (MBR) settings for the live event. The file is parsed and used by FMS to create the streams for the live event based on the settings specified in the media nodes. The manifest file is then updated with the nodes and data necessary (id, duration, bootstrap and metadata) for a client player to play the stream. The initial file should contain the following attributes for eachnode:</p>
<ul>
<li><strong>streamId</strong>: The name of the publishing stream</li>
<li><strong>bitrate</strong>: The bitrate the stream was encoded at</li>
</ul>
<p>If you do not want to use MBR do not include the media node(s).</p>
<h1>Playing Back Live Events</h1>
<p>Setting up an FMS application to publish a live event is as simple as creating the application (directory), and the Event.xml file. Of course adding MBR, DVR and content protection will add to the setup and configuration, but it is still a pretty straight forward process. Once the FMS application is configured we&#8217;ll need to do a couple of things:</p>
<ol>
<li>Publish a stream to the application and associate the stream with the live event</li>
<li>Play back the stream in a player. We&#8217;ll use the Flash Media Playback to keep things simple.</li>
</ol>
<h2>Publish a Stream and Associate it with a Live Event</h2>
<p>To publish a stream we&#8217;ll use the <a href="http://www.adobe.com/products/flashmediaserver/flashmediaencoder/?sdid=FCOSA&amp;skwcid=TC|22193|flash%20media%20live%20encoder||S|b|5895042022">Flash Media Live Encoder</a>. We&#8217;ll also need to associate the stream to the live event. This will be accomplished with a main.asc file and a bit of server side code. First we&#8217;ll cover the server side code, then we&#8217;ll set up the Flash Media Live Encoder.</p>
<h3>Associating a Stream with a Live Event</h3>
<p>I used the main.asc found in the &#8216;livepkgr&#8217; application installed with Flash Media Server as a base (I&#8217;ve change a couple of things). You can download the main.asc I use <a title="main.asc file example for HDS live streaming" href="http://thekuroko.com/wp-content/uploads/2011/07/main.asc" target="_blank">here</a>. The main.asc file just needs to go in the application directory ({FMS_INSTALL}/applications/{APPLICATION_NAME}). A little explanation of what is going on in the main.asc: The stream is associated to the live event in the onPublish() method (ln. 60 in <a title="main.asc file example for HDS live streaming" href="http://thekuroko.com/wp-content/uploads/2011/07/main.asc" target="_blank">main.asc</a>):</p>
<pre class="brush: as3; title: ; notranslate">s.liveEvent = liveEventName;</pre>
<p>The variable &#8216;liveEventName&#8217; is set to the stream name (default):</p>
<pre class="brush: as3; title: ; notranslate">if( nv.localeCompare( &quot;event&quot; ) == 0 )
{
  liveEventName = nval;
  break;
}</pre>
<p>or to the value passed in as the URL variable &#8216;event&#8217; (ln. 34 &#8211; 44 in <a title="Main.asc File Example for HDS Live Streaming" href="http://thekuroko.com/wp-content/uploads/2011/07/main.asc" target="_blank">main.asc</a>).</p>
<pre class="brush: as3; title: ; notranslate">var nvpairs = new LoadVars();
nvpairs.decode(queryString);
for( var nv in nvpairs )
{
  var nval = nvpairs[nv];
  if( nv.localeCompare( &quot;event&quot; ) == 0 )
  {
    liveEventName = nval;
    break;
  }
}</pre>
<p>Now to publish the stream.</p>
<h3>Publishing the Stream Using Flash Media Live Encoder</h3>
<p>To publish the stream we&#8217;ll need to connect to the FMS application and then pass the name of the event that we want to stream to. This is accomplished by adding URL variables to the stream name. For example: <img title="live-event-publish-settings.PNG" src="http://www.thekuroko.com/wp-content/uploads/2011/07/live-event-publish-settings.png" alt="Live event publish settings" width="325" height="306" border="0" /> <em>Make sure to replace {APPLICATION_NAME} with the actual name of your live event application and {EVENT_NAME} with the actual name of your event.</em> You will also need to make sure you are using H.264 and set up any MBR streams: <img title="live-event-publish-settings-2.PNG" src="http://www.thekuroko.com/wp-content/uploads/2011/07/live-event-publish-settings-2.png" alt="Live event publish settings 2" width="600" height="368" border="0" />Click the start button, and the stream should start publishing to your FMS server.</p>
<h2>Playing Back the Live Event</h2>
<p>To play back the stream, we&#8217;ll use the Flash Media Playback. So go to <a href="http://www.osmf.org/configurator/fmp">http://www.osmf.org/configurator/fmp</a>to setup the player.</p>
<ol>
<li>Set the &#8216;Video Source&#8217; to: http://{FMS_SERVER}:{FMS_HTTP_PORT}/live/events/{APPLICATION_NAME}/events/_defInst_/{EVENT_NAME}.f4m</li>
<li>Select <em>Yes</em> for &#8216;Are you using HTTP Sstreaming or Flash Access 2.0?&#8217;</li>
<li>Remove the value for &#8216;Poster frame file location&#8217;</li>
<li>Select <em>Yes</em> for &#8216;Autoplay Content&#8217;</li>
<li>Click the &#8216;Preview&#8217; button.</li>
</ol>
<p>The live event should start playing: <img title="hds-live-event-playback.PNG" src="http://www.thekuroko.com/wp-content/uploads/2011/07/hds-live-event-playback2.png" alt="Hds live event playback" width="600" height="292" border="0" />There you go &#8211; live Events streamed over HTTP that supports multi-bitrate, DVR &amp; content protection using Flash Access. In the next few articles I&#8217;ll dive into Flash Access and what is required to get your content protected and secured. Resources:</p>
<ul>
<li>Flash Media Server Developer&#8217;s Guide: http://help.adobe.com/en_US/flashmediaserver/devguide/WSd391de4d9c7bd609-52e437a812a3725dfa0-8000.html</li>
</ul>

<p><a href="http://feedads.g.doubleclick.net/~a/P-9hpfk7txTkTFOeMvr7-UknO5g/0/da"><img src="http://feedads.g.doubleclick.net/~a/P-9hpfk7txTkTFOeMvr7-UknO5g/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/P-9hpfk7txTkTFOeMvr7-UknO5g/1/da"><img src="http://feedads.g.doubleclick.net/~a/P-9hpfk7txTkTFOeMvr7-UknO5g/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/codecook?a=Zr3kfZRgqvQ:--dWujeFPUY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/codecook?i=Zr3kfZRgqvQ:--dWujeFPUY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=Zr3kfZRgqvQ:--dWujeFPUY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/codecook?i=Zr3kfZRgqvQ:--dWujeFPUY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=Zr3kfZRgqvQ:--dWujeFPUY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/codecook?i=Zr3kfZRgqvQ:--dWujeFPUY:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=Zr3kfZRgqvQ:--dWujeFPUY:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/codecook?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=Zr3kfZRgqvQ:--dWujeFPUY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/codecook?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=Zr3kfZRgqvQ:--dWujeFPUY:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/codecook?i=Zr3kfZRgqvQ:--dWujeFPUY:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=Zr3kfZRgqvQ:--dWujeFPUY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/codecook?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/codecook/~4/Zr3kfZRgqvQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.thekuroko.com/http-dynamic-streaming-live-events/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.thekuroko.com/http-dynamic-streaming-live-events/</feedburner:origLink></item>
		<item>
		<title>F4Fragment Extractor App &amp; Adobe Marketplace Problems</title>
		<link>http://feedproxy.google.com/~r/codecook/~3/JOmflz5fRis/</link>
		<comments>http://www.thekuroko.com/f4fragment-extractor-app-adobe-marketplace-problems/#comments</comments>
		<pubDate>Mon, 11 Jul 2011 20:27:08 +0000</pubDate>
		<dc:creator>John Crosby</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[adobe marketplace]]></category>
		<category><![CDATA[f4fragment extractor]]></category>
		<category><![CDATA[hds]]></category>
		<category><![CDATA[osmf]]></category>
		<category><![CDATA[utility]]></category>

		<guid isPermaLink="false">http://www.thekuroko.com/?p=867</guid>
		<description><![CDATA[I want to let anyone interested in the F4Fragment Extractor know that I&#8217;m working with Adobe to resolve some issues with my Marketplace account. For now I can&#8217;t access the account to make updates and changes to the offering. My plan is to add some requested features like command line arguments and the ability to [...]]]></description>
			<content:encoded><![CDATA[<p>I want to let anyone interested in the F4Fragment Extractor know that I&#8217;m working with Adobe to resolve some issues with my Marketplace account. For now I can&#8217;t access the account to make updates and changes to the offering. My plan is to add some requested features like command line arguments and the ability to handle multi-bitrate files auto-magically. But, I can&#8217;t until Adobe helps with fixing my access.</p>
<p>I&#8217;ll make sure to post an update as soon as I get access to the site.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/VpHVmdPocj0tytSJqVy3mVemYXI/0/da"><img src="http://feedads.g.doubleclick.net/~a/VpHVmdPocj0tytSJqVy3mVemYXI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/VpHVmdPocj0tytSJqVy3mVemYXI/1/da"><img src="http://feedads.g.doubleclick.net/~a/VpHVmdPocj0tytSJqVy3mVemYXI/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/codecook?a=JOmflz5fRis:QV52SK-gsUU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/codecook?i=JOmflz5fRis:QV52SK-gsUU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=JOmflz5fRis:QV52SK-gsUU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/codecook?i=JOmflz5fRis:QV52SK-gsUU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=JOmflz5fRis:QV52SK-gsUU:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/codecook?i=JOmflz5fRis:QV52SK-gsUU:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=JOmflz5fRis:QV52SK-gsUU:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/codecook?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=JOmflz5fRis:QV52SK-gsUU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/codecook?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=JOmflz5fRis:QV52SK-gsUU:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/codecook?i=JOmflz5fRis:QV52SK-gsUU:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=JOmflz5fRis:QV52SK-gsUU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/codecook?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/codecook/~4/JOmflz5fRis" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.thekuroko.com/f4fragment-extractor-app-adobe-marketplace-problems/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.thekuroko.com/f4fragment-extractor-app-adobe-marketplace-problems/</feedburner:origLink></item>
		<item>
		<title>HTTP Dynamic Streaming Presentation Summary</title>
		<link>http://feedproxy.google.com/~r/codecook/~3/6688EMZQXVI/</link>
		<comments>http://www.thekuroko.com/http-dynamic-streaming-presentation-summary/#comments</comments>
		<pubDate>Thu, 07 Jul 2011 23:46:09 +0000</pubDate>
		<dc:creator>John Crosby</dc:creator>
				<category><![CDATA[Streaming Media]]></category>
		<category><![CDATA[hds]]></category>
		<category><![CDATA[http dynamic streaming]]></category>
		<category><![CDATA[persentation]]></category>

		<guid isPermaLink="false">http://www.thekuroko.com/?p=855</guid>
		<description><![CDATA[Okay, after a crazy week buried under bugs and project management tasks I&#8217;ve finally carved out some time to post the slides and resources from my HTTP Dynamic Streaming presentation I gave last month. You can grab the slides on Slide Share, although they won&#8217;t be too useful. The presentation was recorded &#8211; which will [...]]]></description>
			<content:encoded><![CDATA[<p>Okay, after a crazy week buried under bugs and project management tasks I&#8217;ve finally carved out some time to post the slides and resources from my HTTP Dynamic Streaming presentation I gave last month.</p>
<p>You can grab the slides on Slide Share, although they won&#8217;t be too useful.</p>
<p><a title="HTTP Dynamic Streaming: Getting Started" href="http://www.slideshare.net/jccrosby/http-dynamic-streaming-getting-started" target="_blank"><object type='application/x-shockwave-flash' wmode='opaque' data='http://static.slideshare.net/swf/ssplayer2.swf?id=8538072&doc=hds-slides-110707181106-phpapp02' width='425' height='348'><param name='movie' value='http://static.slideshare.net/swf/ssplayer2.swf?id=8538072&doc=hds-slides-110707181106-phpapp02' /><param name='allowFullScreen' value='true' /></object></a></p>
<p>The presentation was recorded &#8211; which will be more useful than the slides alone.  You can view the Connect session here: <a href="http://bit.ly/isfJmo">http://bit.ly/isfJmo</a>.</p>
<p>Resources:</p>
<ul>
<li>F4V File Format Spec: <a title="F4V File Format Specification" href="http://www.adobe.com/devnet/f4v.html" target="_blank">http://www.adobe.com/devnet/f4v.html</a></li>
<li>More detailed information on the F4M File Format: <a title="F4M File Format Specification" href="http://osmf.org/dev/osmf/specpdfs/FlashMediaManifestFileFormatSpecification.pdf" target="_blank">http://osmf.org/dev/osmf/specpdfs/FlashMediaManifestFileFormatSpecification.pdf</a></li>
<li>Flash Media Playback: <a title="Flash Media Playback" href="http://www.osmf.org/configurator/fmp/#" target="_blank">http://www.osmf.org/configurator/fmp/#</a></li>
<li>Strobe Media Playback: <a title="Strobe Media Playback" href="http://osmf.org/strobe_mediaplayback.html" target="_blank">http://osmf.org/strobe_mediaplayback.html</a></li>
</ul>
<p>Next on the list of stuff I&#8217;d like to get up on the site is a write-up about creating Live events. So look for that in the next few days now that I have some room to breath.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/Kr4BDKxSBu7dwvWTzTDQtkLjI8I/0/da"><img src="http://feedads.g.doubleclick.net/~a/Kr4BDKxSBu7dwvWTzTDQtkLjI8I/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/Kr4BDKxSBu7dwvWTzTDQtkLjI8I/1/da"><img src="http://feedads.g.doubleclick.net/~a/Kr4BDKxSBu7dwvWTzTDQtkLjI8I/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/codecook?a=6688EMZQXVI:WnqniUC47-g:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/codecook?i=6688EMZQXVI:WnqniUC47-g:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=6688EMZQXVI:WnqniUC47-g:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/codecook?i=6688EMZQXVI:WnqniUC47-g:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=6688EMZQXVI:WnqniUC47-g:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/codecook?i=6688EMZQXVI:WnqniUC47-g:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=6688EMZQXVI:WnqniUC47-g:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/codecook?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=6688EMZQXVI:WnqniUC47-g:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/codecook?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=6688EMZQXVI:WnqniUC47-g:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/codecook?i=6688EMZQXVI:WnqniUC47-g:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=6688EMZQXVI:WnqniUC47-g:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/codecook?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/codecook/~4/6688EMZQXVI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.thekuroko.com/http-dynamic-streaming-presentation-summary/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.thekuroko.com/http-dynamic-streaming-presentation-summary/</feedburner:origLink></item>
		<item>
		<title>HTTP Dynamic Streaming: Simple HDS Playback</title>
		<link>http://feedproxy.google.com/~r/codecook/~3/VdWcD7y5KZI/</link>
		<comments>http://www.thekuroko.com/http-dynamic-streaming-simple-hds-playback/#comments</comments>
		<pubDate>Mon, 27 Jun 2011 21:03:43 +0000</pubDate>
		<dc:creator>John Crosby</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Streaming Media]]></category>
		<category><![CDATA[flash media playback]]></category>
		<category><![CDATA[hds]]></category>
		<category><![CDATA[http dynamic streaming]]></category>
		<category><![CDATA[osmf]]></category>
		<category><![CDATA[playback]]></category>
		<category><![CDATA[video playback]]></category>
		<category><![CDATA[video player]]></category>

		<guid isPermaLink="false">http://www.thekuroko.com/?p=833</guid>
		<description><![CDATA[In my last few posts i&#8217;ve covered: What is HDS? &#8211; Describing what HTTP Dynamic Streaming is and where it is useful Getting Started with HDS &#8211; The pieces and parts that you need to be familiar with to start using HDS video content Now let&#8217;s get to the fun part. Let&#8217;s play back our [...]]]></description>
			<content:encoded><![CDATA[<p>In my last few posts i&#8217;ve covered:</p>
<ul>
<li><a href="http://www.thekuroko.com/2011/06/articles/what-is-http-dynamic-streaming/">What is HDS?</a> &#8211; Describing what HTTP Dynamic Streaming is and where it is useful</li>
<li><a href="http://www.thekuroko.com/2011/06/articles/http-dynamic-streaming-getting-started/">Getting Started with HDS</a> &#8211; The pieces and parts that you need to be familiar with to start using HDS video content</li>
</ul>
<p>Now let&#8217;s get to the fun part. Let&#8217;s play back our HTTP Dynamic Streaming videos. First we&#8217;ll use the Flash Media Playback to play our HDS content, then we&#8217;ll build a simple OSMF player that plays back the same HDS content. Both of the examples that I&#8217;ll walk though use the Open Source Media Framework. OSMF provides the code necessary for the heavy lifting parts of HDS playback. This includes:</p>
<ul>
<li>Loading the F4M file</li>
<li>Determining if miulti-bitrate (MBR) is available</li>
<li>Determining the best MBR content for playback</li>
<li>Extracting and inspecting the bootstrap data contained in the F4M file</li>
<li>Using the bootstrap data to determine what segment and fragment to call based on the current time of the video playback</li>
<li>Assembling the video data for playback as the fragments are loaded</li>
<li>Playing back the video stream</li>
</ul>
<p>There are a couple of things that we&#8217;ll need to make sure we have in place to get the players working:</p>
<ol>
<li>Hopefully you have some HDS video files to play with. If you don&#8217;t, you can download some that I&#8217;ve packaged here:<br />
<table style="border: 1px solid #CCC;" cellpadding="3" width="100%">
  <tr>
    <td width="35">
      <img src="http://www.thekuroko.com/wp-content/plugins/downloads-manager/img/icons/video.png" alt="http://www.thekuroko.com/wp-content/plugins/downloads-manager/img/icons/video.png">
    </td>
    <td>
      <b>download:</b> <a href="http://www.thekuroko.com/?file_id=13">HTTP Dynamic Streaming Sample Files</a> <small>()</small><br />
      <b>added:</b> 27/06/2011 <br />
      <b>clicks:</b> 448 <br />
      <b>description:</b> A sample video packaged for HTTP Dynamic Streaming <br />
    </td>
  </tr>
</table></li>
<li>If you haven&#8217;t already, <a title="Install and onfigure the HTTP Origin Module" href="http://help.adobe.com/en_US/HTTPStreaming/1.0/Using/WS7b362c044b7dd076-735e76121260080a90e-7ffc.html" target="_blank">install and configure</a> the HTTP Origin module on your Apache 2.2 web server, or install the Flash Media Server  and its pre-configured webserver.</li>
</ol>
<h2>Deploying the video content</h2>
<p>Depending on how you&#8217;ve configured the HTTP Origin Module, the directory you will need to deploy your files to will differ from mine, so we&#8217;ll use &#8216;<em>{HTTP_STREAMING_DIR}</em>&#8216; to represent the path to the directory configured to deliver HDS content using the HTTP Origin Module. On my windows server my path is:<br />
C:\Program Files\Adoeb\FMS\wwwroot\vod</p>
<p>Here are the 2 simple steps to deploying your files:</p>
<ol>
<li>Upload: Copy your packaged HDS files to the <em>{HTTP_STREAMING_DIR}</em></li>
<li>Verify: Check to make sure that the files are accessible by requesting the F4M file in a browser</li>
</ol>
<p>* Note: you&#8217;ll also need to have a crossdomain.xml file if you are loading across domains. You can put this in the <em>{HTTP_STREAMING_DIR} as well.<br />
</em></p>
<h2>Playing the content back using Strobe Media Playback</h2>
<p>Now that we have our content online, we can see if we can load it. I use the Flash Media Playback to test this. Flash Media Playback is a hosted OSMF player built by Adobe. If you want something that you host, check out the Strobe Media Player &#8211; another OSMF player provided by Adobe that you can download and deploy to your own server.</p>
<p>To use the the Flash Media Playback go to <a href="http://www.osmf.org/configurator/fmp">http://www.osmf.org/configurator/fmp/</a></p>
<p>You should see a page that looks similar to the following:<br />
<img title="flash-media-playback.PNG" src="http://www.thekuroko.com/wp-content/uploads/2011/06/flash-media-playback.png" border="0" alt="Flash Media Playback" width="600" height="458" /></p>
<p>We&#8217;ll need to update a couple of things to get our HDS content playing:</p>
<ol>
<li>Change the video source URL to point to the F4M file that you deployed your Apache server. Mine is &#8216;http://office.realeyes.com:8134/vod/hds-sample/sample.f4m&#8217;</li>
<li>Change the selected value for &#8216;<label><acronym title="HTTP Streaming and Flash Access 2.0 require Flash Player 10.1">Are you using HTTP Streaming or Flash Access 2.0?&#8217; to &#8216;Yes&#8217;</acronym></label></li>
<li><label><acronym title="HTTP Streaming and Flash Access 2.0 require Flash Player 10.1">You can remove the &#8216;Poster frame image&#8217; and set your content to autoplay, but this is not required. </acronym></label></li>
</ol>
<p>The settings should resemble the following:<br />
<img title="hds-stream-settings.PNG" src="http://www.thekuroko.com/wp-content/uploads/2011/06/hds-stream-settings.png" border="0" alt="HDS Flash Media Playback Settings" width="404" height="274" /></p>
<p>Click the preview button and the video should begin playing. I&#8217;ve embedded the Flash Media Playback here with the above settings (except autoplay is false):</p>
<p><object width="500" height="350"><param name="movie" value="http://fpdownload.adobe.com/strobe/FlashMediaPlayback_101.swf" /><param name="flashvars" value="src=http%3A%2F%2Foffice.realeyes.com%3A8134%2Fvod%2Fhds-sample%2Fsample.f4m&amp;autoPlay=false" /><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><embed type="application/x-shockwave-flash" width="500" height="350" src="http://fpdownload.adobe.com/strobe/FlashMediaPlayback_101.swf" flashvars="src=http%3A%2F%2Foffice.realeyes.com%3A8134%2Fvod%2Fhds-sample%2Fsample.f4m&amp;autoPlay=false" allowfullscreen="true" allowscriptaccess="always"></embed></object></p>
<p>Now that we know the our HDS content is working correctly, let&#8217;s build a simple OSMF player that plays back the same content.</p>
<ol>
<li>Create a new ActionScript 3 project in Flash Builder and name it &#8216;SimplePlayer&#8217;.</li>
<li>In the constructor of the class that is created for you &#8216;SimplePlayer.as&#8217; create a local variable named mediaFactory and typed as a MediaFactory. Set mediaFactory equal to a new DefaultMediaFactory()
<pre class="brush: as3; title: ; notranslate">var mediaFactory:MediaFactory = new DefaultMediaFactory();</pre>
</li>
<li>Create a local URLResource variable named resource and set it equal to a new URLResource(). Pass the URLResource constructor the URL to your F4M file. Mine is &#8216;http://office.realeyes.com:8134/vod/hds-sample/sample.f4m&#8217;
<pre class="brush: as3; title: ; notranslate">var resource:URLResource = new URLResource( &quot;http://office.realeyes.com:8134/vod/hds-sample/sample.f4m&quot; );</pre>
</li>
<li>Create an MediaElement local variable named element and set it equal to the result of calling the createMediaElement() method on the mediaFactory object. Make sure to pass &#8216;resoure&#8217; as the only argument to the createMediaElement() method.
<pre class="brush: as3; title: ; notranslate">var element:MediaElement = mediaFactory.createMediaElement( resource );</pre>
</li>
<li>Create a MediaPlayer local variable named mediaPlayer and set it equal to a new MediaPlayer, passing the constructor the element variable as the only argument.
<pre class="brush: as3; title: ; notranslate">var mediaPlayer:MediaPlayer = new MediaPlayer( element );</pre>
</li>
<li>Create a local variable named mediaContainer typed as a MediaContainer. Set it equal to a new MediaContainer.
<pre class="brush: as3; title: ; notranslate">var mediaContainer:MediaContainer = new MediaContainer();</pre>
</li>
<li>Call the addMediaElement() method on the mediaContainer object, passing the element object in as the only argument.
<pre class="brush: as3; title: ; notranslate">mediaContainer.addMediaElement( element );</pre>
</li>
<li>Add the mediaContainer to the display list by calling the addChild() method making sure to pass in the mediaContainer object as the only argument.
<pre class="brush: as3; title: ; notranslate">addChild( mediaContainer );</pre>
</li>
<li>The completed class should resemble the following:
<pre class="brush: as3; title: ; notranslate">package
{
  import flash.display.Sprite;import org.osmf.containers.MediaContainer;
  import org.osmf.elements.VideoElement;
  import org.osmf.media.DefaultMediaFactory;
  import org.osmf.media.MediaElement;
  import org.osmf.media.MediaFactory;
  import org.osmf.media.MediaPlayer;
  import org.osmf.media.URLResource;
  import org.osmf.utils.URL;

  public class SimplePlayer extends Sprite
  {
    public function SimplePlayer()
    {
      var mediaFactory:MediaFactory = new DefaultMediaFactory();

      var resource:URLResource = new URLResource( &quot;http://office.realeyes.com:8134/vod/hds-sample/sample.f4m&quot; );

      var element:MediaElement = mediaFactory.createMediaElement( resource );

      var mediaPlayer:MediaPlayer = new MediaPlayer( element );

      var mediaContainer:MediaContainer = new MediaContainer();

      mediaContainer.addMediaElement( element );
      addChild( mediaContainer );
    }
  }
}</pre>
</li>
</ol>
<p>When you run this the video should play. There aren&#8217;t any controls, but the important thing to note here is that there wasn&#8217;t anything special we needed to do to playback our HDS content. We relied on OSMF&#8217;s DefaultMediaFactory to determine the type of media and play it back. You can download the project source here: <table style="border: 1px solid #CCC;" cellpadding="3" width="100%">
  <tr>
    <td width="35">
      <img src="http://www.thekuroko.com/wp-content/plugins/downloads-manager/img/icons/winzip.gif" alt="http://www.thekuroko.com/wp-content/plugins/downloads-manager/img/icons/winzip.gif">
    </td>
    <td>
      <b>download:</b> <a href="http://www.thekuroko.com/?file_id=12">SimplePlayer.zip</a> <small>(19.14KB)</small><br />
      <b>added:</b> 27/06/2011 <br />
      <b>clicks:</b> 365 <br />
      <b>description:</b> Flash Builder 4.5 project archive of simple OSMF player. <br />
    </td>
  </tr>
</table></p>

<p><a href="http://feedads.g.doubleclick.net/~a/uo5XhOQ5-u5arAUNjwngUdU17D8/0/da"><img src="http://feedads.g.doubleclick.net/~a/uo5XhOQ5-u5arAUNjwngUdU17D8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/uo5XhOQ5-u5arAUNjwngUdU17D8/1/da"><img src="http://feedads.g.doubleclick.net/~a/uo5XhOQ5-u5arAUNjwngUdU17D8/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/codecook?a=VdWcD7y5KZI:QxcH1R54iQE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/codecook?i=VdWcD7y5KZI:QxcH1R54iQE:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=VdWcD7y5KZI:QxcH1R54iQE:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/codecook?i=VdWcD7y5KZI:QxcH1R54iQE:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=VdWcD7y5KZI:QxcH1R54iQE:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/codecook?i=VdWcD7y5KZI:QxcH1R54iQE:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=VdWcD7y5KZI:QxcH1R54iQE:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/codecook?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=VdWcD7y5KZI:QxcH1R54iQE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/codecook?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=VdWcD7y5KZI:QxcH1R54iQE:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/codecook?i=VdWcD7y5KZI:QxcH1R54iQE:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=VdWcD7y5KZI:QxcH1R54iQE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/codecook?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/codecook/~4/VdWcD7y5KZI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.thekuroko.com/http-dynamic-streaming-simple-hds-playback/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.thekuroko.com/http-dynamic-streaming-simple-hds-playback/</feedburner:origLink></item>
		<item>
		<title>Getting Started with HTTP Dynamic Streaming</title>
		<link>http://feedproxy.google.com/~r/codecook/~3/1xvOcA5P2JY/</link>
		<comments>http://www.thekuroko.com/http-dynamic-streaming-getting-started/#comments</comments>
		<pubDate>Mon, 20 Jun 2011 19:30:39 +0000</pubDate>
		<dc:creator>John Crosby</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Streaming Media]]></category>
		<category><![CDATA[f4fextractor]]></category>
		<category><![CDATA[f4fpackager]]></category>
		<category><![CDATA[hds]]></category>
		<category><![CDATA[http dynamic streaming]]></category>
		<category><![CDATA[video streaming]]></category>

		<guid isPermaLink="false">http://www.thekuroko.com/?p=771</guid>
		<description><![CDATA[As described in the first post in this series: What is Dynamic Streaming?, HTTP Dynamic Streaming (HDS) allows for the delivery of streaming content over the HTTP protocol. Streaming video over HTTP requires some knowledge and preparation. The following is a rundown and description for each of the components involved with HTTP streaming. The files: The [...]]]></description>
			<content:encoded><![CDATA[<p>As described in the <a title="What is HTTP Dynamic Streaming?" href="http://www.thekuroko.com/2011/06/articles/what-is-http-dynamic-streaming/">first post in this series: What is Dynamic Streaming?</a>, HTTP Dynamic Streaming (HDS) allows for the delivery of streaming content over the HTTP protocol. Streaming video over HTTP requires some knowledge and preparation. The following is a rundown and description for each of the components involved with HTTP streaming.</p>
<h2>The files: The F4F and F4M file formats</h2>
<p>The F4F file format specification (<a title="F4M File Format Specification" href="http://www.adobe.com/devnet/f4v.html" target="_blank">http://www.adobe.com/devnet/f4v.html</a>) describes how to divide media content into segments and fragments. These segments and fragments are what make &#8216;streaming&#8217; content over HTTP possible. Basically, the file is broken up into multiple pieces and parts when it is prepared for for HTTP streaming.</p>
<div id="attachment_812" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.thekuroko.com/wp-content/uploads/2011/06/HDS_Seg-frag.png" rel="lightbox[771]"><img class="size-medium wp-image-812" title="HDS Segment and Fragments" src="http://www.thekuroko.com/wp-content/uploads/2011/06/HDS_Seg-frag-300x58.png" alt="A sample segment and its fragments" width="300" height="58" /></a><p class="wp-caption-text">A sample segment and its fragments</p></div>
<p>These way the segments and each segments fragments are created is based on multiple factors such as the length of the video content, the the number of keyframes and the length specified for each segment. The result of packaging your video content for HDS delivery is a set of files that look similar to the following for a simple, single bit-rate file:</p>
<div id="attachment_773" class="wp-caption alignnone" style="width: 115px"><a href="http://www.thekuroko.com/wp-content/uploads/2011/06/HttpStreaming-PackagedFile.png" rel="lightbox[771]"><img class="size-full wp-image-773  " title="HTTP Dynamic Streaming Packaged Files for a short video file" src="http://www.thekuroko.com/wp-content/uploads/2011/06/HttpStreaming-PackagedFile.png" alt="HTTP Dynamic Streaming Packaged Files for a short video file" width="105" height="56" /></a><p class="wp-caption-text">The set of files created by the f4fpackager for a short video clip.</p></div>
<p>From the image above:</p>
<ul>
<li><strong>sample.f4m</strong>: This is an XML file created by the f4fpackager that contains the information necessary for a client player to playback the video file. There will be only one of these for each source video file.</li>
<li><strong>sampleSeg1.f4f</strong>: This segment file contains the fragments that the client player will request for playback. There can be multiple of these files for each source video file.</li>
<li><strong>sampleSeg1.f4x</strong>: This is an index file that contains specific information about the fragments inside the segment files. There will be one of these types of files for each segment file. The HTTP Origin Module uses the data in this file to determine the fragment to send back to the client after a request.</li>
</ul>
<p>Each F4F file is a single segment and the segment can contain multiple fragments. So, if you inspect the HTTP requests as a media item is being played back you will see files being requested that map to a fragment within a segment. For example:</p>
<div id="attachment_778" class="wp-caption alignnone" style="width: 160px"><a href="http://www.thekuroko.com/wp-content/uploads/2011/06/hds-segment-fragment-reqeuests.png" rel="lightbox[771]"><img class="size-thumbnail wp-image-778" title="Segments and fragments being requested over HTTP" src="http://www.thekuroko.com/wp-content/uploads/2011/06/hds-segment-fragment-reqeuests-150x150.png" alt="Segments and fragments being requested over HTTP" width="150" height="150" /></a><p class="wp-caption-text">Segments and fragments being requested for HDS video</p></div>
<p>This request specifies to the HTTP Origin Module what segment&#8217;s fragment to pull out of the F4F file and deliver to the client for playback. These requests are based on where the time code of where the media item is during playback. So if you scrub to later in the video, the Requests might look something like the following:</p>
<div id="attachment_781" class="wp-caption alignnone" style="width: 160px"><a href="http://www.thekuroko.com/wp-content/uploads/2011/06/hds-segment-fragment-scrubbing.png" rel="lightbox[771]"><img class="size-thumbnail wp-image-781" title="Scrubbing HTTP Dynamic Streaming Video Content" src="http://www.thekuroko.com/wp-content/uploads/2011/06/hds-segment-fragment-scrubbing-150x150.png" alt="Scrubbing HTTP Dynamic Streaming Video Content" width="150" height="150" /></a><p class="wp-caption-text">Segments and fragment requests while scrubbing HDS video content</p></div>
<p>This allows the client to request any piece of the video content and start playing back almost immediately. You can control how the files are segmented and fragmented when preparing content with the f4fpackager. The basic concept is to balance the size of the fragment being delivered and the number of HTTP requests that a client needs to make for playback. Please note, the fragments may not be sequential, so you cannot rely on this when requesting content. The the fragments are based on the settings passed into the packager and can skip fragment numbers. So , you can expect to see fragment sequences like the following (no scrubbing involved):</p>
<ol>
<li>sampleSeg1-Frag1</li>
<li>sampleSeg1-Frag2</li>
<li>sampleSeg1-Frag<strong>3</strong></li>
<li>sampleSeg1-Frag<strong>5</strong></li>
<li>sampleSeg1-Frag6</li>
</ol>
<p>This doesn&#8217;t mean that the file is incomplete, it is just how the fragments were created by the packager.</p>
<h2>The Details</h2>
<h3>The F4M FIle Format</h3>
<p>The F4M or Flash Media Manifest file format contains the information about the package of files created when video content is packaged for HDS. The information included in the manifest file can include some or all of the following:</p>
<ul>
<li>Media location</li>
<li>Media type</li>
<li>Media bootstrap</li>
<li>Multi-bitrate (MBR) availability</li>
<li>Codecs</li>
<li>Resolutions</li>
<li>Digital Rights Management (DRM) authentication</li>
<li>DVR information</li>
<li>moov atom, metadata block and XMP metadata block</li>
</ul>
<p>When playing back HDS video content, the F4M file is expected to be loaded as the &#8216;media file&#8217;. The client is responsible for inspecting the data included in the F4M file to authenticate (if DRM authentication is required), determine if MBR content is available and select the best MBR version of the content and then request the media from the server.</p>
<p>Sample of a simple F4M file with a single media item:</p>
<p><!--?xml version="1.0" encoding="utf-8"?--><br />
Installing and configuring the Apache HTTP Origin Module: http://help.adobe.com/en_US/HTTPStreaming/1.0/Using/WS7b362c044b7dd076-735e76121260080a90e-8000.html</pre>

<p><a href="http://feedads.g.doubleclick.net/~a/XfhWZOgCOoeo6yv3QQr-LS_gIFs/0/da"><img src="http://feedads.g.doubleclick.net/~a/XfhWZOgCOoeo6yv3QQr-LS_gIFs/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/XfhWZOgCOoeo6yv3QQr-LS_gIFs/1/da"><img src="http://feedads.g.doubleclick.net/~a/XfhWZOgCOoeo6yv3QQr-LS_gIFs/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/codecook?a=1xvOcA5P2JY:SmVE8to2wuI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/codecook?i=1xvOcA5P2JY:SmVE8to2wuI:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=1xvOcA5P2JY:SmVE8to2wuI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/codecook?i=1xvOcA5P2JY:SmVE8to2wuI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=1xvOcA5P2JY:SmVE8to2wuI:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/codecook?i=1xvOcA5P2JY:SmVE8to2wuI:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=1xvOcA5P2JY:SmVE8to2wuI:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/codecook?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=1xvOcA5P2JY:SmVE8to2wuI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/codecook?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=1xvOcA5P2JY:SmVE8to2wuI:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/codecook?i=1xvOcA5P2JY:SmVE8to2wuI:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=1xvOcA5P2JY:SmVE8to2wuI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/codecook?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/codecook/~4/1xvOcA5P2JY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.thekuroko.com/http-dynamic-streaming-getting-started/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		<feedburner:origLink>http://www.thekuroko.com/http-dynamic-streaming-getting-started/</feedburner:origLink></item>
		<item>
		<title>What is HTTP Dynamic Streaming?</title>
		<link>http://feedproxy.google.com/~r/codecook/~3/EKVsYLiFiBE/</link>
		<comments>http://www.thekuroko.com/what-is-http-dynamic-streaming/#comments</comments>
		<pubDate>Fri, 03 Jun 2011 15:10:26 +0000</pubDate>
		<dc:creator>John Crosby</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Streaming Media]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[content]]></category>
		<category><![CDATA[dynamic]]></category>
		<category><![CDATA[flash media server]]></category>
		<category><![CDATA[hds]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[module]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[streaming]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.thekuroko.com/?p=733</guid>
		<description><![CDATA[Until now video content delivery over HTTP has been delivered in a progressive manner, meaning to view part of or seek to a specific location in the video you have to wait for that part to download. RTMP allows for the ability to seek to any point in the video content via streaming, but requires [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.thekuroko.com/wp-content/uploads/2011/06/HTTPStreaming.jpg" rel="lightbox[733]"><img class="alignleft size-thumbnail wp-image-739" title="HTTP Dynamic Streaming Flow" src="http://www.thekuroko.com/wp-content/uploads/2011/06/HTTPStreaming-150x150.jpg" alt="HTTP Dynamic Streaming Flow" width="150" height="150" /></a>Until now video content delivery over HTTP has been delivered in a progressive manner, meaning to view part of or seek to a specific location in the video you have to wait for that part to download. RTMP allows for the ability to seek to any point in the video content via streaming, but requires a server technology such as the Flash Media Server to do this. HTTP Dynamic Streaming or HDS combines HTTP (progressive download) and RTMP (streaming download) allow for the ability to deliver video content in a steaming manner over HTTP. This means:</p>
<ul>
<li>A streaming server technology is not required</li>
<li>Clients can access and begin playing content ‘instantly’</li>
<li>Clients can seek to points in the video content that have not yet downloaded.</li>
</ul>
<p>&#8230;and all the above over the HTTP protocol.</p>
<p>There are a of couple things that you’ll need to consider when getting started with HTTP Dynamic Streaming.</p>
<p>First, a media server to stream the content is not required, but the Apache Web server with the HTTP Origin Module installed is. The HTTP Origin Module is a free to use Apache module provided by Adobe, and comes pre-installed and configured with the Flash Media Server when you install the bundled web server. We’ll cover the installation, set up and data flow for the HTTP Origin Module in a subsequent post.</p>
<p>Second, the video content will need to be &#8216;prepared&#8217; for HTTP Dynamic Streaming before being deployed to your server. This means the workflow for content creation will need to be adjusted to accommodate the packaging of your video content into the F4F file format. There is a tool, the f4fpackager, that Adobe has created to do this for you and we will discuss the details of this tools and how you can use it later as well.</p>
<blockquote><p><a href="http://www.thekuroko.com/wp-content/uploads/2011/01/adobe-screenshot-I.png" rel="lightbox[733]"><img class="alignright size-thumbnail wp-image-619" title="F4Fragment Extractor" src="http://www.thekuroko.com/wp-content/uploads/2011/01/adobe-screenshot-I-150x150.png" alt="F4Fragment Extractor" width="150" height="150" /></a>At Realeyes, we&#8217;ve done some some work with AIR and the F4F file format spec to create the <a title="F4Fragment Extractor" href="http://www.thekuroko.com/downloads/f4fragment-extractor/">The F4Fragment Extractor</a>.  The F4FragmentExtractor is a utility for extracting the F4V fragments from the F4F files created by <a title="Adobe's File Packager" href="http://www.adobe.com/products/httpdynamicstreaming/" target="_blank">Adobe&#8217;s file packager for HTTP streaming</a>. This means that you can deploy the fragments produced by this tool  to any Web server or cloud services like Amazon S3 and reap the benefits of HDS even without the HTTP Origin Module.</p></blockquote>
<p>In the next few articles, we’ll look at:</p>
<ul>
<li>Getting Started with HDS</li>
<li>Use cases for HDS</li>
<li>Integrating HDS into your content creation workflow</li>
</ul>
<p>Between now and when I get to the next post let me know if you have any questions or would like to see something specific about HTTP Dynamic Streaming in the comments.</p>
<div class="SPOSTARBUST-Related-Posts"><H3>Related Posts</H3><ul class="entry-meta"><li class="SPOSTARBUST-Related-Post"><a title="Flex 2 BETA 3 Released" href="http://www.thekuroko.com/flex-2-beta-3-released/" rel="bookmark">Flex 2 BETA 3 Released</a></li>
<li class="SPOSTARBUST-Related-Post"><a title="Adobe&#8217;s New Article Series: RIA Development" href="http://www.thekuroko.com/14/" rel="bookmark">Adobe&#8217;s New Article Series: RIA Development</a></li>
<li class="SPOSTARBUST-Related-Post"><a title="ActionScript 3 Specs Posted" href="http://www.thekuroko.com/actionscript-3-specs-posted/" rel="bookmark">ActionScript 3 Specs Posted</a></li>
</ul></div>
<p><a href="http://feedads.g.doubleclick.net/~a/iEhkRTek6GIUITZToT-Gpvp_BDo/0/da"><img src="http://feedads.g.doubleclick.net/~a/iEhkRTek6GIUITZToT-Gpvp_BDo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/iEhkRTek6GIUITZToT-Gpvp_BDo/1/da"><img src="http://feedads.g.doubleclick.net/~a/iEhkRTek6GIUITZToT-Gpvp_BDo/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/codecook?a=EKVsYLiFiBE:OnqptFXpheg:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/codecook?i=EKVsYLiFiBE:OnqptFXpheg:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=EKVsYLiFiBE:OnqptFXpheg:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/codecook?i=EKVsYLiFiBE:OnqptFXpheg:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=EKVsYLiFiBE:OnqptFXpheg:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/codecook?i=EKVsYLiFiBE:OnqptFXpheg:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=EKVsYLiFiBE:OnqptFXpheg:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/codecook?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=EKVsYLiFiBE:OnqptFXpheg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/codecook?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=EKVsYLiFiBE:OnqptFXpheg:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/codecook?i=EKVsYLiFiBE:OnqptFXpheg:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=EKVsYLiFiBE:OnqptFXpheg:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/codecook?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/codecook/~4/EKVsYLiFiBE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.thekuroko.com/what-is-http-dynamic-streaming/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://www.thekuroko.com/what-is-http-dynamic-streaming/</feedburner:origLink></item>
		<item>
		<title>The Cooking Channel’s Eat Street in our Parking Lot</title>
		<link>http://feedproxy.google.com/~r/codecook/~3/41nCnsXCvgY/</link>
		<comments>http://www.thekuroko.com/inventing-room-tv-filming/#comments</comments>
		<pubDate>Mon, 30 May 2011 17:27:14 +0000</pubDate>
		<dc:creator>John Crosby</dc:creator>
				<category><![CDATA[Food & Drink]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://www.thekuroko.com/?p=717</guid>
		<description><![CDATA[A long time friend of mine, Ian Kleinman is going to be featured on the Cooking Channel&#8217;s Eat Street TV show.  If you want some awesomely-crazy-wacked-out snacks, to show your support for Ian, or just want to get on TV, come hang with the Inventing Room and the Realeyes crew. Here the menu that Ian [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.thekuroko.com/wp-content/uploads/2011/05/ian-liq-nitro-cropped.png" rel="lightbox[717]"><img class="alignright size-full wp-image-720" title="Ian Kleinman" src="http://www.thekuroko.com/wp-content/uploads/2011/05/ian-liq-nitro-cropped.png" alt="Ian Kleinman of the Inventing Room" width="295" height="480" /></a>A long time friend of mine, <a title="Ian Kleinman - The Inventing Room" href="http://www.inventing-room.com" target="_blank">Ian Kleinman</a> is going to be featured on the <a title="Eat Street on the Cooking Channel" href="http://www.cookingchanneltv.com/eat-street/index.html" target="_blank">Cooking Channel&#8217;s Eat Street TV show</a>.  If you want some awesomely-crazy-wacked-out snacks, to show your support for Ian, or just want to get on TV, come hang with the Inventing Room and the Realeyes crew. Here the menu that Ian has creaeted for the cart tomorrow:</p>
<ul>
<li>Apple pie “Koolaid”</li>
<li>Hot fudge ice cream, espresso fudge cookie</li>
<li>Homemade whipped marshmallow</li>
<li>Strawberry yuzu sorbet with frozen olive oil</li>
<li>Popcorn space foam</li>
<li>Miracle fruit tasting</li>
<li>Creme brulee with banana foster</li>
<li>Coconut ice cream with brown sugar</li>
<li>Braised pineapple and raspberry bubbles</li>
</ul>
<p>Ian &amp; The Eat Street crew will be in the parking lot (behind our offices at <a title="Google Maps - Realeyes Media" href="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=940+Logan+Street,+Denver,+CO+80203&amp;aq=t&amp;sll=37.0625,-95.677068&amp;sspn=48.77566,86.660156&amp;ie=UTF8&amp;hq=&amp;hnear=940+Logan+St,+Denver,+Colorado+80203&amp;ll=39.730475,-104.97812&amp;spn=0.012971,0.028903&amp;t=h&amp;z=16">940 Logan</a>) filming Ian and his inventive cart Tuesday March 31st from 8:30 am until 3:30 pm.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/9r2lWjhQJIeffaEe1kKmV08EdJE/0/da"><img src="http://feedads.g.doubleclick.net/~a/9r2lWjhQJIeffaEe1kKmV08EdJE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/9r2lWjhQJIeffaEe1kKmV08EdJE/1/da"><img src="http://feedads.g.doubleclick.net/~a/9r2lWjhQJIeffaEe1kKmV08EdJE/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/codecook?a=41nCnsXCvgY:ANpMaaqTyno:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/codecook?i=41nCnsXCvgY:ANpMaaqTyno:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=41nCnsXCvgY:ANpMaaqTyno:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/codecook?i=41nCnsXCvgY:ANpMaaqTyno:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=41nCnsXCvgY:ANpMaaqTyno:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/codecook?i=41nCnsXCvgY:ANpMaaqTyno:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=41nCnsXCvgY:ANpMaaqTyno:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/codecook?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=41nCnsXCvgY:ANpMaaqTyno:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/codecook?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=41nCnsXCvgY:ANpMaaqTyno:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/codecook?i=41nCnsXCvgY:ANpMaaqTyno:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=41nCnsXCvgY:ANpMaaqTyno:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/codecook?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/codecook/~4/41nCnsXCvgY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.thekuroko.com/inventing-room-tv-filming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.thekuroko.com/inventing-room-tv-filming/</feedburner:origLink></item>
		<item>
		<title>Mobile Flex: View Data</title>
		<link>http://feedproxy.google.com/~r/codecook/~3/AfSfLJSoXDU/</link>
		<comments>http://www.thekuroko.com/viewnavigator-data/#comments</comments>
		<pubDate>Mon, 16 May 2011 16:06:35 +0000</pubDate>
		<dc:creator>John Crosby</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[viewnavigator]]></category>

		<guid isPermaLink="false">http://www.thekuroko.com/?p=676</guid>
		<description><![CDATA[From the previous post you should know how to navigate from 1 view to the next using the ViewNavigator. &#160;Now, you want some data in that view right? No problem, this is where the View object&#8217;s &#8216;data&#8216; property comes into play. Setting the data property is accomplished by passing the data object, in addition to [...]]]></description>
			<content:encoded><![CDATA[<p>From the <a title="Mobile Flex: The ViewNavigator" href="http://www.thekuroko.com/2011/03/articles/code/mobile-flex-vi…vigator-basics/">previous post</a> you should know how to navigate from 1 view to the next using the ViewNavigator. &nbsp;Now, you want some data in that view right? No problem, this is where the View object&#8217;s &#8216;<strong>data</strong>&#8216; property comes into play. Setting the data property is accomplished by passing the data object, in addition to the View&#8217;s class name, into the pushView() method on the navigator object.</p>
<p>Example:</p>
<pre class="brush: as3; title: ; notranslate">navigator.pushView(MyNewView, dataObject);</pre>
<p>This&nbsp;effectively&nbsp;calls the setting for the data property of the new View (MyNewView) object that is created.</p>
<h2>Managing View Data</h2>
<p>You could work with the data property on the View object directly. For instance, if the data object passed into the View via the pushView() method was a simple user object that contained a name property, you could bind the name property to a label control.</p>
<p>Example:</p>
<pre class="brush: xml; title: ; notranslate">&lt;s:Label id=&quot;name_lbl&quot; text=&quot;{data.name}&quot; /&gt;</pre>
<h3>Overriding the Data Property Setter</h3>
<p>Usually though, you&#8217;d want to override the setter for the data property. Then you can type your object and work with it in a better manner.</p>
<p>Example:</p>
<pre class="brush: as3; title: ; notranslate">protected var user:User;
override public function set data(value:Object):void
{
 super.data = value;
 user = value as User;
}</pre>
<p><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; font-size: 12px; line-height: 18px; white-space: pre;"> </span></p>
<pre class="brush: xml; title: ; notranslate">&lt;s:Label text=&quot;{user.name}&quot; /&gt;</pre>
<p>So now we&#8217;ve got the data in the view. The next step is to manage the state of each view. With mobile apps you can&#8217;t count on the view staying around, so we&#8217;ll need to keep a tight control on the state of each view. That way we can bring the user right back where they expect to be when they come back to the app after a call for example. In the next post we&#8217;ll look into how to do this. Stay tuned.</p>
<p>This article has also been posted on <a href="http://www.realeyes.com/blog/2011/05/16/mobile-flex-view-data/">the Realeyes website</a>.</p>
<div class="SPOSTARBUST-Related-Posts"><H3>Related Posts</H3><ul class="entry-meta"><li class="SPOSTARBUST-Related-Post"><a title="Cairngorm 2.2 &#8211; Dot Release" href="http://www.thekuroko.com/cairngorm-22-dot-release/" rel="bookmark">Cairngorm 2.2 &#8211; Dot Release</a></li>
<li class="SPOSTARBUST-Related-Post"><a title="Dispatching a custom event" href="http://www.thekuroko.com/dispatching-a-custom-event/" rel="bookmark">Dispatching a custom event</a></li>
<li class="SPOSTARBUST-Related-Post"><a title="Cursor postion in a flex TextArea control using the TextLineMetrics class" href="http://www.thekuroko.com/cursor-postion-in-a-flex-textarea-control-using-the-textlinemetrics-class/" rel="bookmark">Cursor postion in a flex TextArea control using the TextLineMetrics class</a></li>
<li class="SPOSTARBUST-Related-Post"><a title="Flex: Simple Predictive Text Example" href="http://www.thekuroko.com/flex-simple-predictive-text-example/" rel="bookmark">Flex: Simple Predictive Text Example</a></li>
<li class="SPOSTARBUST-Related-Post"><a title="Flex Module for IIS and Apache Released" href="http://www.thekuroko.com/flex-module-for-iis-and-apache-released/" rel="bookmark">Flex Module for IIS and Apache Released</a></li>
</ul></div>
<p><a href="http://feedads.g.doubleclick.net/~a/C_Gdbb_5oIlcNKLsFIhXefKbu1Y/0/da"><img src="http://feedads.g.doubleclick.net/~a/C_Gdbb_5oIlcNKLsFIhXefKbu1Y/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/C_Gdbb_5oIlcNKLsFIhXefKbu1Y/1/da"><img src="http://feedads.g.doubleclick.net/~a/C_Gdbb_5oIlcNKLsFIhXefKbu1Y/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/codecook?a=AfSfLJSoXDU:UeNtME3T-0c:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/codecook?i=AfSfLJSoXDU:UeNtME3T-0c:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=AfSfLJSoXDU:UeNtME3T-0c:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/codecook?i=AfSfLJSoXDU:UeNtME3T-0c:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=AfSfLJSoXDU:UeNtME3T-0c:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/codecook?i=AfSfLJSoXDU:UeNtME3T-0c:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=AfSfLJSoXDU:UeNtME3T-0c:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/codecook?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=AfSfLJSoXDU:UeNtME3T-0c:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/codecook?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=AfSfLJSoXDU:UeNtME3T-0c:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/codecook?i=AfSfLJSoXDU:UeNtME3T-0c:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=AfSfLJSoXDU:UeNtME3T-0c:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/codecook?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/codecook/~4/AfSfLJSoXDU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.thekuroko.com/viewnavigator-data/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.thekuroko.com/viewnavigator-data/</feedburner:origLink></item>
	</channel>
</rss>

