<?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>Tue, 17 Jan 2012 17:10:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</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>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[<div name="googleone_share_1" style="position:relative;z-index:5;clear:right; float: right; margin-left: 10px; margin-top:0px;"><g:plusone size="tall" count="1" href="http://www.thekuroko.com/aptana-sdocml-code-hinting-support/"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.thekuroko.com%2Faptana-sdocml-code-hinting-support%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.thekuroko.com%2Faptana-sdocml-code-hinting-support%2F&amp;source=jccrosby&amp;style=normal&amp;service=bit.ly&amp;service_api=R_d6f2d9392c50bec7021f2575ee91df86&amp;space=20&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<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><br />
<h3 class='related_post_title'>Related Posts:</h3>
<ul class='related_post'>
<li><a href='http://www.thekuroko.com/quick-fun-with-air-dailymugshotcom/' title='Quick fun with AIR &amp; Dailymugshot.com'>Quick fun with AIR &#038; Dailymugshot.com</a></li>
<li><a href='http://www.thekuroko.com/more-flexible-code-programming-to-an-interface/' title='More Flexible Code &#8211; Programming to an Interface'>More Flexible Code &#8211; Programming to an Interface</a></li>
<li><a href='http://www.thekuroko.com/flexlib-launched/' title='FlexLib Launched'>FlexLib Launched</a></li>
<li><a href='http://www.thekuroko.com/mobile-development-is-exploding/' title='Mobile Development is Exploding &#8211; Hello PlayBook!'>Mobile Development is Exploding &#8211; Hello PlayBook!</a></li>
<li><a href='http://www.thekuroko.com/adobe-camp-open-for-registration/' title='Adobe Camp: 1 Day, 3 Camps: 5280 Reasons to Use the Flash Platform'>Adobe Camp: 1 Day, 3 Camps: 5280 Reasons to Use the Flash Platform</a></li>
</ul>
<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><!-- Do not remove -->
<p><a href="http://feedads.g.doubleclick.net/~a/aLDVDPHHTkvQGWh7ZZC7hO8BDEw/0/da"><img src="http://feedads.g.doubleclick.net/~a/aLDVDPHHTkvQGWh7ZZC7hO8BDEw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/aLDVDPHHTkvQGWh7ZZC7hO8BDEw/1/da"><img src="http://feedads.g.doubleclick.net/~a/aLDVDPHHTkvQGWh7ZZC7hO8BDEw/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[<div name="googleone_share_1" style="position:relative;z-index:5;clear:right; float: right; margin-left: 10px; margin-top:0px;"><g:plusone size="tall" count="1" href="http://www.thekuroko.com/take-the-pia-out-of-load-testing-amf-services/"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.thekuroko.com%2Ftake-the-pia-out-of-load-testing-amf-services%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.thekuroko.com%2Ftake-the-pia-out-of-load-testing-amf-services%2F&amp;source=jccrosby&amp;style=normal&amp;service=bit.ly&amp;service_api=R_d6f2d9392c50bec7021f2575ee91df86&amp;space=20&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<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>
<h3 class='related_post_title'>Related Posts:</h3>
<ul class='related_post'>
<li><a href='http://www.thekuroko.com/adobe-camp-open-for-registration/' title='Adobe Camp: 1 Day, 3 Camps: 5280 Reasons to Use the Flash Platform'>Adobe Camp: 1 Day, 3 Camps: 5280 Reasons to Use the Flash Platform</a></li>
<li><a href='http://www.thekuroko.com/rmaug-mini-max-pixel-bender-presentation-files/' title='RMAUG Mini-Max Pixel Bender Presentation Files'>RMAUG Mini-Max Pixel Bender Presentation Files</a></li>
<li><a href='http://www.thekuroko.com/adobe-announces-the-open-screen-project/' title='Adobe Announces the Open Screen Project'>Adobe Announces the Open Screen Project</a></li>
<li><a href='http://www.thekuroko.com/my-new-certifications/' title='My New Certifications'>My New Certifications</a></li>
<li><a href='http://www.thekuroko.com/setting-up-cruisecontrol-continuous-integration-system/' title='Setting up Cruisecontrol &#8211; Continuous Integration System'>Setting up Cruisecontrol &#8211; Continuous Integration System</a></li>
</ul>
<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><!-- Do not remove -->
<p><a href="http://feedads.g.doubleclick.net/~a/TaebawLXB1-J5ZqhlJC-PQV4bdk/0/da"><img src="http://feedads.g.doubleclick.net/~a/TaebawLXB1-J5ZqhlJC-PQV4bdk/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/TaebawLXB1-J5ZqhlJC-PQV4bdk/1/da"><img src="http://feedads.g.doubleclick.net/~a/TaebawLXB1-J5ZqhlJC-PQV4bdk/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[<div name="googleone_share_1" style="position:relative;z-index:5;clear:right; float: right; margin-left: 10px; margin-top:0px;"><g:plusone size="tall" count="1" href="http://www.thekuroko.com/multi-screen-is-sexy-even-at-adobe-max/"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.thekuroko.com%2Fmulti-screen-is-sexy-even-at-adobe-max%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.thekuroko.com%2Fmulti-screen-is-sexy-even-at-adobe-max%2F&amp;source=jccrosby&amp;style=normal&amp;service=bit.ly&amp;service_api=R_d6f2d9392c50bec7021f2575ee91df86&amp;space=20&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<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.<br />
<h3 class='related_post_title'>Related Posts:</h3>
<ul class='related_post'>
<li><a href='http://www.thekuroko.com/http-dynamic-streaming-simple-hds-playback/' title='HTTP Dynamic Streaming: Simple HDS Playback'>HTTP Dynamic Streaming: Simple HDS Playback</a></li>
<li><a href='http://www.thekuroko.com/rmaug-mini-max-pixel-bender-presentation-files/' title='RMAUG Mini-Max Pixel Bender Presentation Files'>RMAUG Mini-Max Pixel Bender Presentation Files</a></li>
<li><a href='http://www.thekuroko.com/max-2007-presentation-resources-posted/' title='Max 2007 &#8211; Presentation Resources Posted'>Max 2007 &#8211; Presentation Resources Posted</a></li>
<li><a href='http://www.thekuroko.com/apollo-notes/' title='Apollo notes'>Apollo notes</a></li>
<li><a href='http://www.thekuroko.com/rmaug-resources/' title='RMAUG Resources'>RMAUG Resources</a></li>
</ul>
<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><!-- Do not remove -->
<p><a href="http://feedads.g.doubleclick.net/~a/Lf6aOpVmXJduJBJy5ooXoLtpBMc/0/da"><img src="http://feedads.g.doubleclick.net/~a/Lf6aOpVmXJduJBJy5ooXoLtpBMc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/Lf6aOpVmXJduJBJy5ooXoLtpBMc/1/da"><img src="http://feedads.g.doubleclick.net/~a/Lf6aOpVmXJduJBJy5ooXoLtpBMc/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[<div name="googleone_share_1" style="position:relative;z-index:5;clear:right; float: right; margin-left: 10px; margin-top:0px;"><g:plusone size="tall" count="1" href="http://www.thekuroko.com/update-f4fragment-extractor-app-adobe-marketplace-problems/"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.thekuroko.com%2Fupdate-f4fragment-extractor-app-adobe-marketplace-problems%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.thekuroko.com%2Fupdate-f4fragment-extractor-app-adobe-marketplace-problems%2F&amp;source=jccrosby&amp;style=normal&amp;service=bit.ly&amp;service_api=R_d6f2d9392c50bec7021f2575ee91df86&amp;space=20&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<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;<br />
<h3 class='related_post_title'>Related Posts:</h3>
<ul class='related_post'>
<li><a href='http://www.thekuroko.com/http-dynamic-streaming-live-events/' title='HTTP Dynamic Streaming &amp; Live Events'>HTTP Dynamic Streaming &#038; Live Events</a></li>
<li><a href='http://www.thekuroko.com/f4fragment-extractor-app-adobe-marketplace-problems/' title='F4Fragment Extractor App &amp; Adobe Marketplace Problems'>F4Fragment Extractor App &#038; Adobe Marketplace Problems</a></li>
<li><a href='http://www.thekuroko.com/http-dynamic-streaming-presentation-summary/' title='HTTP Dynamic Streaming Presentation Summary'>HTTP Dynamic Streaming Presentation Summary</a></li>
<li><a href='http://www.thekuroko.com/http-dynamic-streaming-simple-hds-playback/' title='HTTP Dynamic Streaming: Simple HDS Playback'>HTTP Dynamic Streaming: Simple HDS Playback</a></li>
<li><a href='http://www.thekuroko.com/http-dynamic-streaming-getting-started/' title='Getting Started with HTTP Dynamic Streaming'>Getting Started with HTTP Dynamic Streaming</a></li>
</ul>
<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><!-- Do not remove -->
<p><a href="http://feedads.g.doubleclick.net/~a/9Xxd5BmOdwlAmRMtK8-CvPpumEs/0/da"><img src="http://feedads.g.doubleclick.net/~a/9Xxd5BmOdwlAmRMtK8-CvPpumEs/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/9Xxd5BmOdwlAmRMtK8-CvPpumEs/1/da"><img src="http://feedads.g.doubleclick.net/~a/9Xxd5BmOdwlAmRMtK8-CvPpumEs/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 name="googleone_share_1" style="position:relative;z-index:5;clear:right; float: right; margin-left: 10px; margin-top:0px;"><g:plusone size="tall" count="1" href="http://www.thekuroko.com/http-dynamic-streaming-live-events/"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.thekuroko.com%2Fhttp-dynamic-streaming-live-events%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.thekuroko.com%2Fhttp-dynamic-streaming-live-events%2F&amp;source=jccrosby&amp;style=normal&amp;service=bit.ly&amp;service_api=R_d6f2d9392c50bec7021f2575ee91df86&amp;space=20&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<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>
<h3 class='related_post_title'>Related Posts:</h3>
<ul class='related_post'>
<li><a href='http://www.thekuroko.com/http-dynamic-streaming-getting-started/' title='Getting Started with HTTP Dynamic Streaming'>Getting Started with HTTP Dynamic Streaming</a></li>
<li><a href='http://www.thekuroko.com/update-f4fragment-extractor-app-adobe-marketplace-problems/' title='UPDATE: F4Fragment Extractor App &amp; Adobe Marketplace Problems'>UPDATE: F4Fragment Extractor App &#038; Adobe Marketplace Problems</a></li>
<li><a href='http://www.thekuroko.com/http-dynamic-streaming-presentation-summary/' title='HTTP Dynamic Streaming Presentation Summary'>HTTP Dynamic Streaming Presentation Summary</a></li>
<li><a href='http://www.thekuroko.com/http-dynamic-streaming-simple-hds-playback/' title='HTTP Dynamic Streaming: Simple HDS Playback'>HTTP Dynamic Streaming: Simple HDS Playback</a></li>
<li><a href='http://www.thekuroko.com/what-is-http-dynamic-streaming/' title='What is HTTP Dynamic Streaming?'>What is HTTP Dynamic Streaming?</a></li>
</ul>
<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><!-- Do not remove -->
<p><a href="http://feedads.g.doubleclick.net/~a/w7ZhKWsX-a50ni87sGMvXMMRCF8/0/da"><img src="http://feedads.g.doubleclick.net/~a/w7ZhKWsX-a50ni87sGMvXMMRCF8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/w7ZhKWsX-a50ni87sGMvXMMRCF8/1/da"><img src="http://feedads.g.doubleclick.net/~a/w7ZhKWsX-a50ni87sGMvXMMRCF8/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[<div name="googleone_share_1" style="position:relative;z-index:5;clear:right; float: right; margin-left: 10px; margin-top:0px;"><g:plusone size="tall" count="1" href="http://www.thekuroko.com/f4fragment-extractor-app-adobe-marketplace-problems/"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.thekuroko.com%2Ff4fragment-extractor-app-adobe-marketplace-problems%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.thekuroko.com%2Ff4fragment-extractor-app-adobe-marketplace-problems%2F&amp;source=jccrosby&amp;style=normal&amp;service=bit.ly&amp;service_api=R_d6f2d9392c50bec7021f2575ee91df86&amp;space=20&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<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.<br />
<h3 class='related_post_title'>Related Posts:</h3>
<ul class='related_post'>
<li><a href='http://www.thekuroko.com/update-f4fragment-extractor-app-adobe-marketplace-problems/' title='UPDATE: F4Fragment Extractor App &amp; Adobe Marketplace Problems'>UPDATE: F4Fragment Extractor App &#038; Adobe Marketplace Problems</a></li>
<li><a href='http://www.thekuroko.com/http-dynamic-streaming-simple-hds-playback/' title='HTTP Dynamic Streaming: Simple HDS Playback'>HTTP Dynamic Streaming: Simple HDS Playback</a></li>
<li><a href='http://www.thekuroko.com/adobe-mktplace-gtrack-plugin/' title='Adobe Marketplace and the GTrack OSMF Plugin'>Adobe Marketplace and the GTrack OSMF Plugin</a></li>
<li><a href='http://www.thekuroko.com/http-dynamic-streaming-live-events/' title='HTTP Dynamic Streaming &amp; Live Events'>HTTP Dynamic Streaming &#038; Live Events</a></li>
<li><a href='http://www.thekuroko.com/http-dynamic-streaming-presentation-summary/' title='HTTP Dynamic Streaming Presentation Summary'>HTTP Dynamic Streaming Presentation Summary</a></li>
</ul>
<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><!-- Do not remove -->
<p><a href="http://feedads.g.doubleclick.net/~a/gfqj4gb1PpO1D-P5v_a_pV_N1ZM/0/da"><img src="http://feedads.g.doubleclick.net/~a/gfqj4gb1PpO1D-P5v_a_pV_N1ZM/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/gfqj4gb1PpO1D-P5v_a_pV_N1ZM/1/da"><img src="http://feedads.g.doubleclick.net/~a/gfqj4gb1PpO1D-P5v_a_pV_N1ZM/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>0</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[<div name="googleone_share_1" style="position:relative;z-index:5;clear:right; float: right; margin-left: 10px; margin-top:0px;"><g:plusone size="tall" count="1" href="http://www.thekuroko.com/http-dynamic-streaming-presentation-summary/"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.thekuroko.com%2Fhttp-dynamic-streaming-presentation-summary%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.thekuroko.com%2Fhttp-dynamic-streaming-presentation-summary%2F&amp;source=jccrosby&amp;style=normal&amp;service=bit.ly&amp;service_api=R_d6f2d9392c50bec7021f2575ee91df86&amp;space=20&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<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.<br />
<h3 class='related_post_title'>Related Posts:</h3>
<ul class='related_post'>
<li><a href='http://www.thekuroko.com/update-f4fragment-extractor-app-adobe-marketplace-problems/' title='UPDATE: F4Fragment Extractor App &amp; Adobe Marketplace Problems'>UPDATE: F4Fragment Extractor App &#038; Adobe Marketplace Problems</a></li>
<li><a href='http://www.thekuroko.com/http-dynamic-streaming-live-events/' title='HTTP Dynamic Streaming &amp; Live Events'>HTTP Dynamic Streaming &#038; Live Events</a></li>
<li><a href='http://www.thekuroko.com/http-dynamic-streaming-simple-hds-playback/' title='HTTP Dynamic Streaming: Simple HDS Playback'>HTTP Dynamic Streaming: Simple HDS Playback</a></li>
<li><a href='http://www.thekuroko.com/http-dynamic-streaming-getting-started/' title='Getting Started with HTTP Dynamic Streaming'>Getting Started with HTTP Dynamic Streaming</a></li>
<li><a href='http://www.thekuroko.com/f4fragment-extractor-app-adobe-marketplace-problems/' title='F4Fragment Extractor App &amp; Adobe Marketplace Problems'>F4Fragment Extractor App &#038; Adobe Marketplace Problems</a></li>
</ul>
<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><!-- Do not remove -->
<p><a href="http://feedads.g.doubleclick.net/~a/ycwmunOxknT-l5I2csIbnVBjIAs/0/da"><img src="http://feedads.g.doubleclick.net/~a/ycwmunOxknT-l5I2csIbnVBjIAs/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/ycwmunOxknT-l5I2csIbnVBjIAs/1/da"><img src="http://feedads.g.doubleclick.net/~a/ycwmunOxknT-l5I2csIbnVBjIAs/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[<div name="googleone_share_1" style="position:relative;z-index:5;clear:right; float: right; margin-left: 10px; margin-top:0px;"><g:plusone size="tall" count="1" href="http://www.thekuroko.com/http-dynamic-streaming-simple-hds-playback/"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.thekuroko.com%2Fhttp-dynamic-streaming-simple-hds-playback%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.thekuroko.com%2Fhttp-dynamic-streaming-simple-hds-playback%2F&amp;source=jccrosby&amp;style=normal&amp;service=bit.ly&amp;service_api=R_d6f2d9392c50bec7021f2575ee91df86&amp;space=20&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<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> 256 <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> 190 <br />
      <b>description:</b> Flash Builder 4.5 project archive of simple OSMF player. <br />
    </td>
  </tr>
</table><br />
<h3 class='related_post_title'>Related Posts:</h3>
<ul class='related_post'>
<li><a href='http://www.thekuroko.com/update-f4fragment-extractor-app-adobe-marketplace-problems/' title='UPDATE: F4Fragment Extractor App &amp; Adobe Marketplace Problems'>UPDATE: F4Fragment Extractor App &#038; Adobe Marketplace Problems</a></li>
<li><a href='http://www.thekuroko.com/http-dynamic-streaming-live-events/' title='HTTP Dynamic Streaming &amp; Live Events'>HTTP Dynamic Streaming &#038; Live Events</a></li>
<li><a href='http://www.thekuroko.com/f4fragment-extractor-app-adobe-marketplace-problems/' title='F4Fragment Extractor App &amp; Adobe Marketplace Problems'>F4Fragment Extractor App &#038; Adobe Marketplace Problems</a></li>
<li><a href='http://www.thekuroko.com/http-dynamic-streaming-presentation-summary/' title='HTTP Dynamic Streaming Presentation Summary'>HTTP Dynamic Streaming Presentation Summary</a></li>
<li><a href='http://www.thekuroko.com/http-dynamic-streaming-getting-started/' title='Getting Started with HTTP Dynamic Streaming'>Getting Started with HTTP Dynamic Streaming</a></li>
</ul>
<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><!-- Do not remove -->
<p><a href="http://feedads.g.doubleclick.net/~a/9Oku6F_tiH_QIgRp3G3Hq5nYcKs/0/da"><img src="http://feedads.g.doubleclick.net/~a/9Oku6F_tiH_QIgRp3G3Hq5nYcKs/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/9Oku6F_tiH_QIgRp3G3Hq5nYcKs/1/da"><img src="http://feedads.g.doubleclick.net/~a/9Oku6F_tiH_QIgRp3G3Hq5nYcKs/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[<div name="googleone_share_1" style="position:relative;z-index:5;clear:right; float: right; margin-left: 10px; margin-top:0px;"><g:plusone size="tall" count="1" href="http://www.thekuroko.com/http-dynamic-streaming-getting-started/"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.thekuroko.com%2Fhttp-dynamic-streaming-getting-started%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.thekuroko.com%2Fhttp-dynamic-streaming-getting-started%2F&amp;source=jccrosby&amp;style=normal&amp;service=bit.ly&amp;service_api=R_d6f2d9392c50bec7021f2575ee91df86&amp;space=20&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<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>
<pre class="brush: xml; title: ; notranslate">&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?--&gt;
&lt;xmlns=&quot;http://ns.adobe.com/f4m/1.0&quot;&gt;
	&lt;id&gt;Sample&lt;/id&gt;
	&lt;duration&gt;67&lt;/duration&gt;
	&lt;media url=&quot;rtmp://your.mediaserver.com/sample&quot;/&gt;
</pre>
<p>For a more detailed explanation of the F4M file format specification you can refer to OSMF&#8217;s FlashMediaManifestFileFormatSpecification.pdf</p>
<p>When packaging content for HDS, an F4M file is created for you or you can pass the packager the file path of an existing F4M file for multi-bitrate video content. The packager will add the necessary information to the F4M file for client side playback and is the file that should be requested by the client for a specific piece of HDS content.</p>
<p>Sample of a not-so-simple multi-bitrate F4M file:</p>
<pre class="brush: xml; title: ; notranslate">&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?--&gt;
&lt;xmlns=&quot;http://ns.adobe.com/f4m/1.0&quot;&gt;
	&lt;id&gt;
		sample_500kbps
	&lt;/id&gt;
	&lt;streamType&gt;
		recorded
	&lt;/streamType&gt;
	&lt;duration&gt;
		114.61450000000001
	&lt;/duration&gt;
	&lt;bootstrapInfo profile=&quot;named&quot; id=&quot;bootstrap1291&quot;&gt;
		AAABq2Fic3QAAAAAAAAAFAAAAAPoAAAAAAABv7UAAAAA...
	&lt;/bootstrapInfo&gt;
	bitrate=&quot;500&quot; bootstrapInfoId=&quot;bootstrap1291&quot;&gt;
		&lt;metadata&gt;
			AgAKb25NZXRhRGF0YQgAAAAAAAhkdXJhdGl...
		&lt;/metadata&gt;
	&lt;/media&gt;
	&lt;media streamId=&quot;sample_700kbps&quot; url=&quot;sample_700kbps&quot; bitrate=&quot;700&quot; bootstrapInfoId=&quot;bootstrap1291&quot;&gt;
		&lt;metadata&gt;
			AgAKb25NZXRhRGF0YQgAAAAAAAhkdXJhdG...
		&lt;/metadata&gt;
	&lt;/media&gt;
</pre>
<h3>Preparing content: The f4fpackager</h3>
<p>As mentioned previously, video content must be &#8216;prepared&#8217; for HDS delivery. Adobe has provided a tool to do this &#8211; the f4fpackager. The f4fpackager is installed with the Flash Media server and can be found at {FMS_INSTALL_ROOT}/tools/f4fpackager or you can download the packager and necessary libraries from the Adobe website: http://www.adobe.com/go/httpdynamicstreaming_bits</p>
<p>The packager is a command line (Windows/Linux) tool that allow you to package video content into the F4F format. The f4fpackager also creates the F4M file for your video content. Packaging video is a straightforward process that can grow in complexity with the addition of live media, multi-bitrate content, DRM and custom packaging settings. I won&#8217;t try to cover all of the details now as the <a title="Packaging On-demand Video Content" href="http://help.adobe.com/en_US/HTTPStreaming/1.0/Using/WS9463dbe8dbe45c4c-c126f3b1260533756d-7ffc.html" target="_blank">Adobe web site</a> has some great info about using the packager. Here are a few examples though:</p>
<h4>Single bitrate file</h4>
<p>Preparing a single bitrate file is the simplest type you will have to deal with when packaging HDS content. For example if we have a single file, sample.flv, the following command would package the content using the default settings and output the resulting packaged content to a sub-folder named &#8216;SampleOutput&#8217;:</p>
<pre class="brush: powershell; title: ; notranslate">f4fackager.exe --input-file=sample.flv --output-path=./SampleOutput</pre>
<h4>Multi-bitrate file</h4>
<p>Packaging multi-bitrate (MBR) files requires a little more preparation. To package MBR files you will need to pass the F4M file each time you package one of the video files. This lets the f4fpackager utility add the necessary data to the F4M file for each bitrate. For example, if we have the following set of files sample_100kbps.flv, sample_200kbps.flv, sample_300kbps.flv you would package these files with the following 3 commands:</p>
<pre class="brush: powershell; title: ; notranslate">f4fackager.exe --input-file=sample_100kbps.flv --bitrate=100 --output-path=./SampleOutput
f4fackager.exe --manifest-file=sample_100kbps.f4m --bitrate=200 --input-file=sample_200kbps.flv --output-path=./SampleOutput
f4fackager.exe --manifest-file=sample_100kbps.f4m --bitrate=300 --input-file=sample_300kbps.flv --output-path=./SampleOutput</pre>
<p>Notice we have added the &#8216;&#8211;bitrate&#8217; argument to all of the commands and the &#8216;&#8211;manifest-file&#8217; arguments to the second and third commands. The &#8211;manifest-file aregument passes in the f4m file created when we packaged the first 100 kbps file. This allows the f4fpackager to append the data for each successive packaged file to the data created  for the previous file(s). This means you will pass the sample_100kbps.f4m file to the client player to play the MBR content. The player will then use the data contained in this F4M file for each of the 3 bitrates to determine the optimal bitrate to request.</p>
<h2>HDS Delivery: Delivering Your HDS Video Content</h2>
<h3>What is the HTTP Origin Module and what does it do?</h3>
<p>Delivering HDS content requires an Apache server with the HTTP Origin  Module (kinda of, but we&#8217;ll get to that in a minute). The Apache HTTP Origin Module makes delivering HDS  content very straight forward. Just <a title="Install and Configure the HTTP Origin Module for HDS" href="http://help.adobe.com/en_US/HTTPStreaming/1.0/Using/WS7b362c044b7dd076-735e76121260080a90e-8000.html" target="_blank">install and configure it</a> on  your Apache web server, upload your files and your ready to go. basically the client player and the Origin Module work together to find and playback the fragment for a specific time for playback. The flow would going something like:</p>
<ol>
<li>The player loads and parses the data provided in the F4M file.</li>
<li>Based on that data the player figures out what segment/fragment pair to request from the server.</li>
<li>The HTTP Origin Module is passed the request from the Apache web server.</li>
<li>The origin module then pulls segment fragment pair from the files on the server and delivers it to the player.</li>
<li>The player can then handle the response by assembling the video data for playback.</li>
</ol>
<p><em>*NOTE: OSMF provides the code to handle playback of fragments as well as determining which segment/fragment pair to request based on the current time of playback. This code exists in the package </em><a title="OSMF org.osmf.net.httpstreaming Package" href="http://sourceforge.net/adobe/osmf/svn/2179/tree/osmf/trunk/framework/OSMF/org/osmf/net/httpstreaming/" target="_blank">org.osmf.net.httpstreaming</a><em>.</em></p>
<h3>Do I have to use the HTTP Origin Module?</h3>
<p>What if you want to deliver your content from an IIS web server or from Amazon S3? You don&#8217;t have to use the Origin module, but additional work will need to be done to remove the origin module from the playback loop.  There is a solution &#8211; the <a title="F4Fragment Extractor" href="http://www.thekuroko.com/downloads/f4fragment-extractor/">F4F Fragment Extrator</a>. This is a tool that I built to extract the fragments from the segments and creates files that you can deploy anywhere. In effect it does the work of the HTTP Origin Module up front so when a client requests the fragment, sampleSeg1-Frag9 for example, that file exists and can be delivered to the client for playback.</p>
<h2>Getting Started with HDS Summary</h2>
<p>Now you should have some knowledge about the main components for preparing and deliverying HDS content. In the next article, I&#8217;ll go over playback of HDS content using the Open Source Media Framework (OSMF). Until the next article, please don&#8217;t hesitate to ask questions or let me know if have questions about <a title="What is HTTP Dynamic Streaming?" href="http://www.thekuroko.com/2011/06/articles/what-is-http-dynamic-streaming/">what HDS is</a>, how to get started with it or if there is something else you&#8217;d like to see.</p>
<h2><span style="font-size: 15px;">Reference:</span></h2>
<ul>
<li><a title="Adobe HTTP Dynamic Streaming Help" href="http://help.adobe.com/en_US/HTTPStreaming/1.0/Using/WS9463dbe8dbe45c4c-c126f3b1260533756d-7ffc.html" target="_blank">Adobe HTTP Dynamic Streaming Help</a>: http://help.adobe.com/en_US/HTTPStreaming/1.0/Using/WS9463dbe8dbe45c4c-c126f3b1260533756d-7ffc.html</li>
<li><a title="F4M File Format Specification" href="http://osmf.org/dev/osmf/specpdfs/FlashMediaManifestFileFormatSpecification.pdf" target="_blank">F4M Specification</a>: http://osmf.org/dev/osmf/specpdfs/FlashMediaManifestFileFormatSpecification.pdf</li>
<li><a title="Packaging On-demand Video Content" href="http://help.adobe.com/en_US/HTTPStreaming/1.0/Using/WS9463dbe8dbe45c4c-c126f3b1260533756d-7ffc.htm" target="_blank">Packaging On-demand Video Content</a>: http://help.adobe.com/en_US/HTTPStreaming/1.0/Using/WS9463dbe8dbe45c4c-c126f3b1260533756d-7ffc.html</li>
<li><a title="Installing and Configuring the HTTP Origin Module" href="http://http://help.adobe.com/en_US/HTTPStreaming/1.0/Using/WS7b362c044b7dd076-735e76121260080a90e-8000.html" target="_blank">Installing and configuring the Apache HTTP Origin Module</a>: http://help.adobe.com/en_US/HTTPStreaming/1.0/Using/WS7b362c044b7dd076-735e76121260080a90e-8000.html</li>
</ul>
<h3 class='related_post_title'>Related Posts:</h3>
<ul class='related_post'>
<li><a href='http://www.thekuroko.com/http-dynamic-streaming-live-events/' title='HTTP Dynamic Streaming &amp; Live Events'>HTTP Dynamic Streaming &#038; Live Events</a></li>
<li><a href='http://www.thekuroko.com/update-f4fragment-extractor-app-adobe-marketplace-problems/' title='UPDATE: F4Fragment Extractor App &amp; Adobe Marketplace Problems'>UPDATE: F4Fragment Extractor App &#038; Adobe Marketplace Problems</a></li>
<li><a href='http://www.thekuroko.com/http-dynamic-streaming-presentation-summary/' title='HTTP Dynamic Streaming Presentation Summary'>HTTP Dynamic Streaming Presentation Summary</a></li>
<li><a href='http://www.thekuroko.com/http-dynamic-streaming-simple-hds-playback/' title='HTTP Dynamic Streaming: Simple HDS Playback'>HTTP Dynamic Streaming: Simple HDS Playback</a></li>
<li><a href='http://www.thekuroko.com/f4fragment-extractor-app-adobe-marketplace-problems/' title='F4Fragment Extractor App &amp; Adobe Marketplace Problems'>F4Fragment Extractor App &#038; Adobe Marketplace Problems</a></li>
</ul>
<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><!-- Do not remove -->
<p><a href="http://feedads.g.doubleclick.net/~a/yUVL1xaKLvTphvyzx3koq4jYhWc/0/da"><img src="http://feedads.g.doubleclick.net/~a/yUVL1xaKLvTphvyzx3koq4jYhWc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/yUVL1xaKLvTphvyzx3koq4jYhWc/1/da"><img src="http://feedads.g.doubleclick.net/~a/yUVL1xaKLvTphvyzx3koq4jYhWc/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>15</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[<div name="googleone_share_1" style="position:relative;z-index:5;clear:right; float: right; margin-left: 10px; margin-top:0px;"><g:plusone size="tall" count="1" href="http://www.thekuroko.com/what-is-http-dynamic-streaming/"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.thekuroko.com%2Fwhat-is-http-dynamic-streaming%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.thekuroko.com%2Fwhat-is-http-dynamic-streaming%2F&amp;source=jccrosby&amp;style=normal&amp;service=bit.ly&amp;service_api=R_d6f2d9392c50bec7021f2575ee91df86&amp;space=20&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<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.<br />
<h3 class='related_post_title'>Related Posts:</h3>
<ul class='related_post'>
<li><a href='http://www.thekuroko.com/update-f4fragment-extractor-app-adobe-marketplace-problems/' title='UPDATE: F4Fragment Extractor App &amp; Adobe Marketplace Problems'>UPDATE: F4Fragment Extractor App &#038; Adobe Marketplace Problems</a></li>
<li><a href='http://www.thekuroko.com/http-dynamic-streaming-live-events/' title='HTTP Dynamic Streaming &amp; Live Events'>HTTP Dynamic Streaming &#038; Live Events</a></li>
<li><a href='http://www.thekuroko.com/f4fragment-extractor-app-adobe-marketplace-problems/' title='F4Fragment Extractor App &amp; Adobe Marketplace Problems'>F4Fragment Extractor App &#038; Adobe Marketplace Problems</a></li>
<li><a href='http://www.thekuroko.com/http-dynamic-streaming-presentation-summary/' title='HTTP Dynamic Streaming Presentation Summary'>HTTP Dynamic Streaming Presentation Summary</a></li>
<li><a href='http://www.thekuroko.com/http-dynamic-streaming-simple-hds-playback/' title='HTTP Dynamic Streaming: Simple HDS Playback'>HTTP Dynamic Streaming: Simple HDS Playback</a></li>
</ul>
<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><!-- Do not remove -->
<p><a href="http://feedads.g.doubleclick.net/~a/gTB48yUyJl9_CBrzdJWTKgV0hGg/0/da"><img src="http://feedads.g.doubleclick.net/~a/gTB48yUyJl9_CBrzdJWTKgV0hGg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/gTB48yUyJl9_CBrzdJWTKgV0hGg/1/da"><img src="http://feedads.g.doubleclick.net/~a/gTB48yUyJl9_CBrzdJWTKgV0hGg/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[<div name="googleone_share_1" style="position:relative;z-index:5;clear:right; float: right; margin-left: 10px; margin-top:0px;"><g:plusone size="tall" count="1" href="http://www.thekuroko.com/inventing-room-tv-filming/"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.thekuroko.com%2Finventing-room-tv-filming%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.thekuroko.com%2Finventing-room-tv-filming%2F&amp;source=jccrosby&amp;style=normal&amp;service=bit.ly&amp;service_api=R_d6f2d9392c50bec7021f2575ee91df86&amp;space=20&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<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.<br />
<h3 class='related_post_title'>Related Posts:</h3>
<ul class='related_post'>
<li></li>
</ul>
<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><!-- Do not remove -->
<p><a href="http://feedads.g.doubleclick.net/~a/O9ZvtK--JJ695G38KaBzPF3-ny4/0/da"><img src="http://feedads.g.doubleclick.net/~a/O9ZvtK--JJ695G38KaBzPF3-ny4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/O9ZvtK--JJ695G38KaBzPF3-ny4/1/da"><img src="http://feedads.g.doubleclick.net/~a/O9ZvtK--JJ695G38KaBzPF3-ny4/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[<div name="googleone_share_1" style="position:relative;z-index:5;clear:right; float: right; margin-left: 10px; margin-top:0px;"><g:plusone size="tall" count="1" href="http://www.thekuroko.com/viewnavigator-data/"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.thekuroko.com%2Fviewnavigator-data%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.thekuroko.com%2Fviewnavigator-data%2F&amp;source=jccrosby&amp;style=normal&amp;service=bit.ly&amp;service_api=R_d6f2d9392c50bec7021f2575ee91df86&amp;space=20&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<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>.<br />
<h3 class='related_post_title'>Related Posts:</h3>
<ul class='related_post'>
<li><a href='http://www.thekuroko.com/mobile-flex-viewnavigator-basics/' title='Mobile Flex: ViewNavigator Basics'>Mobile Flex: ViewNavigator Basics</a></li>
<li><a href='http://www.thekuroko.com/take-the-pia-out-of-load-testing-amf-services/' title='Take the PIA out of load testing AMF services'>Take the PIA out of load testing AMF services</a></li>
<li><a href='http://www.thekuroko.com/mobile-development-is-exploding/' title='Mobile Development is Exploding &#8211; Hello PlayBook!'>Mobile Development is Exploding &#8211; Hello PlayBook!</a></li>
<li><a href='http://www.thekuroko.com/adobe-camp-open-for-registration/' title='Adobe Camp: 1 Day, 3 Camps: 5280 Reasons to Use the Flash Platform'>Adobe Camp: 1 Day, 3 Camps: 5280 Reasons to Use the Flash Platform</a></li>
<li><a href='http://www.thekuroko.com/adobe-air-issues-with-command-line-arguments/' title='Adobe AIR &#8211; Issues with Command Line Arguments'>Adobe AIR &#8211; Issues with Command Line Arguments</a></li>
</ul>
<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><!-- Do not remove -->
<p><a href="http://feedads.g.doubleclick.net/~a/hHUvrsTA4bdLBpx1CayAqiu6Atw/0/da"><img src="http://feedads.g.doubleclick.net/~a/hHUvrsTA4bdLBpx1CayAqiu6Atw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/hHUvrsTA4bdLBpx1CayAqiu6Atw/1/da"><img src="http://feedads.g.doubleclick.net/~a/hHUvrsTA4bdLBpx1CayAqiu6Atw/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>
		<item>
		<title>Mobile Flex: ViewNavigator Basics</title>
		<link>http://feedproxy.google.com/~r/codecook/~3/LAtlo0sHQbk/</link>
		<comments>http://www.thekuroko.com/mobile-flex-viewnavigator-basics/#comments</comments>
		<pubDate>Tue, 15 Mar 2011 20:19:54 +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[flex]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[viewnavigator]]></category>

		<guid isPermaLink="false">http://www.thekuroko.com/?p=634</guid>
		<description><![CDATA[Flex 4.5 provides some pretty slick updates and enhancements, the least of which is the of Mobile components and the ability to slam out some pretty nice mobile apps easily. The first thing I&#8217;d like to talk about is a new concept, the ViewNavigator. The ViewNavigator provides some pretty intense functionality such as view&#160;management. What [...]]]></description>
			<content:encoded><![CDATA[<div name="googleone_share_1" style="position:relative;z-index:5;clear:right; float: right; margin-left: 10px; margin-top:0px;"><g:plusone size="tall" count="1" href="http://www.thekuroko.com/mobile-flex-viewnavigator-basics/"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.thekuroko.com%2Fmobile-flex-viewnavigator-basics%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.thekuroko.com%2Fmobile-flex-viewnavigator-basics%2F&amp;source=jccrosby&amp;style=normal&amp;service=bit.ly&amp;service_api=R_d6f2d9392c50bec7021f2575ee91df86&amp;space=20&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Flex 4.5 provides some pretty slick updates and enhancements, the least of which is the of Mobile components and the ability to slam out some pretty nice mobile apps easily. The first thing I&#8217;d like to talk about is a new concept, the ViewNavigator. The ViewNavigator provides some pretty intense functionality such as view&nbsp;management.</p>
<h2>What is the ViewNavigator?</h2>
<p>The ViewNavigator keeps track of your views. It does this by keeping your views in a list. &nbsp;To add a new view you &#8216;push&#8217; the view into the list, to remove a view you can &#8216;pop&#8217; a view out of the list. You can think of it as a stack &#8211; first in, last out &#8211; and the last view in is the visible view.</p>
<div id="attachment_648" class="wp-caption alignnone" style="width: 410px"><a href="http://www.thekuroko.com/wp-content/uploads/2011/03/ViewNavigator-push.png" rel="lightbox[634]"><img class="size-full wp-image-648 " title="Push View into ViewNavigator" src="http://www.thekuroko.com/wp-content/uploads/2011/03/ViewNavigator-push.png" alt="" width="400" height="250" /></a><p class="wp-caption-text">Pushing a View into ViewNavigator&#39;s &#39;stack&#39;</p></div>
<div id="attachment_649" class="wp-caption alignnone" style="width: 410px"><a href="http://www.thekuroko.com/wp-content/uploads/2011/03/ViewNavigator-pop.png" rel="lightbox[634]"><img class="size-full wp-image-649" title="Pop View out of ViewNavigator" src="http://www.thekuroko.com/wp-content/uploads/2011/03/ViewNavigator-pop.png" alt="" width="400" height="250" /></a><p class="wp-caption-text">Popping a view out of the ViewNavigator&#39;s &#39;stack&#39;</p></div>
<h2>Using the ViewNavigator</h2>
<p>Using the view navigator is a pretty&nbsp;straight&nbsp;forward process of capturing a user interaction, such as a button click, then pushing the new View into the ViewNavigator&#8217;s stack.</p>
<p>For example, let&#8217;s pretend that you have a new Flex mobile project. The default view of that project contains a button, that when clicked should display another view named MyNewView. &nbsp;MyNewView also contains a button, that when clicked returns you to the the home view.</p>
<h3>Home View Component</h3>
<p>In the Home View component all you really need to worry about the the click handler on the button:</p>
<pre class="brush: xml; title: ; notranslate">﻿﻿﻿﻿﻿&lt;s:Button id=&quot;next_btn&quot;
label=&quot;NEXT&quot;
width=&quot;100%&quot;
click=&quot;navigtor.pushView(MyNewView)&quot; /&gt;</pre>
<p>The click handler calls the <strong>pushView() </strong>method on &#8216;<em>navigator</em>&#8216;, a property available from the View class, passing it the <span style="text-decoration: underline;">class name</span> of the View that you want to display. We&#8217;ll cover getting data into that view and transitions in other posts. &nbsp;The creation of the new View &amp; default transition are all handled by the &nbsp;framework.</p>
<h3>MyNewView Component</h3>
<p>The MyNewView View component is basically the same thing:</p>
<pre class="brush: xml; title: ; notranslate">﻿﻿﻿﻿﻿&lt;s:Button id=&quot;back_btn&quot;
label=&quot;BACK&quot;
width=&quot;100%&quot;
click=&quot;navigtor.popView()&quot; /&gt;</pre>
<p>You call <strong>popView()</strong> on the &#8216;<em>navigator</em>&#8216; property which removes the view from the stack displaying the Home view again.</p>
<p>Here is a quick screen cast of an application using similar code:<br />

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_ViewNavigatorSample_1492794462"
			class="flashmovie"
			width="485"
			height="785">
	<param name="movie" value="http://thekuroko.com/wp-content/uploads/2011/03/ViewNavigatorSample.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://thekuroko.com/wp-content/uploads/2011/03/ViewNavigatorSample.swf"
			name="fm_ViewNavigatorSample_1492794462"
			width="485"
			height="785">
	<!--<![endif]-->
		<a href="http://adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p>

	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<p>This article has also been posted on <a href="http://www.realeyes.com/blog/2011/05/15/mobile-flex-viewnavigator-basics/">the Realeyes website</a>.<br />
<h3 class='related_post_title'>Related Posts:</h3>
<ul class='related_post'>
<li><a href='http://www.thekuroko.com/viewnavigator-data/' title='Mobile Flex: View Data'>Mobile Flex: View Data</a></li>
<li><a href='http://www.thekuroko.com/take-the-pia-out-of-load-testing-amf-services/' title='Take the PIA out of load testing AMF services'>Take the PIA out of load testing AMF services</a></li>
<li><a href='http://www.thekuroko.com/mobile-development-is-exploding/' title='Mobile Development is Exploding &#8211; Hello PlayBook!'>Mobile Development is Exploding &#8211; Hello PlayBook!</a></li>
<li><a href='http://www.thekuroko.com/adobe-camp-open-for-registration/' title='Adobe Camp: 1 Day, 3 Camps: 5280 Reasons to Use the Flash Platform'>Adobe Camp: 1 Day, 3 Camps: 5280 Reasons to Use the Flash Platform</a></li>
<li><a href='http://www.thekuroko.com/adobe-air-issues-with-command-line-arguments/' title='Adobe AIR &#8211; Issues with Command Line Arguments'>Adobe AIR &#8211; Issues with Command Line Arguments</a></li>
</ul>
<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><!-- Do not remove -->
<p><a href="http://feedads.g.doubleclick.net/~a/MuIWAPWU0NwqSLA1aHRLbmb0G-A/0/da"><img src="http://feedads.g.doubleclick.net/~a/MuIWAPWU0NwqSLA1aHRLbmb0G-A/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/MuIWAPWU0NwqSLA1aHRLbmb0G-A/1/da"><img src="http://feedads.g.doubleclick.net/~a/MuIWAPWU0NwqSLA1aHRLbmb0G-A/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/codecook?a=LAtlo0sHQbk:PfVn0h8PncE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/codecook?i=LAtlo0sHQbk:PfVn0h8PncE:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=LAtlo0sHQbk:PfVn0h8PncE:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/codecook?i=LAtlo0sHQbk:PfVn0h8PncE:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=LAtlo0sHQbk:PfVn0h8PncE:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/codecook?i=LAtlo0sHQbk:PfVn0h8PncE:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=LAtlo0sHQbk:PfVn0h8PncE:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/codecook?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=LAtlo0sHQbk:PfVn0h8PncE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/codecook?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=LAtlo0sHQbk:PfVn0h8PncE:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/codecook?i=LAtlo0sHQbk:PfVn0h8PncE:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=LAtlo0sHQbk:PfVn0h8PncE: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/LAtlo0sHQbk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.thekuroko.com/mobile-flex-viewnavigator-basics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.thekuroko.com/mobile-flex-viewnavigator-basics/</feedburner:origLink></item>
		<item>
		<title>OSMF 1 Day Course: What do you want?</title>
		<link>http://feedproxy.google.com/~r/codecook/~3/RQVu1C0EDsM/</link>
		<comments>http://www.thekuroko.com/osmf-1-day-course-what-do-you-want/#comments</comments>
		<pubDate>Tue, 07 Dec 2010 19:27:41 +0000</pubDate>
		<dc:creator>John Crosby</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[osmf]]></category>
		<category><![CDATA[realeyes]]></category>
		<category><![CDATA[training]]></category>

		<guid isPermaLink="false">http://www.thekuroko.com/?p=591</guid>
		<description><![CDATA[We are working on a 1 day Open Source Media Framework (OSMF) course at Realeyes and wanted to know what should be included in the training. Here is the initial course description: This intense one day hands-on course is a serious dive into the Open Source Media Framework (OSMF). Starting with an introduction of the [...]]]></description>
			<content:encoded><![CDATA[<div name="googleone_share_1" style="position:relative;z-index:5;clear:right; float: right; margin-left: 10px; margin-top:0px;"><g:plusone size="tall" count="1" href="http://www.thekuroko.com/osmf-1-day-course-what-do-you-want/"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.thekuroko.com%2Fosmf-1-day-course-what-do-you-want%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.thekuroko.com%2Fosmf-1-day-course-what-do-you-want%2F&amp;source=jccrosby&amp;style=normal&amp;service=bit.ly&amp;service_api=R_d6f2d9392c50bec7021f2575ee91df86&amp;space=20&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>We are working on a 1 day Open Source Media Framework (OSMF) course at <a title="Realeyes Media" href="http://realeyes.com" target="_blank">Realeyes</a> and wanted to know what should be included in the training. Here is the initial course description:</p>
<blockquote><p>This  intense one day hands-on course is a serious dive into the Open   Source  Media Framework (OSMF). Starting with an introduction of the   OSMF the  course quickly picks up pace and covers the basics of simple    implementations that can be done in less 4 lines of code or less for    powerful media player applications to the creation, understanding, and    use of the more robust features for dynamic media management, from    progressive playback to HTTP Dynamic Streaming. The course also will    cover creating and using HTML embeddable players, implementing brandable    media player user interfaces, advanced stream and connection    management, as well as a solid exploration of the advanced plugin    architecture available with OSMF.</p></blockquote>
<p>And here is the initial outline:</p>
<div>
<ul>
<li><strong>Unit 1: Getting Started</strong>
<ul>
<li>Introducing OSMF</li>
<li>Using the Strobe Media Player</li>
<li>The basics of OSMF
<ul>
<li>BuildingThe Simplest Player</li>
<li>Breaking down and understanding the parts of OSMF
<ul>
<li>MediaElement</li>
<li>MediaPlayer</li>
<li>MediaContainer</li>
<li>MediaFactory</li>
</ul>
</li>
<li>Handling different types of media (Images/SWF/Video/Audio)</li>
<li>Understanding Traits</li>
<li>Utilizing MetaData</li>
<li>Making an Embeddable Media Player
<ul>
<li>Using FlashVars to control the player</li>
<li>Using the HTMLMediaContainer</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><strong>Unit 2: Enhanced Media Experiences</strong>
<ul>
<li>Creating and implementing User Interface control with OSMF</li>
<li>Media Compositions &amp; base level custom advertising/monetization
<ul>
<li>Serial
<ul>
<li>Poster art, playlists, pre/post/in-play injection</li>
</ul>
</li>
<li>Parallel
<ul>
<li>Overlay/PiP, outside synchronized advertising
<ul>
<li>Basics of Layout controls</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><strong>Unit 3: Extensibility</strong>
<ul>
<li>Advanced low level control techniques
<ul>
<li>Advanced NetConnection Management &amp; Control</li>
<li>Advanced NetStream Management &amp; Control</li>
<li>Advanced Buffer Management</li>
</ul>
</li>
<li>Plugins
<ul>
<li>Understanding the different types:
<ul>
<li>Static and Dynamic
<ul>
<li>Reference and Proxy</li>
</ul>
</li>
</ul>
</li>
<li>CDN Plugins
<ul>
<li>Implementing a CDN plugin
<ul>
<li>Akamai, LimeLight</li>
</ul>
</li>
</ul>
</li>
<li>Analytics Plugins
<ul>
<li>Building a simple plugin with JS integration/reporting</li>
<li>Implementing the GTrack Plugin</li>
</ul>
</li>
<li>Advertising Plugins
<ul>
<li> VAST/MAST &#8211; pre-roll and overlay</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<p>Do you see anything missing?</p>
<p>Something you&#8217;d like to have in the 1 day course?</p>
<p>Would you be interested in sitting in on a test run of the course in the future?</p>
<p>Let me know.<br />
<h3 class='related_post_title'>Related Posts:</h3>
<ul class='related_post'>
<li><a href='http://www.thekuroko.com/f4fragment-extractor-app-adobe-marketplace-problems/' title='F4Fragment Extractor App &amp; Adobe Marketplace Problems'>F4Fragment Extractor App &#038; Adobe Marketplace Problems</a></li>
<li><a href='http://www.thekuroko.com/http-dynamic-streaming-simple-hds-playback/' title='HTTP Dynamic Streaming: Simple HDS Playback'>HTTP Dynamic Streaming: Simple HDS Playback</a></li>
<li><a href='http://www.thekuroko.com/osmf-custom-media-elements/' title='OSMF Custom Media Elements'>OSMF Custom Media Elements</a></li>
<li><a href='http://www.thekuroko.com/adobe-mktplace-gtrack-plugin/' title='Adobe Marketplace and the GTrack OSMF Plugin'>Adobe Marketplace and the GTrack OSMF Plugin</a></li>
<li><a href='http://www.thekuroko.com/osmf-1-5-is-in-the-wild/' title='OSMF 1.5 is in the Wild!'>OSMF 1.5 is in the Wild!</a></li>
</ul>
<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><!-- Do not remove -->
<p><a href="http://feedads.g.doubleclick.net/~a/CaleixA37fY1s0GvbTQg_fT8U7A/0/da"><img src="http://feedads.g.doubleclick.net/~a/CaleixA37fY1s0GvbTQg_fT8U7A/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/CaleixA37fY1s0GvbTQg_fT8U7A/1/da"><img src="http://feedads.g.doubleclick.net/~a/CaleixA37fY1s0GvbTQg_fT8U7A/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/codecook?a=RQVu1C0EDsM:B-AZj-4JJ_E:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/codecook?i=RQVu1C0EDsM:B-AZj-4JJ_E:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=RQVu1C0EDsM:B-AZj-4JJ_E:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/codecook?i=RQVu1C0EDsM:B-AZj-4JJ_E:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=RQVu1C0EDsM:B-AZj-4JJ_E:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/codecook?i=RQVu1C0EDsM:B-AZj-4JJ_E:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=RQVu1C0EDsM:B-AZj-4JJ_E:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/codecook?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=RQVu1C0EDsM:B-AZj-4JJ_E:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/codecook?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=RQVu1C0EDsM:B-AZj-4JJ_E:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/codecook?i=RQVu1C0EDsM:B-AZj-4JJ_E:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=RQVu1C0EDsM:B-AZj-4JJ_E: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/RQVu1C0EDsM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.thekuroko.com/osmf-1-day-course-what-do-you-want/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.thekuroko.com/osmf-1-day-course-what-do-you-want/</feedburner:origLink></item>
		<item>
		<title>OSMF Custom Media Elements</title>
		<link>http://feedproxy.google.com/~r/codecook/~3/EUjONvSy-vo/</link>
		<comments>http://www.thekuroko.com/osmf-custom-media-elements/#comments</comments>
		<pubDate>Tue, 23 Nov 2010 21:34:01 +0000</pubDate>
		<dc:creator>John Crosby</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Samples]]></category>
		<category><![CDATA[osmf]]></category>
		<category><![CDATA[sample]]></category>

		<guid isPermaLink="false">http://www.thekuroko.com/?p=563</guid>
		<description><![CDATA[A good argument for using a framework is the ability to extend the built in capabilities of the framework. For example, there was a comment on the &#8216;Getting Sstarted with OSMF Plugins&#8216; post that asked about using embedded images in theWatermarkPlugin sample. Here are the steps that I took to get an embedded asset (instead [...]]]></description>
			<content:encoded><![CDATA[<div name="googleone_share_1" style="position:relative;z-index:5;clear:right; float: right; margin-left: 10px; margin-top:0px;"><g:plusone size="tall" count="1" href="http://www.thekuroko.com/osmf-custom-media-elements/"></g:plusone></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.thekuroko.com%2Fosmf-custom-media-elements%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.thekuroko.com%2Fosmf-custom-media-elements%2F&amp;source=jccrosby&amp;style=normal&amp;service=bit.ly&amp;service_api=R_d6f2d9392c50bec7021f2575ee91df86&amp;space=20&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>A good argument for using a framework is the ability to extend the built in capabilities of the framework. For example, there was a comment on the &#8216;<a title="Getting Started: OSMF Plugins" href="http://www.thekuroko.com/2010/08/articles/presentations/getting-started-osmf-plugins/" target="_blank">Getting Sstarted with OSMF Plugins</a>&#8216; post that asked about using embedded images in theWatermarkPlugin sample.</p>
<p>Here are the steps that I took to get an embedded asset (instead of a &#8216;loadable&#8217; asset) to show as a watermark:</p>
<p>1. Create a new class that extends MediaElement (this is a simple element, but you could extend any existing element depending on your needs). I named mine StaticImageElement.</p>
<pre class="brush: as3; title: ; notranslate">
package com.realeyes.osmf.plugin.element
{
  public class StaticImageElement extends MediaElement
  {
    ...
  }
}
</pre>
<p>2. Add a private Bitmap property with a getter and setter to the class &#8211; I named mine _bitmap.</p>
<pre class="brush: as3; title: ; notranslate">
private var _bitmap:Bitmap;

...

public function get bitmap():Bitmap
{
  return _bitmap;
}

public function set bitmap( value:Bitmap ):void
{
  if( value != _bitmap )
  {
    bitmap = value;
  }
}
</pre>
<p>3. In the setter for the bitmap property add the DisplayObjectTrait to the StaticImageElement</p>
<pre class="brush: as3; title: ; notranslate">
addTrait( MediaTraitType.DISPLAY_OBJECT, new DisplayObjectTrait( _bitmap as DisplayObject, bitmap.width, bitmap.height ) );
</pre>
<p>4. The completed class is pretty simple because we get to use everything already created for OSMF.</p>
<pre class="brush: as3; title: ; notranslate">
package com.realeyes.osmf.plugin.element
{
  import flash.display.Bitmap;
  import flash.display.BitmapData;
  import flash.display.DisplayObject;

  import org.osmf.media.MediaElement;
  import org.osmf.traits.DisplayObjectTrait;
  import org.osmf.traits.MediaTraitType;

  public class StaticImageElement extends MediaElement
  {
    private var _bitmap:Bitmap;

    public function StaticImageElement()
    {
      super();
    }

    public function get bitmap():Bitmap
    {
      return _bitmap;
    }

    public function set bitmap( value:Bitmap ):void
    {
      if( value != _bitmap )
      {
        _bitmap = value;

        addTrait( MediaTraitType.DISPLAY_OBJECT, new DisplayObjectTrait( _bitmap as DisplayObject, bitmap.width, bitmap.height ) );
      }
    }
  }
}
</pre>
<p>5. Create the embedded asset in the WatermarkPluginElement class</p>
<pre class="brush: as3; title: ; notranslate">
[Embed( &quot;/assets/osmf_logo.png&quot; )]
protected static const OSMF_LOGO:Class;
</pre>
<p>6. Now all we need to do in the WatermarkProxyElement set the bitmap property on a new instance of the StaticImageElement instead of creating an ImageElement with the watermark URL and ImageLoader.<br />
<strong>Before:</strong></p>
<pre class="brush: as3; title: ; notranslate">
var watermark:ImageElement = new ImageElement( new URLResource( watermarkURL ), new ImageLoader() );
</pre>
<p><strong>After:</strong></p>
<pre class="brush: as3; title: ; notranslate">
var watermark:StaticImageElement = new StaticImageElement();
watermark.bitmap = new OSMF_LOGO();
</pre>
<p>Bonus points for developing with a framework &#8211; more specifically OSMF! The embedded watermark shows up.</p>
<p><a href="http://www.thekuroko.com/wp-content/uploads/2010/11/osmf-embeddded-image.png" rel="lightbox[563]"><img class="size-full wp-image-564" title="osmf-embeddded-image" src="http://www.thekuroko.com/wp-content/uploads/2010/11/osmf-embeddded-image.png" alt="" width="516" height="343" /></a></p>
<p>Download the original sample code:<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/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=10">OSMF Plugin Samples</a> <small>(722.43KB)</small><br />
      <b>added:</b> 25/08/2010 <br />
      <b>clicks:</b> 933 <br />
      <b>description:</b> Samples from the RMAUG presentation on OSMF plugins. <br />
    </td>
  </tr>
</table></p>
<p><strong><em>UPDATE:</em></strong> I&#8217;ve created an additional custom MediaElement called InteractiveImageElement.as. Thanks for the idea <a href="http://twitter.com/cucu_adrian">@cucu_adrian</a>! The new element handles rollover and rollout by adjusting the image&#8217;s alpha property and setting the cursor to a button cursor. It also navigates to a url specified in the class &#8211; this would be any easy thing to make configurable though.<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/default.gif" alt="http://www.thekuroko.com/wp-content/plugins/downloads-manager/img/icons/default.gif">
    </td>
    <td>
      <b>download:</b> <a href="http://www.thekuroko.com/?file_id=11">InteractiveImageElement.zip</a> <small>(774B)</small><br />
      <b>added:</b> 24/11/2010 <br />
      <b>clicks:</b> 382 <br />
      <b>description:</b> Custom OSMF MediaElement that adjusts the cursor & alpha on rollover and goes to a URL when clicked.

See the following articles for details and usage:
http://www.thekuroko.com/2010/08/articles/presentations/getting-started-osmf-plugins/
http://www.thekuroko.com/2010/11/articles/code/osmf-custom-media-elements/ <br />
    </td>
  </tr>
</table></p>
<h3 class='related_post_title'>Related Posts:</h3>
<ul class='related_post'>
<li><a href='http://www.thekuroko.com/f4fragment-extractor-app-adobe-marketplace-problems/' title='F4Fragment Extractor App &amp; Adobe Marketplace Problems'>F4Fragment Extractor App &#038; Adobe Marketplace Problems</a></li>
<li><a href='http://www.thekuroko.com/http-dynamic-streaming-simple-hds-playback/' title='HTTP Dynamic Streaming: Simple HDS Playback'>HTTP Dynamic Streaming: Simple HDS Playback</a></li>
<li><a href='http://www.thekuroko.com/osmf-1-day-course-what-do-you-want/' title='OSMF 1 Day Course: What do you want?'>OSMF 1 Day Course: What do you want?</a></li>
<li><a href='http://www.thekuroko.com/adobe-mktplace-gtrack-plugin/' title='Adobe Marketplace and the GTrack OSMF Plugin'>Adobe Marketplace and the GTrack OSMF Plugin</a></li>
<li><a href='http://www.thekuroko.com/osmf-1-5-is-in-the-wild/' title='OSMF 1.5 is in the Wild!'>OSMF 1.5 is in the Wild!</a></li>
</ul>
<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><!-- Do not remove -->
<p><a href="http://feedads.g.doubleclick.net/~a/2eq_Fn146ijpCd5caowxjI6bc-Y/0/da"><img src="http://feedads.g.doubleclick.net/~a/2eq_Fn146ijpCd5caowxjI6bc-Y/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/2eq_Fn146ijpCd5caowxjI6bc-Y/1/da"><img src="http://feedads.g.doubleclick.net/~a/2eq_Fn146ijpCd5caowxjI6bc-Y/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/codecook?a=EUjONvSy-vo:hTolHT659hE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/codecook?i=EUjONvSy-vo:hTolHT659hE:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=EUjONvSy-vo:hTolHT659hE:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/codecook?i=EUjONvSy-vo:hTolHT659hE:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=EUjONvSy-vo:hTolHT659hE:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/codecook?i=EUjONvSy-vo:hTolHT659hE:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=EUjONvSy-vo:hTolHT659hE:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/codecook?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=EUjONvSy-vo:hTolHT659hE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/codecook?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=EUjONvSy-vo:hTolHT659hE:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/codecook?i=EUjONvSy-vo:hTolHT659hE:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/codecook?a=EUjONvSy-vo:hTolHT659hE: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/EUjONvSy-vo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.thekuroko.com/osmf-custom-media-elements/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.thekuroko.com/osmf-custom-media-elements/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic Page Served (once) in 31.353 seconds --><!-- Cached page served by WP-Cache -->

