<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>TandaSoft</title>
	<atom:link href="http://www.tandasoft.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tandasoft.com</link>
	<description>Agile Software Engineering and Computer Consulting Services, Salida, Colorado</description>
	<lastBuildDate>Mon, 19 Dec 2011 17:26:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Android WebView &#8211; &#8220;ads failing to load&#8221; solution</title>
		<link>http://www.tandasoft.com/2011/11/07/android-webview-ads-failing-to-load-solution/</link>
		<comments>http://www.tandasoft.com/2011/11/07/android-webview-ads-failing-to-load-solution/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 05:15:51 +0000</pubDate>
		<dc:creator>andrew</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[ads]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[WebView]]></category>

		<guid isPermaLink="false">http://www.tandasoft.com/?p=174</guid>
		<description><![CDATA[I just spent a few hours debugging something, and I thought it might be worth posting in case anyone else out there might ever have this obscure problem. My app brings up an external page in a WebView that contains ads.  My emulator and my phone (not rooted) brought up these pages with little problems, [...]]]></description>
			<content:encoded><![CDATA[<p>I just spent a few hours debugging something, and I thought it might be worth posting in case anyone else out there might ever have this obscure problem.</p>
<p>My app brings up an external page in a <a href="http://developer.android.com/reference/android/webkit/WebView.html">WebView</a> that contains ads.  My emulator and my phone (not rooted) brought up these pages with little problems, but on my rooted Transformer Tablet, in my assigned <a href="http://developer.android.com/reference/android/webkit/WebViewClient.html">WebViewClient</a>, I kept getting an onReceivedError method call, errorCode=-6, description=&#8221;The connection to the server was unsuccessful.&#8221;  This was happening on embedded doubleclick ad URLs and other external ad URLs.  I thought maybe there was some security setting that prevented cross-domain or cross-site loading of scripts or images, but that seemed to be a pretty extreme default setting for WebView.  (IE many sites load jquery directly from the jquery site, or use content delivery networks for images&#8230; both are valid cross-domain references.)</p>
<p>The quick of it is, the custom ROM I had installed (<a href="http://eeepadhacks.net/transformer-roms/android-revolution-hd-rom-for-rooted-eeepad-transformer-1-6ghz-oc/">Revolution ROM</a>) came with some anti-spyware measures which was blocking certain sites and firing errors off to my WebViewClient.  My stock <span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">/etc/hosts</span> (<span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">/system/etc/hosts</span>) file with this ROM looked something like this&#8230;</p>
<pre># Ad server list for use with hosts files to block ads
#
# For more information about this list, see: http://forum.xda-developers.com/showthread.php?t=509997
# ----
# entries: 23609
# last updated
# AdFree Version 0.7.7 (7007)
# UID: 0
# sources: http://www.mvps.org/winhelp2002/hosts.txt
# http://pgl.yoyo.org/adservers/serverlist.php?showintro=0;hostformat=hosts
#
#

127.0.0.1 localhost
127.0.0.1 0.r.msn.com
127.0.0.1 000-search.net
127.0.0.1 000dom.revenuedirect.com
127.0.0.1 005.free-counter.co.uk
127.0.0.1 006.free-counter.co.uk
127.0.0.1 007.free-counter.co.uk
127.0.0.1 008.free-counter.co.uk
127.0.0.1 008.free-counters.co.uk
127.0.0.1 00fun.com
...</pre>
<p>I was able to change it back to a simple:</p>
<pre>127.0.0.1 localhost</pre>
<p>by following instructions <a href="http://www.sacoskun.com/2009/06/configure-hosts-file-in-android.html">here</a> and the errors are gone.  Guess that&#8217;s what I get for using a non-stock rom, but having root sure is worth it.  :-)</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tandasoft.com/2011/11/07/android-webview-ads-failing-to-load-solution/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Authorize.NET DPM (Direct Post Method) from ASP.NET Web Forms</title>
		<link>http://www.tandasoft.com/2011/05/05/using-authorize-net-dpm-direct-post-method-from-asp-net-web-forms/</link>
		<comments>http://www.tandasoft.com/2011/05/05/using-authorize-net-dpm-direct-post-method-from-asp-net-web-forms/#comments</comments>
		<pubDate>Fri, 06 May 2011 00:45:34 +0000</pubDate>
		<dc:creator>andrew</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[ecommerce]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://www.tandasoft.com/?p=141</guid>
		<description><![CDATA[While thousands of custom websites with custom checkout procedures process credit cards, relatively few meet PCI compliance standards. Basically, when a credit card number TOUCHES your server, even if you do not store it, your system falls under PCI compliance guidelines which are pretty nasty.  The easiest thing to do is never let a credit [...]]]></description>
			<content:encoded><![CDATA[<p>While thousands of custom websites with custom checkout procedures process credit cards, relatively few meet PCI compliance standards. Basically, when a credit card number TOUCHES your server, even if you do not store it, your system falls under PCI compliance guidelines which are pretty nasty.  The easiest thing to do is never let a credit card number even pass through your server.  Many folks use Authorize.NET&#8217;s SIM method, but it requires the credit card number passing through your server, setting you up for a likely PCI audit failure.  Granted, credit card companies don&#8217;t run around auditing small online businesses, but I like doing things right and treating sensitive information with respect.</p>
<p>Authorize.NET DPM seems like a great method.  However, I found the documentation at Authorize.NET confusing, and they do not provide an ASP.NET Web Forms example of DPM. So I extracted one from a recent project I worked on.  Here are a few key points required to get this to work.</p>
<ol>
<li>ASP.NET doesn&#8217;t appear to support posting a form to an alternate address, but actually, <a href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.postbackurl.aspx">it does</a>. Check out Button&#8217;s <a href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.postbackurl.aspx">PostBackURL</a> property.  Using this property will allow your app to submit a form directly to Authorize.NET&#8217;s server.</li>
<li>The &#8216;x_relay_url&#8217; that you passed to Authorize.NET to confirm the purchase is called directly from Authorize.NET&#8217;s servers to your server to inform your website of purchase success, failure, etc&#8230;  It should point to your server and a special page that knows how to deal with the data being posted to it.  Any output from your relay page is piped through the submission URL at Authorize.NET and displayed in the client&#8217;s browser.  Basically, the URL the web browser displays is an Authorize.NET URL, but it displays any data from your replay response page.  This means you get no cookies (IE no Session variables) from the client browser.  This page should perform some validation, and  issue very simple HTML/javascript redirect code through your SIM response page. Response.Redirect didn&#8217;t work for me.</li>
</ol>
<p>Check out the following downloadable demo.</p>
<p><a href="http://www.tandasoft.com/software-files/AuthorizeNET-DPM.zip">http://www.tandasoft.com/software-files/AuthorizeNET-DPM.zip</a></p>
<p>This has been tested in Visual Studio 2010 / ASP.NET 4.0.  Your mileage may vary in other environments.  It is written in VB.Net, but should easily convert to C# or your CLR language of choice.</p>
<p>In order for application to compile, please first download <a href="http://developer.authorize.net/downloads/">Authorize.Net .NET SDKs</a>, click through their EULA, then extract:</p>
<ul>
<li>AuthorizeNet.dll</li>
<li>AuthorizeNet.Helpers.dll</li>
</ul>
<p>And place them in the bin/ directory.  Then edit the Web.config and replace the AUTHORIZE_NET variables with values from your developer account at Authorize.net. Lastly, make sure Authorize.NET can reach your relay URL (which should be &#8220;http://domain/siteroot/SIM.aspx&#8221;).  This may require running your application in IIS (NOT the Visual Studio development server) and poking a hole through your firewall for testing.  See notes in the code for more details, or check the Authorize.NET documentation.</p>
<p>The demo also has error handling and <a href="http://logging.apache.org/log4net/">log4net</a> to log any errors to a log.txt file in the site root.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tandasoft.com/2011/05/05/using-authorize-net-dpm-direct-post-method-from-asp-net-web-forms/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Creating Android HTTP progressive streaming MP4s</title>
		<link>http://www.tandasoft.com/2011/03/02/creating-android-http-progressive-streaming-mp4s/</link>
		<comments>http://www.tandasoft.com/2011/03/02/creating-android-http-progressive-streaming-mp4s/#comments</comments>
		<pubDate>Wed, 02 Mar 2011 21:34:00 +0000</pubDate>
		<dc:creator>andrew</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[HTTP Progressive Streaming]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.tandasoft.com/?p=129</guid>
		<description><![CDATA[Once again, I find very little information on the web regarding creating streamable MP4s that can play on an android phone.  This is also known as HTTP progressive streaming.  There are more details about what the Android phones will play here, but details on what constitutes MP4 progressive streamable media is almost non-existent.  More on [...]]]></description>
			<content:encoded><![CDATA[<p>Once again, I find very little information on the web regarding creating streamable MP4s that can play on an android phone.  This is also known as HTTP progressive streaming.  There are more details about what the Android phones will play <a href="http://developer.android.com/guide/appendix/media-formats.html">here</a>, but details on what constitutes MP4 progressive streamable media is almost non-existent.  More on that below&#8230;</p>
<p>But first, for the impatient, here is exactly what I did:</p>
<ul>
<li>Download FFMPEG, latest stable release (0.6.1 in my case) Windows build from <a href="http://www.videohelp.com/tools/ffmpeg">VideoHelp.com</a> (<a href="http://ffmpeg.org/">FFMPEG.org</a> doesn&#8217;t do their own builds)</li>
<li>Download x264 Windows build from <a href="http://x264.nl/">x264.nl</a> (<a href="http://www.videolan.org/developers/x264.html">the x264 team</a> doesn&#8217;t do their own windows builds)</li>
<li>Download the Nero AAC Encoder from <a href="http://www.nero.com/eng/downloads-nerodigital-nero-aac-codec.php">nero</a> (this is NOT open source)</li>
<li>Download MP4Box from <a href="http://www.videohelp.com/tools/MP4Box">here</a> (the <a href="http://gpac.wp.institut-telecom.fr/">GPAC/MP4Box team</a> doesn&#8217;t do their own builds)</li>
</ul>
<p>Here&#8217;s how I have created my streams in a Windows environment:</p>
<ol>
<li>Extract WAV file from original video:<br />
<code>ffmpeg.exe -i INPUT.AVI -vn -acodec pcm_s16le AUDIO.WAV</code></li>
<li>Produce an AAC file:<br />
<code>neroAacEnc.exe -cbr 64000 -he -if AUDIO.WAV -of AUDIO.AAC</code></li>
<li>Choose a bitrate, and encode the video for one of those bitrates. Android recommends 56kbps and 500kbps. This example will use 56 kb/s (&#8220;low&#8221; bitrate):<br />
<span style="font-family: monospace;">x264.exe &#8211;level 30 &#8211;profile baseline &#8211;bitrate 56 &#8211;keyint 30 -o LOW.MP4 INPUT.AVI</span></li>
<li>Mux the audio and video together to produce an interleaved MP4 :<br />
<code>mp4box.exe -add LOW.MP4 -add AUDIO.AAC OUT.MP4</code></li>
<li>Repeat steps 2-4 for alternate bitrates.</li>
</ol>
<p>I also use ffmpeg&#8217;s engine to resize and change frame rate on the video as needed prior to running it through x264&#8230; these options are <a href="http://groups.google.com/group/android-challenge/msg/114f11e31351840df">well documented</a>.</p>
<p>For more details&#8230; while tinkering with methods from my <a href="http://www.tandasoft.com/2011/02/01/iphone-ipad-ipod-http-live-streaming-hls-with-free-tools-on-windows/">last post</a>, I found that FFMPEG&#8217;s muxer could not produce streamable MP4s from individual audio/video streams, so I had to add the MP4Box to my tool belt. Some reasons as to why Android won&#8217;t stream certain MP4s are listed <a href="http://groups.google.com/group/android-challenge/msg/114f11e31351840d">here</a> (with no solution).  Basically, FFMPEG doesn&#8217;t seem to order the output chunks correctly nor interleave the audio/video, at least with the settings I see documented.  I also found no documentation regarding forcing the muxer in FFMPEG to do this&#8230; mp4box is such a muxer.</p>
<p>Hope this helps someone out there!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tandasoft.com/2011/03/02/creating-android-http-progressive-streaming-mp4s/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>iPhone, iPad, iPod &#8211; HTTP Live Streaming (HLS) with free tools on Windows</title>
		<link>http://www.tandasoft.com/2011/02/01/iphone-ipad-ipod-http-live-streaming-hls-with-free-tools-on-windows/</link>
		<comments>http://www.tandasoft.com/2011/02/01/iphone-ipad-ipod-http-live-streaming-hls-with-free-tools-on-windows/#comments</comments>
		<pubDate>Tue, 01 Feb 2011 18:35:43 +0000</pubDate>
		<dc:creator>andrew</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[HLS]]></category>
		<category><![CDATA[HTTP Live Streaming]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.tandasoft.com/?p=98</guid>
		<description><![CDATA[Apple HTTP Live Streaming (HLS) has been a nightmare to get working. Below, I&#8217;ll go through some of my trials and tribulations in getting HLS encoding for non-live streams working in Windows.   In summary, I couldn&#8217;t get the bitrate I wanted on my videos.  I&#8217;ll provide explanations (and rants) below, but first, for the [...]]]></description>
			<content:encoded><![CDATA[<p>Apple HTTP Live Streaming (HLS) has been a nightmare to get working.  Below, I&#8217;ll go through some of my trials and tribulations in getting HLS encoding for non-live streams working in Windows.   In summary, I couldn&#8217;t get the bitrate I wanted on my videos.  I&#8217;ll provide explanations (and rants) below, but first, for the impatient, here is the solution.</p>
<p>In the end, here is exactly what I did:</p>
<ul>
<li>Download FFMPEG, latest stable release (0.6.1 in my case) Windows build from <a href="http://www.videohelp.com/tools/ffmpeg">VideoHelp.com</a> (FFMPEG.org doesn&#8217;t do their own builds for some reason?)</li>
<li>Download x264 Windows build from <a href="http://x264.nl/">x264.nl</a> (once again, <a href="http://www.videolan.org/developers/x264.html">the x264 team</a> doesn&#8217;t do their own windows builds)</li>
<li>Download the Nero AAC Encoder from <a href="http://www.nero.com/eng/downloads-nerodigital-nero-aac-codec.php">nero</a> (this is NOT open source)</li>
<li>Download the open source segmenter from <a href="http://code.google.com/p/httpsegmenter/">here</a> (author&#8217;s site is <a href="http://www.espend.de/artikel/iphone-ipad-ipod-http-streaming-segmenter-and-m3u8-windows.html">here</a>)</li>
</ul>
<p>Here&#8217;s how I have created my streams in a Windows environment:</p>
<ol>
<li>Extract WAV file from original video:<br />
<code>ffmpeg.exe -i INPUT.AVI -vn -acodec pcm_s16le AUDIO.WAV</code></li>
<li>Produce an AAC file:<br />
<code>neroAacEnc.exe -cbr 64000 -he -if AUDIO.WAV -of AUDIO.AAC</code></li>
<li>Produce the required audio-only MPEG2-Transport Stream:<br />
<code>ffmpeg.exe -i AUDIO.AAC -vn -f mpegts -acodec copy AUDIO.TS</code></li>
<li>Go ahead and segment the audio-only MPEG2-Transport Stream (this can be done later):<br />
<code>segmenter.exe AUDIO.TS 10 STREAMNAME/AUDIO STREAMNAME/AUDIO.M3U8 http://mydomain.com/virtual/path/to/STREAMNAME/</code><br />
Note that this will dump AUDIO-*.TS and AUDIO.M3U8 files into the .\STREAMNAME directory which must exist prior to running.</li>
<li>Choose a bitrate, and encode the video for one of those bitrates.  Apple recommends 96 kb/s, 256 kb/s, and 800 kb/s for video.  This example will use 96 kb/s (&#8220;low&#8221; bitrate):<br />
<code>x264.exe --level 30 --profile baseline --bitrate 96 --keyint 30 -o LOW.MP4 INPUT.AVI</code></li>
<li>Mux the audio and video together to produce an MPEG2 Transport Stream:<br />
<code>ffmpeg.exe -i LOW.MP4 -i AUDIO.AAC -f mpegts -vcodec copy -acodec copy -vbsf h264_mp4toannexb LOW.TS</code></li>
<li>Segment the stream:<br />
<code>segmenter.exe VIDEO-96KBPS.TS 10 STREAMNAME/LOW STREAMNAME/LOW-TMP.M3U8 http://mydomain.com/virtual/path/to/STREAMNAME/</code></li>
<li>Optional: Make all URLs relative in STREAMNAME/LOW.M3U8&#8230; Apple&#8217;s mediastreamvalidator will issue warnings if you don&#8217;t do this.  I use a sed script:<br />
<code>sed.exe "s/http\:\/\/mydomain.com\/virtual\/path\/to\/STREAMNAME\///" STREAMNAME/LOW-TMP.M3U8 &gt; LOW.M3U8</code></li>
<li>Repeat steps 5-8 for Medium (256 kb/s) and High (800 kb/s) bitrates.</li>
<li>Generate the final playlist:<br />
<code>echo #EXTM3U&gt; STREAMNAME\STREAMNAME.M3U8<br />
echo #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=320000&gt;&gt; STREAMNAME\STREAMNAME.M3U8<br />
echo med.m3u8&gt;&gt; STREAMNAME\STREAMNAME.M3U8<br />
echo #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=864000&gt;&gt; STREAMNAME\STREAMNAME.M3U8<br />
echo high.m3u8&gt;&gt; STREAMNAME\STREAMNAME.M3U8<br />
echo #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=160000&gt;&gt; STREAMNAME\STREAMNAME.M3U8<br />
echo low.m3u8&gt;&gt; STREAMNAME\STREAMNAME.M3U8<br />
echo #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=64000&gt;&gt; STREAMNAME\STREAMNAME.M3U8<br />
echo audio.m3u8&gt;&gt; STREAMNAME\STREAMNAME.M3U8</code></li>
</ol>
<p>So what&#8217;s going on above?  What&#8217;s the gist of an HLS stream?  Briefly, setting up a static compliant HLS stream involves the following:  Encode your video at varying bitrates.  Then slice each of those encoded videos into even chunks (10 seconds recommended) and output a playlist.  A master playlist (aka variant playlist) points to each bitrate-playlist.  Let the player, based on bandwidth constraints, figure out what bitrate it wants on the fly.  If it has to switch to a different bitrate-playlist, it merges segments by matching up the audio (which should be encoded identically between streams).  This seems to fit Apple&#8217;s general philosophy: your video will stream; it will work regardless of your bandwidth limitations.</p>
<p>A couple of important notes:</p>
<ul>
<li>One benefit: No streaming server is needed to make this work.  Any HTTP server will work, including Apache and IIS.</li>
<li>As mentioned <a href="http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StreamingMediaGuide/UsingHTTPLiveStreaming/UsingHTTPLiveStreaming.html">here</a>, <em>&#8220;If your app delivers video over cellular networks, and the video exceeds either 10 minutes duration or 5 MB of data in a five minute period, you are required to use HTTP Live Streaming.&#8221; </em>(You have to wonder if any of this is to simply protect AT&amp;T&#8217;s bandwidth?)</li>
<li>Apple has proposed HLS as a <a href="http://tools.ietf.org/html/draft-pantos-http-live-streaming-05">standard</a>.</li>
<li>So far as I can tell, Apple doesn&#8217;t provide an encoder to produce the needed MPEG-2 Transport Stream, nor does any SINGLE Apple tool to encode and dump out the necessary files for HLS.  They do give you command-line <a href="http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StreamingMediaGuide/UsingHTTPLiveStreaming/UsingHTTPLiveStreaming.html">tools</a> for segmenting, creating a variant playlist (aka master-playlist), and verifying streams.  This seems like a glaring omission from QuickTime Pro honestly.  It does seem from forum posts that QuickTime Pro can output a format that the Apple&#8217;s  segmenter (a command line tool on MacOS) can deal with though.</li>
<li>It&#8217;s all standards based (x264, AAC/MP3, MPEG2-TS) with recommendations for settings provided in their <a href="http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StreamingMediaGuide/FrequentlyAskedQuestions/FrequentlyAskedQuestions.html">FAQ</a>.  So we should be able to cobble the necessary files together from free tools that run on Windows.  Almost all of them are open source&#8230;</li>
</ul>
<p>So off I went, in an attempt to figure all this out from available, free tools.  I came across a very helpful article at <a href="http://www.ioncannon.net/">www.ioncannon.net</a>, <a href="http://www.ioncannon.net/programming/452/iphone-http-streaming-with-ffmpeg-and-an-open-source-segmenter/">iPhone HTTP Streaming with FFMpeg and an Open Source Segmenter</a> and initially got a stream up and running quite quickly.  But the bitrates of the resultant streams just didn&#8217;t come close to the bitrates I wanted.  (Knowing how HLS works, it seems it would be fairly important to have bitrates that come close to what is advertised in the main playlist.)  I spent the next few days trying my best to get <a href="http://ffmpeg.org/">FFMPEG</a> to cooperate, but to no avail&#8230; on a 150 kbit/s stream, it produced 220 kbit/s&#8230; on a 800 kbit/s stream, it produced a 250 kbit/s stream.  On top of this, if I told FFMPEG to use AAC, the audio sounded horrible (MP3 was much better at the same bitrate!)</p>
<p>After days of experimentation, I finally got the results I wanted from free tools for creating HTTP Streams for use with iPhone, iPad, iPod.  The information out there on how to get these tools to do what you want is pretty horrible.  Especially for the video processing layman like myself, who &#8220;just wants it to work!&#8221;</p>
<p>In summary, FFMPEG fails on two fronts here:</p>
<ul>
<li>FFMPEG is horrible at AAC audio encoding.  The resultant audio sounds horrible.  The free NeroAacEnc does a much better job.  Yes, we could use MP3, but AAC supposedly provides better sound at similar compression rates versus MP3.</li>
<li>FFMPEG simply doesn&#8217;t (by any of my tests) come close to honoring a recommended bitrate for x264 video encoding.  I have tried suggestions from  the <a href="http://rob.opendot.cl/index.php/useful-stuff/ffmpeg-x264-encoding-guide/">FFmpeg x264 encoding guide</a>, including two pass encoding, but to no avail.  Video bitrates were simply way off.</li>
</ul>
<p>So I am using a combination of executables: ffmpeg (extract audio for Nero), Nero AAC Encoder (audio encoding), x264 (video encoding), ffmpeg (mux audio/video to create TS file), and an open source segmenter (to create m3u8 for each bitrate).  The resulting output looks great, and at least comes pretty close to desired bitrate&#8230; finally!</p>
<p>Hope this helps someone out there!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tandasoft.com/2011/02/01/iphone-ipad-ipod-http-live-streaming-hls-with-free-tools-on-windows/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Android vs iPhone development &#8211; some observations</title>
		<link>http://www.tandasoft.com/2010/12/13/android-vs-iphone-development-some-observations/</link>
		<comments>http://www.tandasoft.com/2010/12/13/android-vs-iphone-development-some-observations/#comments</comments>
		<pubDate>Mon, 13 Dec 2010 22:15:07 +0000</pubDate>
		<dc:creator>andrew</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://www.tandasoft.com/?p=89</guid>
		<description><![CDATA[I recently developed my first Android application for Infotank and thought I&#8217;d share some of my observations about developing Android applications here. First, I&#8217;ll note that the last mobile application I developed was on Windows Mobile/CE , and with the exception of limited stack space (a pain in C++), it was generally more like traditional [...]]]></description>
			<content:encoded><![CDATA[<p>I recently developed my first Android application for <a href="http://www.infotank.com/">Infotank</a> and thought I&#8217;d share some of my observations about developing Android applications here.</p>
<p>First, I&#8217;ll note that the last mobile application I developed was on Windows Mobile/CE , and with the exception of limited stack space (a pain in C++), it was generally more like traditional programming. Not having developed an iPhone app yet, I don’t have much else to compare it to, but suffice it to say, developing for Android can be somewhat frustrating.  Anyhow, I’ll vent here just a little bit:</p>
<ul>
<li>You don’t really develop an application, but more like a library.</li>
<li>When the OS decides to load/unload you is not predictable.  Your “app” may run for days in the background or until the device reboots.</li>
<li>My app performs some amount of dynamic layout based on reading XML from a server… and developing this has been a challenge.  Separating out “sub-view” objects to be placed within an Activity (full screen view) required me building my own architecture for handling that.</li>
<li>Sometimes the app crashes in an Android library with little indication as to why… tracing the problem can be frustrating.</li>
<li>Some typical java patterns are not used in the libraries, which also can be a little frustrating… IE I’d like to be able to register multiple listeners to capture “Activity” (full screen view) lifecycle events, but you can only capture the event through inherited methods on the Activity itself, while other areas do implement a listener (or at least a single listener) pattern, IE button clicks.</li>
<li>It&#8217;s open source and fairly new.  The documentation is sometimes lacking.</li>
</ul>
<p>On the plus side:</p>
<ul>
<li>You’re basically doing Java development.  Most of the expected features found in standard Java libraries is there.</li>
<li>You are working in Eclipse, which is a killer Java development environment.</li>
<li>Debugging is simple and easy to use on both device and emulator.</li>
<li>The Java android libraries that you target sit on a linux core, but I’ve never had to touch linux.</li>
<li>Most UI “widgets” that you use to build your UI are easy to use and highly customizable… and can mostly be specified not with coding, but through XML layout schemas.</li>
<li>It&#8217;s open source and very flexible.</li>
</ul>
<p>If you want to read up more, a brief rundown of Android is here:  <a href="http://developer.android.com/guide/topics/fundamentals.html">http://developer.android.com/guide/topics/fundamentals.html</a></p>
<p>I haven’t worked with the iPhone. I will be developing for it in the next few months.  From what I’ve seen so far, Objective C syntax sure looks ugly!  C was a great idea, and smalltalk was a great idea, but marrying the syntaxes sure seems like a hack, although I’m sure adding smalltalk functionality has benefits.  I’ll discover more later.</p>
<p>Anyone else developed for both Android and iPhone? Would love to hear what everyone else thinks so far of iPhone development compared to Android?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tandasoft.com/2010/12/13/android-vs-iphone-development-some-observations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hello world!</title>
		<link>http://www.tandasoft.com/2010/09/30/hello-world/</link>
		<comments>http://www.tandasoft.com/2010/09/30/hello-world/#comments</comments>
		<pubDate>Thu, 30 Sep 2010 01:57:08 +0000</pubDate>
		<dc:creator>andrew</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.tandasoft.com/?p=1</guid>
		<description><![CDATA[No news yet.  Hang in there for exciting news!]]></description>
			<content:encoded><![CDATA[<p>No news yet.  Hang in there for exciting news!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tandasoft.com/2010/09/30/hello-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

