One of the things you’ll notice first when using ‘sodes is that there are no downloads to manage. This isn’t one of those things where I ran out time. It’s a deliberate omission. This post is about why I made that decision, and also takes a quick look under the hood at the technical stuff that makes it work.
I have long wanted a podcast player that feels more like a TV-streaming app: tap a show, tap an episode, and listen. I know it’s possible to use other podcast players that way, but it’s tedious. You subscribe to a show and episodes start downloading. Eventually you have to go find where the settings are to turn off automatic downloads, but first you have to find all the active downloads and cancel them. Maybe you aren’t able to cancel them in time. Since those audio files count against your iPhone storage, you hunt down all the pesky downloads and delete them. Then when you finally start listening to an episode, you have to confirm it’s not re-downloaded.
For a lot of folks, all this stuff is part of the appeal. For me, managing downloads is a vestigial trait from when podcast players looked like this:
I made ’sodes because I think the experience should be better for casual users like me. There are no download queues to manage, no auto-deletion behaviors to configure, no inboxes to triage. You tap an episode and it plays. It requires an internet connection, yes, but so do video streaming apps1. My use case for podcast listening mirrors how I binge watch pleasantly-shitty Netflix shows about crusty-but-benign police lieutenants and ex-Supreme Court justices and managing editors.
Because ’sodes doesn’t have any of the baggage of an old-school podcast player, the design is airy and streamlined. There’s no need for a tab bar or a navigation bar. There are no inboxes or queues. Many times there’s not even a need to leave the app’s home screen. Your most favorite shows and a handful of recent episodes are already there:
Behind the scenes, playing a podcast audio file is different than streaming a TV show. Services like Netflix use technologies like HTTP Live Streaming (HLS) to serve video on-demand. HLS plays video at variable levels of quality so playback can be adjusted for slow connections or metered usage. HLS requires the content provider to encode the video in a range of qualities, fragmented into hundreds of small files. Podcast producers don’t do that. Podcasts are encoded as one-size-fits-all MP3 files. “Streaming” a podcast is not really streaming but downloading on demand.
So how does ’sodes manage on-demand downloads? Because on-demand playback of a podcast is only able to use the original quality MP3, I want to keep network usage to a minimum. Users should feel comfortable using ’sodes on a cellular network. I limit network usage via an obscure but powerful API that Apple provides called AVAssetResourceLoaderDelegate (if you want to read an even deeper dive click here). This API allows the developer to take over control of fulfilling all the audio data requests coming from the system audio framework. Whenever the system requests a range of audio data for an episode, I first check a local file to see if I have any of those byte ranges:
If I have the data already, I use it. If there are any gaps, I only download the data it takes to fill in the gaps. I never download any data that’s not explicitly requested by the system audio framework. In this manner, you can take several app sessions to finish listening to an episode, but ’sodes won’t download any given byte of data more than once. This drastically reduces network usage without requiring you to manage a download. Further, this cached data is stored in a location on your iPhone that is managed automatically by the operating system and doesn’t count against your iPhone storage. ’sodes keeps audio data for a handful (currently 3) of the most recently-played episodes so that you can switch between a few episodes when you have a spare moment without triggering more data usage.
If you (or someone you like a whole lot) would enjoy a more relaxing way to get into podcasts, please check out ’sodes. It launches February 15th, but is available for pre-order now.
Yeah, I know Netflix (and maybe others) have started adding offline modes, but those are buried inside secondary screens and are not allowed to get in the way of the primary casual experience. ↩︎