<?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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Mike Chambers</title>
	
	<link>http://www.mikechambers.com/blog</link>
	<description>code = joy</description>
	<lastBuildDate>Sat, 08 Jun 2013 16:35:50 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/MikeChambers" /><feedburner:info uri="mikechambers" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Simple HTTP Server for local testing</title>
		<link>http://feedproxy.google.com/~r/MikeChambers/~3/3BQh30DpR2Q/</link>
		<comments>http://www.mikechambers.com/blog/2012/04/08/simple-http-server-for-local-testing/#comments</comments>
		<pubDate>Sun, 08 Apr 2012 23:37:03 +0000</pubDate>
		<dc:creator>mikechambers</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://www.mikechambers.com/blog/?p=2493</guid>
		<description><![CDATA[I am currently playing around with the HTML5 FileSystem API, and have a need to test my files served via a web server. I could setup a virtual director for my local apache server, but given the number of simple tests and experiments I do, I wanted something easier that required little to no configuration [...]]]></description>
				<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.mikechambers.com%2Fblog%2F2012%2F04%2F08%2Fsimple-http-server-for-local-testing%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.mikechambers.com%2Fblog%2F2012%2F04%2F08%2Fsimple-http-server-for-local-testing%2F&amp;source=mesh&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>I am currently playing around with the <a href="http://www.html5rocks.com/en/tutorials/file/filesystem/">HTML5 FileSystem API</a>, and have a need to test my files served via a web server. I could setup a virtual director for my local apache server, but given the number of simple tests and experiments I do, I wanted something easier that required little to no configuration and setup.</p>
<p>So, I put together a super simple script that uses <a href="http://docs.python.org/library/simplehttpserver.html">python&#8217;s SimpleHTTPServer class</a>.<br />
<span id="more-2493"></span><br />
Here is the script (requires that python is installed and in your path)</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
&nbsp;
python <span style="color: #660033;">-m</span> SimpleHTTPServer <span style="color: #007800;">$1</span></pre></div></div>

<p>To use it, just switch the the directory that contains your files and run:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">http</pre></div></div>

<p>This will open a simple webserver on port 8000.</p>
<p>You can optionally pass in the port like so:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">http <span style="color: #000000;">2030</span></pre></div></div>

<p>Which will start a simple web server listening on port 2030.</p>
<p>Again, this is something really simple, but also very useful. If you need to quickly test a file, just switch to the directory and run the script.</p>
<p>Btw, another work around for playing with the FileSystem APIs would be to pass the:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #660033;">--allow-file-access-from-files</span></pre></div></div>

<p>to Chrome when launching it.</p>
<img src="http://feeds.feedburner.com/~r/MikeChambers/~4/3BQh30DpR2Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.mikechambers.com/blog/2012/04/08/simple-http-server-for-local-testing/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.mikechambers.com/blog/2012/04/08/simple-http-server-for-local-testing/</feedburner:origLink></item>
		<item>
		<title>North American Flash Community Tour</title>
		<link>http://feedproxy.google.com/~r/MikeChambers/~3/TryspWPV_bI/</link>
		<comments>http://www.mikechambers.com/blog/2012/04/02/north-american-flash-community-tour/#comments</comments>
		<pubDate>Mon, 02 Apr 2012 20:15:48 +0000</pubDate>
		<dc:creator>mikechambers</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.mikechambers.com/blog/?p=2489</guid>
		<description><![CDATA[Just as we did in Europe a couple of weeks ago, Lee Brimelow and I are doing a series of Flash get togethers in North America over the next couple of weeks. I will be talking about the roadmap for the Flash runtimes, and leading a discussion around recent development in the Flash world. Lee [...]]]></description>
				<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.mikechambers.com%2Fblog%2F2012%2F04%2F02%2Fnorth-american-flash-community-tour%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.mikechambers.com%2Fblog%2F2012%2F04%2F02%2Fnorth-american-flash-community-tour%2F&amp;source=mesh&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Just as we did in Europe a couple of weeks ago, <a href="http://www.leebrimelow.com">Lee Brimelow</a> and I are doing a series of Flash get togethers in North America over the next couple of weeks. I will be talking about the <a href="http://www.adobe.com/go/flashplayer_whitepaper">roadmap for the Flash runtimes</a>, and leading a discussion around recent development in the Flash world.  Lee will be showing off some of the new stuff we are working on around gaming.</p>
<p>Here are the cities and dates:</p>
<ul>
<li><a href="http://altdevblogaday.com/2012/04/02/extravagant-cheating-via-direct-x/">Denver : April 3</a></li>
<li><a href="http://meetu.ps/89800">Nashville : April 9</a></li>
<li><a href="http://www.meetup.com/Adobe-User-Group-of-Atlanta/events/56200162/">Atlanta : April 10</a></li>
<li><a href="http://eveningwithmikeandlee.eventbrite.com/">St Paul, April 11</a></li>
<li><a href="http://newyorkflexmeetup.eventbrite.com">New York, April 12</a></li>
</ul>
<p>We will also be doing meetings in San Francisco, LA, Chicago and Mexico City. Ill update this post once we finalize the details for those cities.</p>
<p>In addition to these events, Lee Brimelow is doing some additional events in Las Vegas and Tempe. Check out his <a href="http://www.leebrimelow.com/?p=3286">blog for more info</a>.</p>
<img src="http://feeds.feedburner.com/~r/MikeChambers/~4/TryspWPV_bI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.mikechambers.com/blog/2012/04/02/north-american-flash-community-tour/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.mikechambers.com/blog/2012/04/02/north-american-flash-community-tour/</feedburner:origLink></item>
		<item>
		<title>Flash Roadmap Whitepaper Published</title>
		<link>http://feedproxy.google.com/~r/MikeChambers/~3/4Ypga_q6kKg/</link>
		<comments>http://www.mikechambers.com/blog/2012/02/22/flash-roadmap-whitepaper-published/#comments</comments>
		<pubDate>Wed, 22 Feb 2012 07:58:21 +0000</pubDate>
		<dc:creator>mikechambers</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[flashplayer]]></category>
		<category><![CDATA[roadmap]]></category>

		<guid isPermaLink="false">http://www.mikechambers.com/blog/?p=2483</guid>
		<description><![CDATA[We have just posted a new whitepaper on Adobe.com. The whitepaper, titled Adobe roadmap for the Flash runtimes lays out the 1 to 2 year roadmap for the Flash runtimes (primarily Adobe AIR and Flash Player). This includes information on specific planned releases, longer term player work, and supported platforms. This is actually the third [...]]]></description>
				<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.mikechambers.com%2Fblog%2F2012%2F02%2F22%2Fflash-roadmap-whitepaper-published%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.mikechambers.com%2Fblog%2F2012%2F02%2F22%2Fflash-roadmap-whitepaper-published%2F&amp;source=mesh&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>We have just posted a new whitepaper on Adobe.com. The whitepaper, titled <a href="http://www.adobe.com/go/flashplayer_whitepaper">Adobe roadmap for the Flash runtimes</a> lays out the 1 to 2 year roadmap for the Flash runtimes (primarily Adobe AIR and Flash Player). This includes information on specific planned releases, longer term player work, and supported platforms.<br />
<span id="more-2483"></span><br />
This is actually the third Flash platform white paper that we have released in the past week (<a href="http://www.adobe.com/go/flashplatform_whitepapers">Adobe’s view of Flex and its commitments to Flex in the future</a>, <a href="http://www.adobe.com/go/flashplatform_whitepapers">Adobe Flash Player and Adobe AIR security</a>), and is a part of a larger process of trying to provide clear and open communications around our thinking and plans for the Flash platform.</p>
<p>The primary goal of the whitepaper is to have a single definitive resource that provides clear insight into Adobe&#8217;s plans and thinking around the roadmap for the Flash runtimes.</p>
<p>While in the past we have been open around our plans for the Flash runtimes, there was never a single resource where developers could find all of the latest thinking and plans around those runtimes. News and information was often spread across multiple resources, including the Adobe website, Adobe blogs, personal blogs, forum posts, and even tweets. We will still leverage these various means of communications, but they will build on top of the whitepaper. As our thinking and plans around the Flash runtimes evolve, we will update the whitepaper with those new plans.</p>
<p>This is also part of some more extensive changes at Adobe to help us avoid some of the communication missteps which have caused so much consternation and frustration over the past couple of months. Not only does the publication of the whitepaper give us a clear and concise way to publish information and plans around the Flash runtimes, it also provides developers with a definitive resources on where to get the most current information around the Flash platform.</p>
<p>This speaks to another goal of the whitepapers. We understand that we have damaged our trust and credibility with the community over how we have communicated some of the recent changes around the Flash platform and that trying to regain  that trust is a long term process. We  have to be clear and open around our plans around the Flash runtimes, and then demonstrate that we can follow up those plans with actions. This whitepaper lays the foundation of the first part of that, and hopefully our actions and runtime releases over the next 6 to 12 months will demonstrate the second part.</p>
<p>Finally, as part of the release of the whitepaper, I and some other members of the Flash and evangelist teams will be visiting user groups world wide. This will be an opportunity to go over the roadmap in more detail, have a frank and open discussion around recent changes around Flash, as well as discuss Flash&#8217;s role on the web and how it related to HTML5. The first set of meetings are over the <a href="http://www.mikechambers.com/blog/2012/02/13/in-europe-to-discuss-flash-roadmap/">next two weeks in Europe</a>, and we will announce more for North and South America, and Asia over the next couple of weeks. If you would be interested in hosting a meeting, just shoot me an email at mesh@adobe.com.</p>
<p>We are already planning an update for the whitepaper in a couple of weeks, so if you find anything is not clear, or would like it to cover other topics, please post them in the comments, or shoot me an email.</p>
<img src="http://feeds.feedburner.com/~r/MikeChambers/~4/4Ypga_q6kKg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.mikechambers.com/blog/2012/02/22/flash-roadmap-whitepaper-published/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		<feedburner:origLink>http://www.mikechambers.com/blog/2012/02/22/flash-roadmap-whitepaper-published/</feedburner:origLink></item>
		<item>
		<title>In Europe to discuss Flash Roadmap</title>
		<link>http://feedproxy.google.com/~r/MikeChambers/~3/ShldyGlS-Fg/</link>
		<comments>http://www.mikechambers.com/blog/2012/02/13/in-europe-to-discuss-flash-roadmap/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 19:55:28 +0000</pubDate>
		<dc:creator>mikechambers</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.mikechambers.com/blog/?p=2470</guid>
		<description><![CDATA[If you follow me on twitter, then you may have noticed that I have been working on a white-paper laying out the roadmap and strategy for the Flash runtimes (Flash Player and Adobe AIR). The white-paper is going through internal review now, and should be available in the next 7 to 10 days. As part [...]]]></description>
				<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.mikechambers.com%2Fblog%2F2012%2F02%2F13%2Fin-europe-to-discuss-flash-roadmap%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.mikechambers.com%2Fblog%2F2012%2F02%2F13%2Fin-europe-to-discuss-flash-roadmap%2F&amp;source=mesh&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>If you follow me on <a href="http://www.twitter.com/mesh/">twitter</a>, then you may have noticed that I have been working on a white-paper laying out the roadmap and strategy for the Flash runtimes (Flash Player and Adobe AIR). The white-paper is going through internal review now, and should be available in the next 7 to 10 days. </p>
<p>As part of the release of the white-paper, I, along with <a href="http://www.leebrimelow.com/?p=3261">Lee Brimelow</a>, and <a href="http://www.bytearray.org/">Thibault Imbert</a> will be spending two weeks in Europe meeting with the Flash community and laying out Adobe&#8217;s vision and strategy for the Flash runtimes. This will be a good opportunity to speak directly with Adobe, ask questions, and general discuss recent changes around the Flash Player.</p>
<p>Here are the cities we will be visiting. Click through the links to find more information and to register for the events.</p>
<ul>
<li><a href="http://flashupdateparis.eventbrite.com/">February 22 : Paris</a></li>
<li><a href="http://www.lfpug.com/23rd-february-2012-23022012/">February 23 : London</a></li>
<li><a href="http://www.fitc.ca/events/presentations/presentation.cfm?event=125&#038;presentation_id=1783">February 26 : FITC Amsterdam</a></li>
<li><a href="http://www.flexughh.de/2012/01/18/future-of-flex-flash/">February 29 : Hamburg</a></li>
<li><a href="http://augportugal.eventbrite.com/">March 02 : Lisbon</a></li>
</ul>
<p>In addition to discussing the Flash roadmap, we will be showing off the latest Flash and Adobe AIR content, give some sneak peaks on upcoming releases, and setting aside plenty of time for open discussions and Q&#038;A.</p>
<p>The Flex team will be in Europe at the same time, discussing the future of Adobe Flex under the Apache organization. You can find information on the Flex tour <a href="http://blogs.adobe.com/flex/2012/02/flex-user-group-2012-tour-european-dates.html">here</a>.</p>
<p>We plan similar tours over the next couple of months for North and South America, and Asia. Ill post more info here once we have more details.</p>
<img src="http://feeds.feedburner.com/~r/MikeChambers/~4/ShldyGlS-Fg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.mikechambers.com/blog/2012/02/13/in-europe-to-discuss-flash-roadmap/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.mikechambers.com/blog/2012/02/13/in-europe-to-discuss-flash-roadmap/</feedburner:origLink></item>
		<item>
		<title>Clarifications on Flash Player for Mobile Browsers, the Flash Platform, and the Future of Flash</title>
		<link>http://feedproxy.google.com/~r/MikeChambers/~3/XAp2ycnpcTk/</link>
		<comments>http://www.mikechambers.com/blog/2011/11/11/clarifications-on-flash-player-for-mobile-browsers-the-flash-platform-and-the-future-of-flash/#comments</comments>
		<pubDate>Fri, 11 Nov 2011 20:32:18 +0000</pubDate>
		<dc:creator>mikechambers</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.mikechambers.com/blog/?p=2451</guid>
		<description><![CDATA[I have worked with Flash and been part of the Flash community for about 12 or 13 years (over 10 of those with Macromedia and Adobe). Over that time there have been a lot of ups and down, but I think that the past couple of days have been some of the most difficult of [...]]]></description>
				<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.mikechambers.com%2Fblog%2F2011%2F11%2F11%2Fclarifications-on-flash-player-for-mobile-browsers-the-flash-platform-and-the-future-of-flash%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.mikechambers.com%2Fblog%2F2011%2F11%2F11%2Fclarifications-on-flash-player-for-mobile-browsers-the-flash-platform-and-the-future-of-flash%2F&amp;source=mesh&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>I have worked with Flash and been part of the Flash community for about 12 or 13 years (over 10 of those with Macromedia and Adobe). Over that time there have been a lot of ups and down, but I think that the past couple of days have been some of the most difficult of my career. I wanted to make a post which will hopefully clarify some of the news from the past couple of days, and provide some more context around what is going on.<br />
<span id="more-2451"></span><br />
First, and foremost, a couple of days ago Adobe <a href="http://blogs.adobe.com/conversations/2011/11/flash-focus.html">announced</a> the following:</p>
<ol>
<li>We are focusing work around the Flash Platform on:<br/>
<ul>
<li>Mobile Applications created with Adobe AIR.</li>
<li>Expressive content (particularly games and video) in the browser on the desktop via the Flash Player.</li>
</ul>
</li>
<li>We are further increasing the amount of resources (both money and engineer) toward HTML5 tools, solutions and browsers.</li>
<li>We are no longer going to be actively developing the Flash Player for Mobile Browsers.</li>
</ol>
<p>It is this last point which received the most attention, caused the most confusion, and essentially overshadowed all of the other information. Given the very public recent history of the Flash Player on devices this was understandable. However, it is clear that we did not do a good job of communicating why we are are making this shift in strategy. I know how frustrating this has been for the Flash community, and for that I want to apologize. Our goal was to be very clear about WHAT we were doing, but in doing so, we didn&#8217;t pay enough attention to explaining WHY we were doing it.</p>
<p>So, please bear with me as this may up being a long post, but I want to talk about the why, as well as discuss what we see as the role of Flash on the web (especially in relation to HTML5).</p>
<p>First, I want to make it very clear that we are continuing to work on Adobe AIR for mobile applications, and have seen an increasing number of successful applications created with Adobe AIR. What we are halting is further development on the Flash Player plugin for mobile browsers. We will continue to provide critical bug fixes and security updates for existing device configuration, as well as continue to distribute the current player. At the same time, we are further increasing our investment (both in resources and engineers) in HTML5. I am not going to go into too much detail on this today, but, in general, we are shifting some resources from the Flash Platform and towards HTML5.</p>
<p>The decision to stop development of the Flash Player plugin for mobile browsers was part of a larger strategic shift at Adobe, one which includes a greater shift in focus toward HTML5, as well as the <a href="http://blogs.adobe.com/conversations/2011/11/adobe-creative-cloud-and-adobe-creative-suite-new-choices-for-customers.html">Adobe Creative Cloud</a> and the services that it provides. I am not going to go into detail on that today (I&#8217;ll save that for another post), but you can get in-depth information on Adobe&#8217;s strategy as a company by watching the Financial Analyst meeting (<a href="http://www.adobe.com/aboutadobe/pressroom/pressreleases/201111/110811AdobeFinancialAnalystMeeting.html">summary</a>, <a href="http://www.adobe.com/aboutadobe/invrelations/2011_analyst_mtg/2011analystmeeting.html">videos</a>) from a couple of days ago (it is long, but worth it).</p>
<h2>Why did Adobe Decide to no longer develop the Flash Player for Mobile Browsers?</h2>
<p>Considering how politically charged the issue has been, the decision to stop development of the Flash Player for Mobile Browsers was not an easy decision. However, at the end of the day, there were a number of items that made it clear that putting resources towards its continued development would not be the best use of resources.</p>
<h3>The Flash Player was not going to achieve the same ubiquity on mobile as it has on the desktop</h3>
<p>This one should be pretty apparent, but given the fragmentation of the mobile market, and the fact that one of the leading mobile platforms (Apple&#8217;s iOS) was not going to allow the Flash Player in the browser, the Flash Player was not on track to reach anywhere near the ubiquity of the Flash Player on desktops.</p>
<p>This effectively meant that if you wanted to use Flash to deliver a rich web experience in the browser on mobile devices you would have to provide both a Flash based, as well as HTML5 based solution. Given the strong support for HTML5 across modern mobile devices, it simply made more sense to create an HTML5 based solution. Now, there are some exceptions to this, especially around advanced video content, but it is very clear that HTML5 is the solution to turn to if you want to provide a richer browser based experience that works across browsers on mobile devices.</p>
<p>Just to be very clear on this. No matter what we did, the Flash Player was not going to be available on Apple&#8217;s iOS anytime in the foreseeable future.</p>
<h3>Ubiquity of HTML5 on mobile browsers</h3>
<p>Related to the point above, HTML5 has very strong support on modern mobile devices and tablets. Indeed, on mobile devices, it has a level of ubiquity similar to what the Flash Player has on the desktop. While performance and implementations haven&#8217;t always been great or consistent across devices, they have continued to improve at a pretty dramatic rate (just look at the insane Canvas performance increases between iOS 4 and 5).</p>
<p>This new generation of smart phones and tablets (ushered in by the original Apple iPhone) are only a couple of years old. Because of this, the rendering engines deployed on these devices (most WebKit based) were all also relatively new and modern. The end result is that when developing for mobile devices and tablets today, you don&#8217;t have to deal with legacy browsers as you do on the desktop.</p>
<p>On mobile devices HTML5 provides a similar level of ubiquity that the Flash Player provides on the desktop. It is the best technology for creating and deploying rich content to the browser across mobile platforms.</p>
<p>Our goal has always been to obtain the same level of ubiquity for the Flash Player on mobile browsers, but, at the end of the day, it is something that did not, and was not going to happen.</p>
<h3>Differences in how users consume rich content on mobile devices compared to the desktop</h3>
<p>On the desktop, users are used to consuming rich content (such as games and applications) via both the browser and native applications. However, on mobile devices users are much more likely to look exclusively toward applications for consuming rich content. The mobile platforms make it very easy to discover new content and applications by providing tight integration between the app stores (Apple App Store, Android Marketplace, etc..) and the mobile operating system. In general, users do not look to the web on mobile devices for finding and consuming rich content (such as games and applications).</p>
<p>There are a number of reasons for this, including:</p>
<ul>
<li>Differences in screen sizes, resolution and interaction models between mobile devices and desktop PCs</li>
<li>Generally slower, and higher latency network connections (which is often metered) on mobile devices, which makes it cumbersome, sometimes expensive, and sometimes impossible to repeatedly load rich content from the web on demand.</li>
<li>The tight integration with the underlying operating systems that native applications provide.</li>
<li>The tight integration between mobile app stores and the mobile operating systems, which removes most of the friction for discovering new content.</li>
</ul>
<p>When a user wants to play a game on a mobile device they turn to the app store for their platform. This makes it very easy for them to discover and install new content. This content can then be quickly accessed regardless of their network connectivity.</p>
<p>Essentially, users&#8217; preferences to consume rich content on mobile devices via applications means that there is not as much need or demand for the Flash Player on mobile devices as there is on the desktop.</p>
<h3>Scalability of developing plugins for mobile browsers</h3>
<p>Developing the Flash Player for mobile browsers has proven to require much more resources than we anticipated. When building the player for desktop browsers, we can target well defined plugin APIs provided by the browsers. While we do have close relationships will all of the browser vendors (including Google, Apple, Firefox, Microsoft), as a general rule we can do most of our development using the existing APIs.</p>
<p>However, in the mobile ecosystem, we have to work very closely with other companies engineers on a number of levels:</p>
<ol>
<li>Mobile Operating System Vendors (such as Google and RIM)</li>
<li>Hardware Device Manufacturers (such as Motorola and Samsung)</li>
<li>Component Manufacturers (such as NVIDIA)</li>
</ol>
<p>While we have good relationships on all levels of this ecosystem, having to do specific work for different combinations of OS, Hardware and event components has taken a significant amount of resources. For each new device, browser and operating system released, the resources required to develop, test and maintain the Flash Player also increases. This is something that we realized is simply not scalable or sustainable.</p>
<p>I have seen a couple of questions asking how Adobe AIR is different. There are a couple of differences which make AIR development significantly less resource intensive, including a more well defined API that we can target, as well as not needing to worry about differences in browsers or new browser versions. Ultimately though, developers are building successful applications with Adobe AIR, and thus it makes sense for us to continue to invest in it.</p>
<h3>Shifting some Resources from Flash to HTML5</h3>
<p>Finally, given the growth of HTML5 on both mobile and desktop browsers, we decided to more evenly balance our resources dedicate between Flash and HTML5.</p>
<p>Halting development on the Flash Player for mobile devices frees up resources for HTML5 development (tooling, frameworks, browsers).</p>
<p>I understand that not everyone may not agree with all of the conclusions drawn above. However, given these points, along with the increasing complexity and costs of developing the Flash Player for mobile browsers, we decided that further development was not the best use of our engineering resources.</p>
<h2>What does this mean for the Flash Platform in General?</h2>
<p>While there was some frustration around our dropping development of the Flash Player for mobile browsers, the main thing I saw was concern and confusion about how this would affect the Flash Platform as a whole. Were we still committed to it? Would we stop developing the Flash Player for the desktop? Is Flash really dead?</p>
<p>So, just to be very clear, contrary to what many have declared, Flash is not dead. It&#8217;s role and focus has shifted but we feel that it still fills important roles both on the web and mobile platforms.</p>
<h3>Adobe AIR</h3>
<p>We are continuing to develop Adobe AIR for both the desktop and mobile devices. Indeed, we have seen wide adoption of Adobe AIR for creating mobile applications and there have been a number of blockbuster mobile applications created using Adobe AIR. Some recent examples of applications created for mobile devices using Adobe AIR are <a href="http://amanita-design.net/games/machinarium.html">Machinarium</a>, <a href="https://market.android.com/details?id=air.WatchESPN&#038;hl=en">Watch ESPN</a> and my personal favorite, <a href="http://tweethunt.net/">tweet hunt</a>.</p>
<h3>Flash Player for Desktop Browsers</h3>
<p>We feel that Flash continues to play a vital role of enabling features and functionality on the web that are not otherwise possible. As such, we have a long term commitment to the Flash Player on desktops, and are actively working on the next Flash Player version.</p>
<p>Of course, with the growth and continued improved browser support of HTML5, the role of Flash will change. We feel that for the foreseeable future, Flash is particularly strong in delivering advanced video, as well as providing a robust, and graphically rich gaming platform. We are focusing our Flash Player efforts around these areas.</p>
<p>Some of the features currently being worked on for the Flash Player:</p>
<ul>
<li><a href="http://www.leebrimelow.com/?p=3133">Mouse Lock Support</a></li>
<li>ActionScript Workers / Concurrency APIs</li>
<li>Telemetry / <a href="http://tv.adobe.com/watch/max-2011-sneak-peeks/max-2011-sneak-peek-monocle/">Monocle</a> Support</li>
<li>Audio API improvements, especially for better handling of low latency audio</li>
<li>New Datatypes for ActionScript 3</li>
</ul>
<p>We are also making some long term, and significant architectural changes, which will benefit the Flash Player (and developers) for years to come. This is still in the early stages, and we will have more information in the coming months.</p>
<h3>Adobe Flex</h3>
<p>I know there are a lot of questions around Adobe Flex. We are writing a separate blog post focused just on Flex which should be up shortly. I will update this post when it is live.</p>
<p>Update : The Flex Team has posted more info <a href="http://blogs.adobe.com/flex/2011/11/your-questions-about-flex.html">here</a>.</p>
<h3>Flash Professional</h3>
<p>I discussed the future of Flash Professional in a separate <a href="http://www.mikechambers.com/blog/2011/11/10/flash-professional-and-the-future/">blog post</a> yesterday, so I am not going go into detail on it here. As I stated yesterday, we are actively working on the next version of Flash Professional and have a long term commitment to it’s continued development.</p>
<h2>HTML5 and Flash</h2>
<p>Finally, I want to touch on some of my thoughts on Flash and HTML5.</p>
<p>From its beginning, Flash&#8217;s primary role has been to enable things on the web that were not otherwise possible. Over its history, this has included things such as animation, vector graphics, sound, video, webcam and microphone support, and more. Because of its ubiquity and fast rate of adoption, it was uniquely suited to quickly introduce new features to the web.</p>
<p>Overtime, many of these Flash features were added to the browser. Time and time again, as the browsers matured things which were once done exclusively in Flash, were eventually done in the browser. The Flash Player would then add new features and the cycle would continue. This has happened over the entire history of Flash, and I expect, will continue to happen. This was something that was good for users (who got richer content earlier), Adobe (who got to sell tools and technologies), and browser vendors (who could focus their efforts on features which the Flash Player had proven to be popular and viable). </p>
<p>The key point is this. If a Flash feature is successful, it will eventually be integrated into the browser, and developers and users will access it more and more via the browser and not Flash.</p>
<p>With the renewed competition in the browser market and the subsequent acceleration of new HTML5 features being added to browsers, the number of things possible in the browser has dramatically increased. This includes a lot of overlap with features that were once exclusive to the Flash Player. While it will still be a while before HTML5 / CSS3 features have the same ubiquity as the Flash Player currently has, the trend is very clear. A lot of the things that you have done via Flash in the past, will increasingly be done via HTML5 and CSS3 directly in the browser.</p>
<p>I think that is important enough that I should repeat it.</p>
<p>A lot of the things that you have done via Flash in the past, will increasingly be done via HTML5 and CSS3 directly in the browser.</p>
<p>I know that this is a bit scary for a lot of people who have made their career working with Flash. I completely get that. However, I think it is a HUGE opportunity for the Flash community. As browser support for richer content and motion graphics improves, so will demand for designers and developers who have experience working with motion graphics on the web. The Flash community has been doing this type of work on the web for over a decade and is uniquely qualified to fill demand for similar work in the browser. I don&#8217;t think it is a coincidence that some of the most cutting edge motion graphics work being done in HTML5 today is being done by developers and agencies with extensive experience in Flash (such as <a href="http://gskinner.com/">Grant Skinner</a>, <a href="http://automatastudios.com/the-endless-mural/">Branden Hall</a>, <a href="http://www.bigspaceship.com/">Big Spaceship</a>, etc&#8230;).</p>
<p>I am not suggesting that all Flash content should or will be done in HTML5. You have to look at each project on a case by case basis and make a decision based on development costs, target platforms and user experience. Regardless, your customers are going to ask about HTML5, and you should put yourself in a position to best meet their needs, regardless of technology or platform.</p>
<p>This has ended up much longer than I had expected, but I wanted to share a lot of stuff that has been going through my head over the past couple of days. Again, I understand the frustration about how all of this was originally communicated, and I want to apologize for that. I think it is pretty clear that we did not communicate the news and our views around Flash as clearly as we should have.</p>
<p>Please post and questions / comments below. Please keep all comments constructive and on topic (or else they may be moderated).</p>
<img src="http://feeds.feedburner.com/~r/MikeChambers/~4/XAp2ycnpcTk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.mikechambers.com/blog/2011/11/11/clarifications-on-flash-player-for-mobile-browsers-the-flash-platform-and-the-future-of-flash/feed/</wfw:commentRss>
		<slash:comments>178</slash:comments>
		<feedburner:origLink>http://www.mikechambers.com/blog/2011/11/11/clarifications-on-flash-player-for-mobile-browsers-the-flash-platform-and-the-future-of-flash/</feedburner:origLink></item>
		<item>
		<title>Flash Professional and the Future</title>
		<link>http://feedproxy.google.com/~r/MikeChambers/~3/BqIF7c9aCsY/</link>
		<comments>http://www.mikechambers.com/blog/2011/11/10/flash-professional-and-the-future/#comments</comments>
		<pubDate>Fri, 11 Nov 2011 00:31:59 +0000</pubDate>
		<dc:creator>mikechambers</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.mikechambers.com/blog/?p=2439</guid>
		<description><![CDATA[Yesterday was probably one of the most overwhelming days of my entire career. First, Adobe informed developers that we are going to stop developing the Flash Player for mobile browsers, then news came out that there were layoffs at Adobe, and finally, Adobe held a financial analyst meeting where we spelled out the Creative Cloud, [...]]]></description>
				<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.mikechambers.com%2Fblog%2F2011%2F11%2F10%2Fflash-professional-and-the-future%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.mikechambers.com%2Fblog%2F2011%2F11%2F10%2Fflash-professional-and-the-future%2F&amp;source=mesh&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Yesterday was probably one of the most overwhelming days of my entire career. First, Adobe <a href="http://blogs.adobe.com/conversations/2011/11/flash-focus.html">informed</a> developers that we are going to stop developing the Flash Player for mobile browsers, then news came out that there were layoffs at Adobe, and finally, Adobe held a financial analyst meeting where we spelled out the <a href="http://blogs.adobe.com/conversations/2011/11/adobe-creative-cloud-and-adobe-creative-suite-new-choices-for-customers.html">Creative Cloud</a>, and the fundamental strategic shift Adobe is making.</p>
<p>All of this news is a lot to digest at once, and I know that there are a lot of questions and concerns from the community about what all of this means. I am working on another blog post which will address this from the Flash community&#8217;s standpoint, but I wanted to make a quick post and debunk a rumor that has been going around about the future of Flash Professional.<br />
<span id="more-2439"></span><br />
I have seen a couple of versions of it, but basically, the rumor is that the entire Flash Authoring team was laid off and that we are no longer developing Flash Professional. </p>
<p>Both of these rumors are false.</p>
<p>We are actively working on the next version of Flash Professional and have a long term commitment to it&#8217;s continued development.</p>
<p>While there were layoffs on the team (as there were on a lot of other teams), we still have a team actively working on future versions of the tool. The Flash Professional team continues to have offices around the world, just as they did prior to the announcements. The core team, including product management and engineering members, continue and will continue to be based in San Francisco.</p>
<p>I can&#8217;t go into a ton of detail about all of the new features and improvements included in the next version of Flash Professional (we gave a sneak of some of them at FOTB Brighton last month), but some of the new features include:</p>
<ul>
<li>SpriteSheet export for both <a href="http://www.starling-framework.org/">Starling</a> and HTML5 / Canvas. Lee Brimelow has a sneak <a href="http://www.leebrimelow.com/?p=3104">here</a>.</li>
<li>Support for packaging and exporting AIR applications for mobile that leverage native extensions.</li>
<li>Mobile prototyping and simulation for AIR apps.</li>
</ul>
<p>In addition to working on new features, we are also in the process of a pretty fundamental re-factoring and modernization of the tool&#8217;s code base, which, among other things includes a de-carbonization of the tool on the mac platform. This is longer term project, being done in parallel with CS 6.0 development.</p>
<p>I am going to be speaking at FITC Tokyo in a couple of weeks, and will be showing some of the latest stuff we have been working on in Flash Professional.</p>
<p>I understand the confusion and frustration around everything that has been going on, and I know how difficult the past couple of days have been (probably the most difficult of my entire career). As I mentioned above, I am working on a broader blog post to discuss some of the news from yesterday, which will hopefully provide more information and clarification around all of the changes going on.</p>
<p>Please post any questions in the comments, and please keep comments on topic.</p>
<p>UPDATE : Just a quick reminder, but please keep comments on topic (about Flash Professional). I know there are a lot of questions about just about everything Flash, and I am working on a post to address them.</p>
<p>UPDATE : Added some clarification around team composition.</p>
<img src="http://feeds.feedburner.com/~r/MikeChambers/~4/BqIF7c9aCsY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.mikechambers.com/blog/2011/11/10/flash-professional-and-the-future/feed/</wfw:commentRss>
		<slash:comments>52</slash:comments>
		<feedburner:origLink>http://www.mikechambers.com/blog/2011/11/10/flash-professional-and-the-future/</feedburner:origLink></item>
		<item>
		<title>HTML5 Camp Tokyo : State of the Web Slides</title>
		<link>http://feedproxy.google.com/~r/MikeChambers/~3/C1525hdqfzY/</link>
		<comments>http://www.mikechambers.com/blog/2011/08/02/html5-camp-tokyo-state-of-the-web-slides/#comments</comments>
		<pubDate>Wed, 03 Aug 2011 05:06:57 +0000</pubDate>
		<dc:creator>mikechambers</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.mikechambers.com/blog/?p=2429</guid>
		<description><![CDATA[I am in Tokyo for the week and just spoke at the Tokyo HTML5 Camp, giving a talk on some of the lessons learned from working on theexpressiveweb.com, and talking about Adobe and HTML. I have posted the slides with notes online. &#160; Download Slides (26mb pdf). If you have any questions or suggestions please [...]]]></description>
				<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.mikechambers.com%2Fblog%2F2011%2F08%2F02%2Fhtml5-camp-tokyo-state-of-the-web-slides%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.mikechambers.com%2Fblog%2F2011%2F08%2F02%2Fhtml5-camp-tokyo-state-of-the-web-slides%2F&amp;source=mesh&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>I am in Tokyo for the week and just spoke at the <a href="http://www.adobe.com/jp/joc/adc/meetup/round02/">Tokyo HTML5 Camp</a>, giving a talk on some of the lessons learned from working on theexpressiveweb.com, and talking about Adobe and HTML. I have posted the slides with notes online.</p>
<div style="text-align:center"><a href="/html5/presentations/state_of_the_web.pdf"><img src="/html5/presentations/state_of_the_web_title.png" width="500" height="281" style="border:1px solid black; moz-box-shadow: 3px 3px 4px rgba(0,0,0,0.7);-webkit-box-shadow: 3px 3px 4px rgba(0,0,0,0.7);box-shadow: 3px 3px 4px rgba(0,0,0,0.7);" /></a></div>
<p>&nbsp;</p>
<p><a href="/html5/presentations/state_of_the_web.pdf">Download Slides</a> (26mb pdf).</p>
<p>If you have any questions or suggestions please post them in the comments.</p>
<img src="http://feeds.feedburner.com/~r/MikeChambers/~4/C1525hdqfzY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.mikechambers.com/blog/2011/08/02/html5-camp-tokyo-state-of-the-web-slides/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.mikechambers.com/blog/2011/08/02/html5-camp-tokyo-state-of-the-web-slides/</feedburner:origLink></item>
		<item>
		<title>Timing issues when animating with CSS3 Transitions</title>
		<link>http://feedproxy.google.com/~r/MikeChambers/~3/p4G0AV_rCuo/</link>
		<comments>http://www.mikechambers.com/blog/2011/07/20/timing-issues-when-animating-with-css3-transitions/#comments</comments>
		<pubDate>Wed, 20 Jul 2011 19:54:44 +0000</pubDate>
		<dc:creator>mikechambers</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[csstransitions]]></category>
		<category><![CDATA[example]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.mikechambers.com/blog/?p=2419</guid>
		<description><![CDATA[I have been playing around a lot lately with motion graphics created using HTML5 and / or CSS3. One of my favorite new features is CSS Transitions, which makes it super simple to animate element properties between two states. However, I ran into a gotcha the other day, and wanted to make a quick blog [...]]]></description>
				<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.mikechambers.com%2Fblog%2F2011%2F07%2F20%2Ftiming-issues-when-animating-with-css3-transitions%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.mikechambers.com%2Fblog%2F2011%2F07%2F20%2Ftiming-issues-when-animating-with-css3-transitions%2F&amp;source=mesh&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>I have been playing around a lot lately with motion graphics created using HTML5 and / or CSS3. One of my favorite new features is <a href="http://www.w3.org/TR/css3-transitions/">CSS Transitions</a>, which makes it super simple to animate element properties between two states.</p>
<p>However, I ran into a gotcha the other day, and wanted to make a quick blog post in case anyone else runs into it in the future. Basically, if you change a property that a CSS Transition is monitoring in the same script loop that you add the element to the DOM, the CSS Transition will not take affect. Instead, the element will be drawn with the new properties, and will not animate to those properties.</p>
<p>Here is an example that shows the issue, as well as how to fix it.<br />
<span id="more-2419"></span><br />
First the relevant styles for the CSS Transition:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #6666ff;">.box</span>
<span style="color: #00AA00;">&#123;</span>
	<span style="color: #808080; font-style: italic;">/*...*/</span>
	-webkit-transition<span style="color: #00AA00;">:</span> all 0.7s ease<span style="color: #00AA00;">;</span>
	-moz-transition<span style="color: #00AA00;">:</span> all 0.7s ease<span style="color: #00AA00;">;</span>
	-o-transition<span style="color: #00AA00;">:</span> all 0.7s ease<span style="color: #00AA00;">;</span>
	transition<span style="color: #00AA00;">:</span> all 0.7s ease<span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<div style="text-align:center;"><iframe src="http://mikechambers.com/html5/css/CSS3TransitionsTiming/index.html" width="520" height="300"></iframe></div>
<p>&nbsp;</p>
<p>Notice how when you click the example the cirlce just appears on the right, instead of appearing on the left, and then animating to the right as it should.</p>
<p>Here is the relevant code that creates the div and updates it position:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> onMouseClick<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>box<span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #006600; font-style: italic;">//remove existing box from dom</span>
		document.<span style="color: #660066;">body</span>.<span style="color: #660066;">removeChild</span><span style="color: #009900;">&#40;</span>box<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">//create the div</span>
	box <span style="color: #339933;">=</span> document.<span style="color: #660066;">createElement</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	box.<span style="color: #660066;">className</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;box&quot;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">//add to dom</span>
	document.<span style="color: #660066;">body</span>.<span style="color: #660066;">appendChild</span><span style="color: #009900;">&#40;</span>box<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">//position in middle / left of screen</span>
	box.<span style="color: #660066;">style</span>.<span style="color: #660066;">left</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;10px&quot;</span><span style="color: #339933;">;</span>
	box.<span style="color: #660066;">style</span>.<span style="color: #660066;">top</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>window.<span style="color: #660066;">innerHeight</span> <span style="color: #339933;">/</span> <span style="color: #CC0000;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;px&quot;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">//set position we want div to animate to (using the CSS Transition)</span>
	<span style="color: #006600; font-style: italic;">//NOTE : This will not animate, but will instead just be moved / drawn</span>
	<span style="color: #006600; font-style: italic;">//in the final position</span>
	<span style="color: #006600; font-style: italic;">//need to delay this call by 20 ms</span>
	box.<span style="color: #660066;">style</span>.<span style="color: #660066;">left</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>window.<span style="color: #660066;">innerWidth</span> <span style="color: #339933;">-</span> <span style="color: #CC0000;">100</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;px&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><a href="https://github.com/mikechambers/ExamplesByMesh/tree/master/CSS/CSS3TransitionsTiming">View / Download Code</a></p>
<p>The solution, is to delay changing the properties that you want to animate by a short time interval. I have found that for most browsers a delay of as little as one second is enough to allow the CSS transition to take effect. However, for Firefox, the first time an element is added, I had to add a delay of 20ms in order to ensure the element animated correctly. However, subsequent animations could use a 1 ms delay. I am not sure if the delay interval is browser specific, or is related to how fast the users CPU is. </p>
<p>Setting the delay can be done using setTimeout.</p>
<p>Here is the update example, and code:</p>
<div style="text-align:center;"><iframe src="http://mikechambers.com/html5/css/CSS3TransitionsTiming/index_b.html" width="520" height="300"></iframe></div>
<p>&nbsp;</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> onMouseClick<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>box<span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #006600; font-style: italic;">//remove existing div from dom</span>
		document.<span style="color: #660066;">body</span>.<span style="color: #660066;">removeChild</span><span style="color: #009900;">&#40;</span>box<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">//create the div</span>
	box <span style="color: #339933;">=</span> document.<span style="color: #660066;">createElement</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	box.<span style="color: #660066;">className</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;box&quot;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">//add to dom</span>
	document.<span style="color: #660066;">body</span>.<span style="color: #660066;">appendChild</span><span style="color: #009900;">&#40;</span>box<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">//position in middle / left of screen</span>
	box.<span style="color: #660066;">style</span>.<span style="color: #660066;">left</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;10px&quot;</span><span style="color: #339933;">;</span>
	box.<span style="color: #660066;">style</span>.<span style="color: #660066;">top</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>window.<span style="color: #660066;">innerHeight</span> <span style="color: #339933;">/</span> <span style="color: #CC0000;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;px&quot;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">//delay updating position so it will animate correctly</span>
	setTimeout<span style="color: #009900;">&#40;</span>moveBox<span style="color: #339933;">,</span> <span style="color: #CC0000;">20</span><span style="color: #339933;">,</span> box<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> moveBox<span style="color: #009900;">&#40;</span>box<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	box.<span style="color: #660066;">style</span>.<span style="color: #660066;">left</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>window.<span style="color: #660066;">innerWidth</span> <span style="color: #339933;">-</span> <span style="color: #CC0000;">100</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;px&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><a href="https://github.com/mikechambers/ExamplesByMesh/tree/master/CSS/CSS3TransitionsTiming">View / Download Code</a></p>
<p>The only change, is that we moved the code to update the divs position to its own function. This allows us to then use setTimeout to delay the code from being called for 1 ms. By doing this, the div will be added to the dom, and positioned in the correct initial position, and then animate to its new position.</p>
<p>Here is another example that uses setTimeout to animate newly created DIVs.</p>
<div style="text-align:center;"><iframe src="http://mikechambers.com/html5/css/CSS3TransitionsAnimation/" width="520" height="400"></iframe></div>
<p>&nbsp;</p>
<p><a href="https://github.com/mikechambers/ExamplesByMesh/tree/master/CSS/CSS3TransitionsAnimation">View / Download Code</a></p>
<p>Post in the comments if you have any questions or suggestions.</p>
<img src="http://feeds.feedburner.com/~r/MikeChambers/~4/p4G0AV_rCuo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.mikechambers.com/blog/2011/07/20/timing-issues-when-animating-with-css3-transitions/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://www.mikechambers.com/blog/2011/07/20/timing-issues-when-animating-with-css3-transitions/</feedburner:origLink></item>
		<item>
		<title>JTV Live : A Google Chrome Extension for Justin.tv</title>
		<link>http://feedproxy.google.com/~r/MikeChambers/~3/E-NmzjFFr7s/</link>
		<comments>http://www.mikechambers.com/blog/2011/07/06/jtv-live-a-google-chrome-extension-for-justin-tv/#comments</comments>
		<pubDate>Wed, 06 Jul 2011 16:48:39 +0000</pubDate>
		<dc:creator>mikechambers</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[googlechrome]]></category>
		<category><![CDATA[jtvlive]]></category>
		<category><![CDATA[justin.tv]]></category>
		<category><![CDATA[streaming]]></category>

		<guid isPermaLink="false">http://www.mikechambers.com/blog/?p=2404</guid>
		<description><![CDATA[UPDATE : June 6, 2012 : Due to a change in the Justin.tv APIs, this extension no longer works with Twitch.tv accounts. I have created a new extension, called Twitch Live which works with Twitch.tv accounts. Sorry about the hassle. Since I started playing Starcraft 2, I have become a pretty big fan of e-sports, [...]]]></description>
				<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.mikechambers.com%2Fblog%2F2011%2F07%2F06%2Fjtv-live-a-google-chrome-extension-for-justin-tv%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.mikechambers.com%2Fblog%2F2011%2F07%2F06%2Fjtv-live-a-google-chrome-extension-for-justin-tv%2F&amp;source=mesh&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>UPDATE : June 6, 2012 : Due to a change in the Justin.tv APIs, this extension no longer works with Twitch.tv accounts. I have created a new extension, called <a href="http://bit.ly/12y53wj">Twitch Live</a> which works with Twitch.tv accounts. Sorry about the hassle.</p>
<p>Since I started playing <a href="http://us.battle.net/sc2/en/">Starcraft 2</a>, I have become a pretty big fan of e-sports, and in particular, of watching streams of games. The most popular site for streaming is <a href="http://justin.tv">Justin.tv</a>, where you can find tons of high level gamers streaming their gameplay. However, Justin.tv&#8217;s site does not make it easy to find out which of your favorite streams are live at any particular time.</p>
<p>So, to solve this problem, I created <a href="https://chrome.google.com/webstore/detail/eojkhidnkbolpneigllnelngopamnafa">JTV Live</a>, a Google Chrome extension for helping you track which of your favorite Justin.tv streams are live.<br />
<span id="more-2404"></span></p>
<div style="text-align:center;"><a href="http://www.flickr.com/photos/mikechambers/5909364802/" title="JTV Live by mike.chambers, on Flickr"><img src="http://farm6.static.flickr.com/5152/5909364802_c90fdd7798.jpg" width="400" height="275" alt="JTV Live" style="border:1px solid black; moz-box-shadow: 3px 3px 4px rgba(0,0,0,0.7);-webkit-box-shadow: 3px 3px 4px rgba(0,0,0,0.7);box-shadow: 3px 3px 4px rgba(0,0,0,0.7);"></a></div>
<p>&nbsp;</p>
<div style="text-align:center; font-weight:bold;"><a href="https://chrome.google.com/webstore/detail/eojkhidnkbolpneigllnelngopamnafa">Download JTV Live from the Chrome Web Store</a>.</div>
<p>&nbsp;</p>
<p>Using the extension is pretty simple. Once you install it, a small TV / Monitor icon will be placed in the top right of your browser bar. Right click on the icon, select options, and enter your Justin.tv user name.</p>
<p>Once you have done this, you can click the icon, and it will show you a list of which of your favorite Justin.tv streams are currently online as well as how many people are viewing each stream.</p>
<p>Big thanks to <a href="http://twitter.com/griffithben">Ben Griffith</a> for working on the design of the extension and creating the icon.</p>
<p>If you run into any issues, or have any suggestions please post them in the comments.</p>
<img src="http://feeds.feedburner.com/~r/MikeChambers/~4/E-NmzjFFr7s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.mikechambers.com/blog/2011/07/06/jtv-live-a-google-chrome-extension-for-justin-tv/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		<feedburner:origLink>http://www.mikechambers.com/blog/2011/07/06/jtv-live-a-google-chrome-extension-for-justin-tv/</feedburner:origLink></item>
		<item>
		<title>Streaming your Desktop on Mac OS X</title>
		<link>http://feedproxy.google.com/~r/MikeChambers/~3/QA8I1PNRIqc/</link>
		<comments>http://www.mikechambers.com/blog/2011/05/29/setting-up-desktop-streaming-on-mac-os-x/#comments</comments>
		<pubDate>Mon, 30 May 2011 00:46:32 +0000</pubDate>
		<dc:creator>mikechambers</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[fmle]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[streaming]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.mikechambers.com/blog/?p=2382</guid>
		<description><![CDATA[I have been playing a lot of Starcaft 2 lately, and really getting into the entire community. One part of the community that I recently discovered has been live streams of games (some from pros) via sites like justin.tv and ustream.com. There are plenty of articles online talking about how to stream your desktop on [...]]]></description>
				<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.mikechambers.com%2Fblog%2F2011%2F05%2F29%2Fsetting-up-desktop-streaming-on-mac-os-x%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.mikechambers.com%2Fblog%2F2011%2F05%2F29%2Fsetting-up-desktop-streaming-on-mac-os-x%2F&amp;source=mesh&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>I have been playing a lot of <a href="http://us.battle.net/sc2/en/">Starcaft 2</a> lately, and really getting into the entire <a href="http://www.reddit.com/r/starcraft">community</a>. One part of the community that I recently discovered has been live streams of games (some from pros) via sites like <a href="http://justin.tv">justin.tv</a> and <a href="http://www.ustream.tv/">ustream.com</a>. There are plenty of articles online talking about how to stream your desktop on Windows based machines, but virtually none on how to do it from a Mac. This article will show how to use Adobe Flash Media Live Encoder (and a couple of other tools) to live stream your desktop to justin.tv (although the setup would also work for other streaming sites).<br />
<span id="more-2382"></span><br />
I am going to divide the article up into a couple of sections. The first part will show how to get a basic desktop stream going, including system sound. The second section will show a more advanced sound setup that allows you to also broadcast your microphone, and audio from other apps such as skype.</p>
<h2>Basic Desktop Streaming Setup</h2>
<p>The basic setup will allow us to stream our desktop and system audio to justin.tv. This requires the following software:</p>
<ul>
<li><a href="http://www.adobe.com/products/flashmediaserver/flashmediaencoder/">Adobe Flash Media Live Encoder (FMLE) 3.2 for Mac</a> : Encodes and streams video and audio to justin.tv</li>
<li><a href="http://allocinit.com/index.php?title=CamTwist">CamTwist</a> : Used to capture desktop as a video source</li>
<li><a href="http://cycling74.com/products/soundflower/">Soundflower</a> : Utility used to capture and redirect system output</li>
<li>justin.tv config file : Only required if you are streaming to justin.tv (link provided below)</li>
</ul>
<p>The basic setup is pretty simple, and essentially requires setting up CamTwist to capture your desktop as a video source, and have Flash Media Live Encoder take that video source, combine it with the system audio, and stream it to the server (in this case justin.tv).</p>
<h3>A Note on Performance</h3>
<p>Keep in mind that encoding and broadcasting live video feeds can be very CPU intensive, and thus may require significant system resources. Depending on what you are streaming, this may affect other applications running on your system, or even the quality of the stream.</p>
<h3>Configuring CamTwist</h3>
<p>First, download and install CamTwist. Once it is installed, open it up, and under the Step 1 section, double click &#8220;Desktop&#8221; (not &#8220;Desktop+&#8221;). &#8220;Desktop+&#8221; allows you to select a specific window to broadcast, but since we are going to be broadcasting our entire desktop, we will just use the Desktop preset.</p>
<p>You can save these settings by clicking the &#8220;Save Setup&#8221; button.</p>
<p>Do not select any effects in Step 2.</p>
<p>In Step 3 make sure that &#8220;Desktop&#8221; is included and checked. In the settings window, make sure that screen is set to &#8220;Main Screen&#8221;. This ensures that only the main screen will be broadcast (which only matters if you have multiple monitors). </p>
<p>Also make sure that &#8220;Full Screen&#8221; and &#8220;Show mouse pointer (simulated)&#8221; are selected.</p>
<p>Once you have set all of these settings, you can save them by clicking the &#8220;Save Setup&#8221; button.</p>
<div style="text-align:center"><img height="364" width="600" src="/blog/images/mac_screen_broadcast/camtwist_main.png" /></div>
<p>&nbsp;</p>
<p>Now, open the preferences (<em>CamTwist &gt; Preferences</em>), and select the &#8220;General Tab&#8221;. Set the frame rate to the same frame rate you plan to encode at. I am using 24 FPS. The higher the FPS, the smoother the video, but the more bandwidth and CPU required to encode and transmit it.</p>
<p>Set video size to &#8220;Custom&#8221; and set it to your desktop resolution. In my case, I have it set to 1920 x 1200, which is my native desktop resolution. Set it to the native resolution even if you are going to broadcast at a lower resolution. We will have Adobe Flash Media Live Encoder scale the video down, as my experience has been that it does it much more efficiently than CamTwist.</p>
<div style="text-align:center"><img height="342" width="384" src="/blog/images/mac_screen_broadcast/camtwist_preferences.png" /></div>
<p>&nbsp;</p>
<p>Once you have set the preferences, close the window and restart CamTwist. Make sure the &#8220;Desktop&#8221; section is selected. You can test that everything is working by selecting <em>Tools &gt; Preview</em>, which will give you a small preview of the video being captured.</p>
<h3>Configuring Audio with Soundflower</h3>
<p>In order to capture audio, we need a way to capture the system&#8217;s audio output, and make it an input for Flash Media Live encoder. Mac OS X does not have native support for doing this, but the free Soundflower utility enabled this.</p>
<p>Soundflower is a utility that can combine multiple audio outputs and redirect them into a single audio output. We can use this to capture system audio, and pass it on to FMLE to include the audio for our video stream.</p>
<p>First, download and install <a href="http://cycling74.com/products/soundflower/">Soundflower</a>. Once it is installed, launch it. It won&#8217;t open an application window, but will add a small menu item icon (a flower) on the top right of the menu bar.</p>
<p>We need to tell OS X to direct system audio output to Soundflower. Open Sound preferences (<em>System Preferences &gt; Sound &gt; Output</em>) and select &#8220;Soundflower (2ch)&#8221;.</p>
<div style="text-align:center"><img height="482" width="668" src="/blog/images/mac_screen_broadcast/sound_settings_basic.png" /></div>
<p>&nbsp;</p>
<p>Basically, anything that you would hear through your speakers will now be directed first through Soundflower.</p>
<p>Next, click the Soundflower icon on the menu bar, and for &#8220;Soundflower (2ch)&#8221; select what you would normally have set as your system output (such as headphone, or Line-Out). This will redirect the audio through Soundflower, and pass it through your normal output so you can still hear it. However, because it is first directed through Soundflower, we can now also use that as an input source in FMLE.</p>
<div style="text-align:center"><img height="434" width="292" src="/blog/images/mac_screen_broadcast/soundflower_basic.png" /></div>
<p>&nbsp;</p>
<p>There is a lot more advanced stuff we can do with Soundflower, which we will cover later in the article.</p>
<h3>Configuring Adobe Flash Media Live Encoder</h3>
<p><a href="http://www.adobe.com/products/flashmediaserver/flashmediaencoder/">Adobe Flash Media Live Encoder</a> (FMLE) is a free tool provided by Adobe that can take a video and audio feed, and create either a VP6 or H.264 encoded video stream that can be streamed to servers and sites such as justin.tv. </p>
<p>Download and install the latest version of FMLE (this article is using version 3.2). If CamTwist is not already running, go ahead and open it. Once FMLE is installed, open it up.</p>
<p>Now, before we start changing settings, we need to first download a config file for our specific justin.tv account. This will include information specific to our account that justin.tv uses to determine which account the stream is associated with. If you are not using justin.tv, you may to skip this section, although you may need to look up docs on how to configure the stream for your specific server.</p>
<p>Log into your justin.tv account, and then visit <a href="http://www.justin.tv/broadcast/adv_other">this page</a>. At the bottom of the page is section for &#8220;Flash Media Encoder&#8221;. Click the &#8220;Config File&#8221; button. This is the XML config file for FMLE specific for your justin.tv account. Click the button and download the file to your desktop.</p>
<p><strong>Note</strong> : This file will allow anyone who has it to stream to your justin.tv account, so be careful to protect it.</p>
<p>Once you have downloaded the file, we are ready to import it into FMLE. Switch to FMLE and select <em>File &gt; Open Profile</em>. You may get a warning that some tags are not support, and defaults are being used. Just ignore this.</p>
<p>If you look in the output panel on the right side of FMLE, you should see the FMS URL set to something like: <code>rtmp://live.justin.tv/app</code>, and the stream attribute have a value similar to: <code>live_12345678_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</code>.</p>
<p>Again, this second string is specific to your account, and will allow anyone to stream to your justin.tv account. You can hide the panel it is shown in (so it wont be displayed on your stream), by selecting &#8220;Panel Options&#8221; and setting it to &#8220;Meta Data&#8221; (so the panel wont be displayed). Note that you may need to do this each time your start FMLE.</p>
<p>We are now ready to set up the encoding options for FMLE. First, we will setup the video encoding settings. Some of the settings may vary depending on your system, but I will point out where and why you might want to tweak them.</p>
<h4>FMLE : Video Settings</h4>
<p>First, in the video panel, make sure that &#8220;Video&#8221; is checked. For &#8220;Device&#8221;, select &#8220;CamTwist&#8221;. If &#8220;CamTwist&#8221; does not appear as an option, make sure that CamTwist is running and is set to broadcast the desktop. If it isn&#8217;t, start it, and then restart FMLE.</p>
<p>Once you have selected CamTwist, you can confirm that it is working by making sure &#8220;Input Video&#8221; is selected in the &#8220;Preview&#8221; panel at the top. With this selected, you should see the video feed preview of your desktop.</p>
<p>Next, we need to set the video codec we will be encoding to as well as its options. There is a choice between H.264 and VP6. I am not going to go into a discussion about which is better. In general though H.264 offers higher quality at lower bitrates, with slightly higher CPU usage, while VP6 offers lower quality, with higher bitrates and slightly lower CPU usage. For this article, I will be using H.264 to stream to the server.</p>
<p>Select &#8220;H.264&#8243; as the Format, and click the little wrench icon. This will open a panel where we can set additional setting specific to the codec.</p>
<p>Set the profile to &#8220;Main&#8221;.</p>
<p>The &#8220;Level&#8221; value will vary depending on the resolution you will be encoding at. In our case, I will be encoding at 720p (1280 x 720) at 24 FPS, so I need to set the level to &#8220;3.1&#8243;. You can find a list of levels and resolutions / FPS in the <a href="http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC#Levels">H.264 wikipedia article</a>.</p>
<p>Finally, we need to set the Keyframe Frequency. This determines how frequently keyframes (complete captures of the image) are inserted into the stream. We will use the default of &#8220;5&#8243;.</p>
<div style="text-align:center"><img height="292" width="300" src="/blog/images/mac_screen_broadcast/advanced_encoder_settings.png" /></div>
<p>&nbsp;</p>
<p>Once you have set the codec settings, click the &#8220;OK&#8221; button.</p>
<p>Back in FMLE, set the Frame Rate to &#8220;24.00&#8243; fps. Higher framerates provide smoother video, but require more CPU and bandwidth. Lower framerates provide choppier video, but require less CPU and bandwidth. I think that 24 FPS is a good middle ground, but feel free to experiment. Just remember that if you change this, you should also change it in the CamTwist preferences, so they are the same.</p>
<p>Set &#8220;Input Size&#8221; to the size that you will be broadcasting / encoding at. We do this, even though the input received from CamTwist is a higher resolution. FMLE will scale the video to the appropriate size. It has been my experience that this uses less CPU that having CamTwist do the scaling.</p>
<p>We could set input size to the full resolution of the input stream, and then have the output size as a scaled down stream. However, in my case, i have a 16:10 stream resolution which FMLE currently doesn&#8217;t support, which would result in part of the stream being chopped at the top and bottom. By having the scaling done at the Input Size, I was able to get the content scaled correctly, without having any part of the stream cropped. (If anyone has more feedback on this, please post it in the comments.).</p>
<p>Make sure that &#8220;Maintain Aspect Ratio&#8221; is also checked for &#8220;Input Size&#8221;. This prevents the video from being skewed when it is scaled.</p>
<p>Now, FMLE can encode and output multiple streams and sizes (which I believe justin.tv supports), however, we will just be broadcasting one stream.</p>
<p>Make sure the first stream is checked, and set the &#8220;Bit Rate&#8221; to &#8220;1000&#8243; kbps. This setting basically specifies how much data is included in the stream. The higher the value, the clearer the image (less compression) and the more bandwidth required. The main thing to consider when setting this is how much upstream bandwidth you have available. You can get a general idea by doing a <a href="http://www.speedtest.net">speed test</a> and looking at the upload results. On the right of the stream section in FMLE, will be an estimate of the total bandwidth required to stream at the current setting. You want to make sure that you have some buffer between what you are sending, and what your upstream bandwidth is. Otherwise, viewers of your stream may see frequent drops and stutters.</p>
<p>To start with, I would set it at 1000, test, and then move the value up (in increments of 500) until you find a good balance between bandwidth usage and video quality.</p>
<p>Set the &#8220;Output Size&#8221; to the output size you want to stream at. For this article, we will be streaming at 720p (&#8220;1280 x 720&#8243;), which is a standard HD resolution, and I feel provides a good tradeoff for providing high quality stream for the bandwidth required. Again, adjusting the resolution will affect the amount of bandwidth required for the stream.</p>
<p>You can leave both &#8220;Deinterlace&#8221; (since we are running at 720p) and &#8220;Timecode&#8221; unchecked.</p>
<h4>FMLE : Audio Settings</h4>
<p>Audio settings are a bit less involved than video settings, and mostly requires finding a balance between quality and bandwidth required.</p>
<p>Make sure that &#8220;Audio&#8221; is checked at the top of the Audio section.</p>
<p>For &#8220;Device&#8221;, select &#8220;Soundflower (2ch)&#8221;. If this does not appear, make sure Soundflower is running. If it is not, start it and restart FMLE.</p>
<p>Once it is set, you can test that is is working by checking &#8220;Audio&#8221; in the preview panel and thenm play an audio source on your system. You should see the audio levels reflected in the preview panel (on the right). You should also be able to hear the audio through your headphones / speakers. If you dont, make sure that you have set the output correctly in Soundflower (see above).</p>
<p>For Format, select &#8220;Mp3&#8243;, and set &#8220;Channels&#8221; to &#8220;Stereo&#8221; and &#8220;Sample Rate&#8221; to &#8220;44100&#8243;.</p>
<p>The &#8220;Bit Rate&#8221; setting determines how much data is used to encode the audio. Higher values mean clearer audio / less compression but require more bandwidth. Unless you are streaming high quality audio / music, then 128 Kbps should be fine, and depending on your bandwidth, you may want to set it slightly lower.</p>
<p>Turn the volume all the way up.</p>
<div style="text-align:center"><img height="394" width="634" src="/blog/images/mac_screen_broadcast/flme_settings.png" /></div>
<p>&nbsp;</p>
<p>At this point, look at the bandwidth required estimate under the Volume setting. Make sure this is not too high in relation to your upstream bandwidth. You want to ensure there is some padding for data spikes, or if your available bandwidth goes down a bit. If the bandwidth required is too high, then go through and tweak the settings (see above) until you get the bandwidth to an acceptable level. You may need to do some live testing to find the best compromise between audio / video quality and required bandwidth.</p>
<p>Now that we have entered all of the settings, we want to save our FMLE profile, so we can easily use it again. Select <em>File &gt; Save Profile</em> and save the profile onto your system. By default, FMLE will open with the last settings used, but you can also open the saved profile by going to <em>File &gt; Open Profile</em>.</p>
<p>All that is left to do, is to start the stream, and make sure everything is working with justin.tv. Click the green &#8220;Start&#8221; button and switch over to your justin.tv channel. You should see your desktop and audio being streamed on your channel (there may be some delay between your desktop and the playback on the stream).</p>
<p>Make sure audio and video quality are good. If they are not, then stop the stream, tweak the settings and try again.</p>
<p>If you run into any errors, just check the &#8220;Encoding Log&#8221; panel in FMLE (which will open when you start the stream). You can also get general statistics on your stream in the Encoding pane which can be useful for trying to track down issues.</p>
<h3>General Trouble Shooting</h3>
<h4>Audio Not working</h4>
<p>If audio is not working, make sure:</p>
<ul>
<li>Soundflower is running</li>
<li>Soundflower was launched before FMLE was opened</li>
<li>Soundflower is set correctly as the Output in system Sound preferences</li>
<li>Try stopping and starting the stream in FMLE</li>
</ul>
<p>If audio is working on stream, but not locally, make sure that:</p>
<ul>
<li>Correct output is set in Soundflower</li>
</ul>
<h4>Video not working</h4>
<p>If the video stream is not working:</p>
<ul>
<li>Make sure that CamTwist is running, and is configured to output the desktop</li>
<li>Make sure that CamTwist was started before FMLE was started</li>
<li>Make sure that Video is selected in FMLE</li>
<li>Make sure you you downloaded and loaded the justin.tv config file</li>
<li>Try stopping and starting the stream in FMLE</li>
</ul>
<p>If video is choppy on justin.tv</p>
<ul>
<li>Adjust audio and video settings in FMLE
<ul>
<li>Video output resolution</li>
<li>Video output Bit Rate</li>
<li>Audio output Bit Rate</li>
<li>Increase Keyframe interval for H.264</li>
</ul>
</li>
<li>Check system resources (view in Activity Monitor) and make sure your system has enough resources to encode and stream audio in real time</li>
<li>Close any applications not necessary to streaming</li>
<li>Turn off &#8220;Video Input&#8221;, &#8220;Video Output&#8221;, and &#8220;Audio&#8221; previews in FMLE.
</ul>
<h2>Advanced Configuration for Streaming your desktop on Mac OS X</h2>
<p>The information above is all you need if you just want to stream your desktop and system audio to a remote server (such as justin.tv). However, if you want be able to also stream your microphone input or entire skype calls / conversations, then there are a couple of more steps you need to take.</p>
<p>For this section, we will be using all of the software above, along with:</p>
<ul>
<li><a href="http://www.rogueamoeba.com/freebies/">LineIn</a> : Allows you to redirect system audio inputs to audio outputs.</li>
</ul>
<p>By using LineIn, in conjunction with the applications above, you can have very advanced control over how you mix your audio on the desktop, including which audio outputs are included in your stream, and on your desktop.</p>
<p>For this example, we will be setting up our system so that:</p>
<ul>
<li>Microphone input is included in the stream, but not included in the local system output</li>
<li>Skype conversations (both local and remote) are included in the stream</li>
</ul>
<p>First, download <a href="http://www.rogueamoeba.com/freebies/">LineIn</a>, and copy it to your applications folder. We are going to need to use two instances of LineIn, and since Mac OS X will only allow us to launch one instance of an app at a time, we need to make a copy of the app and rename it. So, copy the LineIn application, and rename the copy to LineIn2.</p>
<p>Launch both LineIn and LineIn2 (their windows may overlap when they launch).</p>
<p>One feature of Soundflower which we did not discuss above, it that it creates two separate output channel (one with 2 channels, and one with 16 channels). We can use this, in conjunction with LineIn, to provide different audio feeds for the desktop and the stream.</p>
<p>In the first LineIn window, set the &#8220;Input from&#8221; to your local microphone input. Then, set the &#8220;Output to&#8221; &#8220;Soundflower (2ch)&#8221;. This basically takes the input from your microphone, and redirects it to the Soundflower (2ch) output (being used by FMLE).</p>
<p>Next, click the &#8220;Pass Thru&#8221; button to enable the changes we just made.</p>
<div style="text-align:center"><img height="174" width="425" src="/blog/images/mac_screen_broadcast/linein1.png" /></div>
<p>&nbsp;</p>
<p>At this point, if you have configured your streaming according the the instructions above, your microphone input will now be included in the audio for your stream. However, if you test this, you will also notice that the microphone input is also output to your system audio (since system Sound output is set to Soundflower (2ch)). Hearing yourself in your speakers / headphone as you speak can be very confusing and distracting (not to mention annoying), so we need to configure things so microphone input is not output locally.</p>
<p>This is where the second instance of LineIn comes in. If you havent already, launch LineIn2. Set the &#8220;Input from&#8221; to &#8220;Soundflower (16ch)&#8221; and set the &#8220;Output to&#8221; to &#8220;Soundflower (2ch)&#8221;. Once you have done this, click the &#8220;Pass Thru&#8221; button to enable the changes.</p>
<div style="text-align:center"><img height="174" width="425" src="/blog/images/mac_screen_broadcast/linein2.png" /></div>
<p>&nbsp;</p>
<p>Next, we need to set all system audio output to go to &#8220;Soundflower (16ch)&#8221;. Open system Sound Output settings (<em>System Preferences &gt; Sound &gt; Output</em>) and set output to &#8220;Soundflower (16ch)&#8221;. Now, all system audio output will go to &#8220;Soundflower (16ch)&#8221;, which is then being redirected (by LineIn) to &#8220;Sunflower (2ch)&#8221;.</p>
<div style="text-align:center"><img height="482" width="668" src="/blog/images/mac_screen_broadcast/sound_settings_advanced.png" /></div>
<p>&nbsp;</p>
<p>At this point, we now have two separate Soundflower channels. One (&#8220;Soundflower (2ch)&#8221;) includes both system audio and microphone input, and one (&#8220;Soundflower 16ch&#8221;) includes all system audio, minus the microphone input.</p>
<p>We don&#8217;t need to change anything in FMLE, since it is already set to use Soundflower (2ch) as its audio input. However, in order to hear the correct audio locally, we need to change the Soundflower local output. Click the Soundflower icon on the menu bar. Set &#8220;Soundflower (2ch)&#8221; to &#8220;None (Off)&#8221;, and set &#8220;Soundflower (16ch)&#8221; to the local output you want to use (which ever output your speakers / headphone is connected to).</p>
<div style="text-align:center"><img height="437" width="295" src="/blog/images/mac_screen_broadcast/soundflower_advanced.png" /></div>
<p>&nbsp;</p>
<p>You should now be able to hear all system audio locally without hearing the microphone. However, the stream includes the audio from both the local system and microphone.</p>
<p>At this point, anything you output to &#8220;Soundflower (16ch)&#8221; will be included in the stream (and played locally). This means you can set other applications, such as Skype, to also output to Soundflower (16ch) in order to include them in the stream.</p>
<p>Configuring this in <a href="http://www.skype.com">Skype</a> is easy. Just open Skype, and launch the Audio / Video preferences (<em>Skype &gt; Preferences &gt; Audio / Video</em>). Set the &#8220;Speakers&#8221; to &#8220;Soundflower (16ch)&#8221; and close the preferences. Now any audio that comes through Skype, will be included in the stream.</p>
<div style="text-align:center"><img height="239" width="600" src="/blog/images/mac_screen_broadcast/skype_settings.png" /></div>
<p>&nbsp;</p>
<p>You can do this with any application that allows you to specify sound output. You just need to keep in mind that you only have 16 channels total (which should be plenty).</p>
<p>With this setup, you can stream your desktop, system audio, local microphone and skype conversations all of the same time (useful, for example, if you are streaming multiple player games while playing / chatting with friends).</p>
<h2>Conclusion</h2>
<p>While setting up desktop streaming on Mac OS X can seem a bit daunting at first, it is not too difficult. Once you do get it setup with the configuration describe in this article, you have a lot of flexibility in how things are broadcast, including which audio sources are included / excluded.</p>
<h2>Additional Resources</h2>
<h3>Applications</h3>
<ul>
<li><a href="http://www.adobe.com/products/flashmediaserver/flashmediaencoder/">Adobe Flash Media Encoder 3.2</a></li>
<li><a href="http://allocinit.com/index.php?title=CamTwist">CamTwist</a></li>
<li><a href="http://cycling74.com/products/soundflower/">Soundflower</a></li>
<li><a href="http://www.rogueamoeba.com/freebies/">LineIn</a></li>
</ul>
<h3>Articles / Resources</h3>
<ul>
<li><a href="http://root-destiny.com/newbies-guide-to-streaming/">Beginners Guide to Desktop Streaming</a> : Great walkthrough for streaming your desktop from Windows</li>
<li><a href="http://www.justin.tv/p/camtwist">Using CamTwist with Justin.tv</a></li>
<li><a href="http://help.adobe.com/en_US/FlashMediaLiveEncoder/3.0/Using/">Adobe Flash Media Live Encoder Documentation</a></li>
<li><a href="http://www.pcworld.com/article/213034/screencast_live_how_to_make_your_own_web_tv_show.html">How To Make Your Own Web TV Show</a> : Great video series by Sean &#8220;Day[9]&#8221; Plott.</li>
<li><a href="http://community.justin.tv/forums/">Justin.tv forums</a></li>
<li><a href="http://forums.adobe.com/community/flash/flash_media_live_encoder">Adobe Flash Media Live Encoder Forums</a></li>
<li><a href="http://www.teamliquid.net/forum/viewmessage.php?topic_id=220584">TeamLiquid Forums Stream Quality Guide</a></li>
</ul>
<p>If you have any questions or suggestions, then post them in the comments.</p>
<img src="http://feeds.feedburner.com/~r/MikeChambers/~4/QA8I1PNRIqc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.mikechambers.com/blog/2011/05/29/setting-up-desktop-streaming-on-mac-os-x/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		<feedburner:origLink>http://www.mikechambers.com/blog/2011/05/29/setting-up-desktop-streaming-on-mac-os-x/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic Page Served (once) in 0.624 seconds -->
