Podcasts

Currently, the most common method of distributing audio programs (this works for video programs as well) on the internet is through podcasts.  (http://en.wikipedia.org/wiki/Podcast  http://es.wikipedia.org/wiki/Podcast)The way a podcast works for a user is that they run a podcast client (iTunes, Juice - http://juicereceiver.sourceforge.net, gPodder - http://gpodder.org/, Google Listen, etc) which periodically checks a "feed" for new material.  When the client sees that there is new material available, it automatically downloads it to the computer, and when it is ready it presents it to the user so that they can listen to it.  This setup has worked so well because it is very simple for the user.  They don't have to go out to any websites to download material (or wait while it downloads), it is already there on their computer.  Some of the more advanced clients will even support synchronizing the feed onto a portable media player such as an iPod or MP3 player.

On the content producer's side, the most important part is creating the feed that all the clients check.  This feed simply consists of a file enumerating all the episodes of the show.  This file contains information about each episode as well as a link to the content for that episode (usually mp3, but ogg is also common).  Both the file for the feed and the content that it point to are usually simply files that are available for downloading from a web server.  On a periodic basis the client applications will go to the URL for this file on the web-server, download it, and see if it contains anything new.  To facilitate all this work, the format of the feed's file is specifically defined.

XML Overview

The file is of a special format called Really Simple Syndication or RSS, with enclosures.  RSS is in turn a type of XML file (the other type of XML we have seen in this course is SVG) where each piece of data is contained within tags that specify what type of data it is. 

Here is a very basic example of an XML file:

<?xml version="1.0" encoding="UTF-8" ?>
<users>  <!-- This is the list of users in the system -->
  <user>
    <name>Joe</name>
    <address>1234 Hill St.</address>
    <phone type="local">456-7890</phone>
  </user>
  <user>
    <name>Jane</name>
    <address>4321 Hill St.</address>
    <phone type="long_distance">1-123-555-555</phone>
  </user>
</users>


XML is defined by data types, each of which starts with a tag that contains its name, such as <address> and ends with a tag that has a slash "/" and then the name of the type, such as </address>.  You can see that each type of data can have three things that it contains: more types of data, the actual data, and attributes of the data, the last two of which I have marked in blue and red so you can see what they are.  In addition, there are comments which can be anywhere.  Comments always start with "<!--" and continue until they reach "-->" to signify the end of the comment. 

http://en.wikipedia.org/wiki/XML
http://es.wikipedia.org/wiki/XML

RSS Feed Definition

Getting back to RSS, it is just a specific format of XML.  RSS is used for Podcasts, but it can also be used for all kinds of other feeds such as blogs, news articles, photo streams, etc.  The basic XML layout of RSS is the following (when used for a blog), read through it so that you understand what the tags used in it are referring to.

<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
        <title>My Blog</title>
        <description>What's going on in my life.</description>
        <link>http://example.com/blog/</link>
        <lastBuildDate>Wed, 23 Mar 2011 14:55:12 -0400 </lastBuildDate>
 
        <item>
                <title>Funny Post</title>
                <description>This was really funny.</description>
                <link>http://
example.com/posts/FunnyItem.html</link>
                <guid>00002</guid>
                <pubDate>Wed, 23 Mar 2011 14:55:12 -0400 </pubDate>
        </item>
        <item>
                <title>A serious post</title>
                <description>This is some stuff I've been thinking about.</description>
                <link>http://
example.com/posts/SeriousItem.html</link>
                <guid>00001</guid>
                <pubDate>Tue, 22 Mar 2011 13:20:42 -0400 </pubDate>
        </item>
 
</channel>
</rss>


In this case, we are using five data types for the channel: title, description, link, lastBuildData, and item.  In turn the item data type has five of its own data types: title, description, link, guid, and pubDate.  This is not a complete list of all the possible data types that can be used in RSS, there are several more.  For the complete list and explanation, see the RSS specification: http://www.rssboard.org/rss-specification

The Channel
title - The title for the feed
description - A description of what the feed contains.  This can be long or short and should be useful for a user to determine if they would find the feed contents interesting. 
link - This is a link to a page that contains general information about the feed (not about any specific item in it).  For instance this could be a link to an archive of past items.
lastBuildDate - When the feed was last modified.
item - Each item contains further information about one specific episode, post, article, etc.

An Item
title - The title of this item
description - A description of what is in this item, this could be very long.  For a blog or news article this could even contain the entire textual contents.  For a podcast, this may contain notes about the show.
link - This is a link to the item's page
guid - This must be something that uniquely identifies this item.  Once you publish a feed with a certain chunk of text here, you may never use this again.  This is used by the client to determine if it has already seen this item (and won't need to download it again).
pubDate - The date and time that this item was added to the feed.

http://en.wikipedia.org/wiki/RSS
http://es.wikipedia.org/wiki/RSS
http://www.xul.fr/en-xml-rss.html - Tutorial on building RSS

Podcast Specific

The above RSS example wasn't actually for a podcast, because there weren't any audio files in it, it was something that would be more typical for a blog.  Below is another example, that adds a key data type which makes the RSS into a podcast feed.

<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
        <title>My Podcast</title>
        <description>What's going on in my life.</description>
        <link>http://example.com/blog/</link>
        <lastBuildDate>Wed, 23 Mar 2011 14:55:12 -0400 </lastBuildDate>
 
        <item>
                <title>Episode 002 - Funny Story</title>
                <description>This was really funny.</description>
                <link>http://
example.com/shows/ep002_notes.html</link>
                <guid>00002</guid>
                <pubDate>Wed, 23 Mar 2011 14:55:12 -0400 </pubDate>
                <enclosure url="http://example.com/media/ep002.mp3" length="3456789" type="audio/mpeg" />
        </item>
        <item>
                <title>Episode 001 - A serious post</title>
                <description>This is some stuff I've been thinking about.</description>
                <link>http://
example.com/shows/ep001_notes.html</link>
                <guid>00001</guid>
                <pubDate>Tue, 22 Mar 2011 13:20:42 -0400 </pubDate>
                <enclosure url="http://example.com/media/ep001.mp3" length="1234567" type="audio/mpeg" />
        </item>
 
</channel>
</rss>

You can see that we added the "enclosure" data type to each item.  The enclosure data type doesn't have any actual data that goes in it, just three attributes that need to be set:  the location of the media file, the size of the media file (in bytes), and the type (for mp3s this is audio/mpeg).

Show Notes

You may have been wondering what the link in each item points to, since the audio is contained in the enclosure.  In this case you wouldn't strictly need a link data type for these items, but when you are creating a podcast it is usually a very good idea to have a web page that goes with each episode.  This web page is usually called the "show notes" and contains information about what is happening in the audio.  For instance it could contain name (and links to) songs that were played, information about guests that were interviewed, links to topics that were discussed, etc.  We won't get too far into that now, since we haven't gotten to the section on web page creation yet, just know that it is an important part of having a podcast.

Podcast Generators

If you don't want to mess around with creating your own RSS feeds (though doing it yourself is highly recommended) there are also several organizations that will take care of all that for you.  Try searching google for "podcast hosting".  If you just want the tools to generate the RSS feed, seach google for "podcast generator".  There is at least one free software generator that is available, you can get it at: http://podcastgen.sourceforge.net/

Find Podcasts

Once you have your podcast feed all set, you can give out the URL to anyone you'd like.  However, you may also be interested in getting a bigger audience, that requires publishing your podcast in a directory of podcasts where people can go to find them.  The biggest directory of podcasts is the iTunes store (they have special data that needs to be added into the feed though) but there are several others that are also good to get into. 

http://www.apple.com/itunes/podcasts/
http://podcast.com/
http://www.podcastalley.com/
http://www.podomatic.com/

Getting Podcasts in gPodder

The best client software for podcasts is gPodder.  It is available on Linux (Ubuntu and others), Windows, and Mac, and makes it very easy to stay up to date with your podcasts. 

To start, open up gPodder and go to Subscriptions -> Add Podcast By URL.
gPodder-Basic.png

Once you have that open, go to the main page for the podcast: http://mediaintro.teeks99.com/podcast/ from there you will see a link for the Podcast's RSS feed.  Right click on it and copy it, then paste it into the box in gPodder.
gPodder-Add.png

Now gPodder will go out and get all the information about the feed.  It will find out that there are two episodes available for download and prompt you to start downloading.
gPodder-Download.png

Once the download is complete, it will show you the available audio to listen to. 
gPodder-Ready.png

At this point gPodder will keep checking the feed for more episodes on a regular basis.  Additionally, you could set it up so that it will automatically synchronize the podcasts to your MP3 player.  This will load the new podcasts to the player for you, and can remove them from gPodder once you've listened to them.