Support
Tech Note #5: Optimizing feeds for Kinoma Player 4 EX
- Initial Version: July 6, 2007
Summary
This tech note is for content providers who want to understand how to create and optimize podcast feeds for Kinoma Player 4 EX.
This tech note doesn’t describe how to optimize video and audio content for playback with Kinoma Player 4 EX. For more on that, refer to the Kinoma Player 4 EX documentation or use an encoding tool (such as Kinoma Producer 4) created especially for that purpose.
Also, the Kinoma forum is a great place to ask specific questions about optimizing content for Kinoma Player 4 EX.
Overview
Among its many capabilities, Kinoma Player 4 EX is a podcatcher. A podcatcher — also known as a podcast receiver or a podcast feed aggregator — are simply feed readers optimized for video/audio. As a podcatcher, Kinoma Player 4 EX allows users to bookmark and play podcasts right from within Kinoma Player 4 EX.
Kinoma Player 4 EX supports both RSS feeds and OPML feeds.
An RSS feed is a file that contains a list of items, typically blog posts or links to video/audio podcast content. We’re interested in RSS feeds that contain a list of links to podcast content, generally just called podcast feeds. Kinoma Player 4 EX also supports RSS feeds with links to photos, also known as photocasts or photostreams.
An OPML feed is a file that contains a hierarchical list, typically used to aggregate multiple feeds from one or more sources. We’re interested in OPML feeds that contain a list of podcast feeds.
When to use RSS
To create one or more channels intended for use in the Kinoma Media Guide, create one or more podcast feeds.
When to use OPML
If you want to make several podcast feeds available via a single URL, create an OPML file containing links to the podcast feeds.
When used in Kinoma Player 4 EX — either via the Kinoma Media Guide, or by users who manually open the URL to your OPML file — the OPML file will be represented as a category containing multiple channels.
Most podcasters just create individual RSS feeds. Organizations with large number of feeds, such as National Public Radio, often also create OPML feeds.
Supported formats
To see the list of file formats and video/audio formats supported by Kinoma Player 4 EX, refer to the Content Compatibility section in the documentation at http://kinoma.com/support/manuals/player4ex/.
Kinoma Player 4 EX supports the formats most commonly used for podcasts, MP3 and MPEG-4.
Creating a basic podcast feed
A podcast feed with a single program
At its simplest, a one-item podcast feed looks like this:
<?xml version="1.0"?>
<rss version="2.0">
<channel>
<title>My Podcast</title>
<link>http://www.mydomain.com/</link>
<description>My latest crazy-cool podcast</description>
<item>
<title>My Podcast</title>
<enclosure url="http://mydomain.com/media/myPodcast.mp3" length="640561" type="audio/mp3" />
<guid>http://www.mydomain.com/podcasts/media/myPodcast.mp3</guid>
</item>
</channel>
</rss>
Note that this feed contains a single <item>, representing a single program in Kinoma Player 4 EX.
When users choose a podcast feed with a single program, Kinoma Player 4 EX will begin playing the item immediately.
A podcast feed with multiple programs
To include multiple programs in a podcast, simply add an additional <item> for each program.
<?xml version="1.0"?>
<rss version="2.0">
<channel>
<title>My Podcast</title>
<link>http://www.mydomain.com/</link>
<description>My latest crazy-cool podcasts</description>
<item>
<title>My Podcast - 2007-07-01</title>
<enclosure url="http://www.mydomain.com/media/myPodcast.mp3" length="441540" type="audio/mp3" />
<guid>http://www.mydomain.com/podcasts/media/podcast-07-07-01.mp3</guid>
</item>
<item>
<title>My Podcast - 2007-07-08</title>
<enclosure url="http://mydomain.com/media/myPodcast.mp3" length="427639" type="audio/mp3" />
<guid>http://www.mydomain.com/podcasts/media/podcast-07-07-08</guid>
</item>
<item>
<title>My Podcast - 2007-07-15</title>
<enclosure url="http://mydomain.com/media/myPodcast.mp3" length="431086" type="audio/mp3" />
<guid>http://www.mydomain.com/podcasts/media/podcast-07-07-15</guid>
</item>
</channel>
</rss>
Character encoding
For widest compatibility, feeds should use UTF-8 character encoding. Not only should the text itself be UTF-8 encoded, but the XML header should explicitly confirm this as shown here:
<?xml version="1.0" encoding="UTF-8"?>
Enhancing your RSS feed
Adding thumbnail icons
Kinoma Player 4 EX can display a thumbnail icon for programs in RSS feeds. To add a thumbnail icon to a program, use a <media:thumbnail> element.
The <media:thumbnail> element is standardized as part of Yahoo’s Media RSS extensions to RSS. Note that when you use Media RSS extensions, you must add the Media RSS namespace declaration to your feed’s <rss> element, like this:
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss">
Kinoma Player 4 EX requires the following three attributes for the <media:thumbnail> element:
- url – A URI containing a Base64-encoded JPEG thumbnail image
- width – The width (in pixels) of the JPEG thumbnail image
- height – The height (in pixels) of the JPEG thumbnail image
In order for the thumbnail images to fit within the media browser entries, the width must be 44 pixels or less, and the height must be 22 pixels or less. In addition, the height should be evenly divisible by two. The following example specifies a 20 x 20 thumbnail image:
<media:thumbnail width="20" height="20"
url="data://image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3
kAAQAEAAAAZAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAAQEBAQEBAQEBAQEBAQEBA
QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAwMDAwMDAwMD
AwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
DAwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgAFAAUAwERAAIRAQMRAf/EAIUAAQADAA
AAAAAAAAAAAAAAAAgGBwoBAQEAAwEAAAAAAAAAAAAAAAcIBAUJBhAAAAQFAwMEA
gMAAAAAAAAAAwQFBgITFBUHARYXABIiESMkJSEYMycIEQAABAQEBQMDBQEAAAAA
AAABAgMEERITBSIUFQYAIRYHFzEyIzMkCFFCUkMZNP/aAAwDAQACEQMRAD8A2oZ
Sy26DL9M4kxssoTUOoaGXcWRcjr5GBXAZ5A9DqMnJCEimByqeecZkhDWjjHhKIk
TiD11gGjG00BkTvN34vTDuK37H9tHLJpvRRmV08fOETOgYoKnAiKbdmU6eZeLCM
5SqqERInLETnUKBVHbG0bWltw29t0kVVtVUyaDchwSrGIEVFFVoGFNEntwAJzGA
eZSlETQkZyZSbAIS61f9CJGYzRNvE3SYYTub+PEoFytoxO1DV0Ncx6kIyokBqsm
OAidECPkdRYfKESHSLTU5v2++/Hay3K71X3STdFqt5zpvLfcLM2ttRRuUTukWz1
kBBbvCEgJEHCS4FMJaolLER2duJ293Q6JZgthbau4KU6S7Z4q4EpFBgkodFc5wU
REfU5DJzAAyDHhB8zNHh/mn522dv3qhkh3ium0G2aebIv1++t7Jkqr/ABM7PPqo
/N+w/C/niuboTSNQmgFSSX6MsYV6v28k0tbDNDFx4foy9dYdEyl1fNUfXB+tSMI
05PljCMnOEeXAMz2lLjezPl4rAjt9TPZUTmw42gluw8cRmu+EVMabYYb5Z5tbJh
mdSasInoxmAOOIIaApGeKCjBRAx693M78kHF67OfmE77gPjGZW7cjG3LW1+ABKk
7tqaKQpgobACpFUSKyjDCdMRCBgEaE2ElYt3drkNu3Soe1t802fETKCipE3JlVE
1QTESiZMRUADgUxTHKVQpDAcAhVaS40S4JaymYVN4gQ2fjtOYi87H8tta7BMFvQ
HDbYx2xExlvh2V+gC7rAMKeOiFy4BUOLSHQyKJBoGebu/Kd9uHaV3Z3u+L3C3Ob
26u6rVRuZLM3h+mKKzkpVG6JlTrFCSCEyAepQLHnn2TsvtfZlzb3O1qNXV/TYJW
5oDUHJiJM0TgYAcncpJgRNMomkIUp1zqCE5ylIMV/x46/0w23ZB9xz+RNu0glyo
uXeWbPb/AOe/WL2af0m1nt9vf49Vj4P35/nB4lyp+utFzmVlGpNqus5ST1r0ft6
fuq4IR5cHnVdm876/WLpFbL1Y4f8AjyVWb0p1Mc3pJijDnwiMzcP7R/unb+2a4G
hvU2uvEsWn2zQffX6RM7Lb8uVM9PDv6sPvf4X6DX88aR0JME2oSyVIDLR/trwmk
y/zSzS8puC/ZnWGtF6JzWryj9H+HKNSOCnGEauCMI84cHfHn6YbrRNtz9xzym3e
ROXaK5TPr7Pyz9Ffp/pTyfmTe2X59vUedj/84OvGviXReupy5XOarNUjgyms/DX
j9PL/ACzQk5w4UN1+d9GW1+tpEo1cvk/b+6rkvkpw90+CEZuUeHH10h4A+P/Z" />
As shown above, the URI scheme must be “data”, and the MIME type and encoding must immediately follow the scheme. Hence each <media:thumbnail> element must start with:
data://image/jpeg;base64,
The Base64-encoded JPEG image data must follow. (While the above example spans multiple lines, the Base64-encoded string in the XML document must not include any line breaks.)
What is this "data://" thing in my URL?
Just like http:// and ftp://, data:// is another standard URL scheme. It is defined in RFC 2397.
Data URLs are great for small images because it allows them to be embedded directly into the feed, which can substantially reduce the time it takes to retrieve the feed. This makes them especially useful with mobile networks.
How the heck do I Base64-encode a JPEG file?
We used a web-based tool. The Resources section at the end of this tech note lists two web-based tools that you can use to convert your JPEG file to a Base64-encoded string.
Adding text summaries
Kinoma Player 4 EX supports the <itunes:summary> RSS extension, as shown here:
<itunes:summary>Eloquent summary of the July 1 podcast<itunes:summary>
Any text within the <itunes:summary> element will be used as the item's description both in Kinoma Player 4 EX’s detailed list view, and in any program’s Details screen.
If you use <itunes:summary> extension, you must declare that the feed uses the iTunes namespace as shown here:
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss">
Note that if you’re using both Media RSS extensions and iTunes extensions, you must to declare both as shown here:
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss" xmlns:media="http://search.yahoo.com/mrss">
Creating a basic OPML feed
At its simplest, an OPML looks like this:
<?xml version="1.0" encoding="UTF-8"?>
<opml xmlns:kinoma="http://schema.kinoma.com/opml">
<head>
<title>Sample</title>
<dateCreated>Wed, 16 May 2007 14:48:38</dateCreated>
<dateModified>Wed, 16 May 2007 14:48:38</dateModified>
<ownerName>John Doe</ownerName>
<ownerEmail>john@doe.com</ownerEmail>
</head>
<body>
<outline text="News">
<outline text="My 1st podcast" type="rss" xmlUrl="http://mydomain.com/feeds/podcast-1.xml" />
<outline text="My 2nd podcast" type="rss" xmlUrl="http://mydomain.com/feeds/podcast-2.xml" />
</outline>
</body>
</opml>
This example OPML will create a Kinoma Player 4 EX category called “Sample” which contains two RSS feeds (podcast-1.xml and podcast-2.xml).
Character encoding
For widest compatibility, OPML feeds should use UTF-8 character encoding. Not only should the text itself be UTF-8 encoded, but the XML header should explicitly confirm this as shown here:
<?xml version="1.0" encoding="UTF-8"?>
Enhancing your OPML feed
Adding thumbnail icons
As with RSS items, you can add icons to OPML items using the <media:thumbnail> element.
The <media:thumbnail> element must be a child of an <outline> element, as shown below. In this example, a thumbnail is associated with the “News” category. (Note that the Base64 data has been truncated for readability.)
<?xml version="1.0" encoding="UTF-8"?>
<opml xmlns:kinoma="http://schema.kinoma.com/opml" xmlns:media="http://search.yahoo.com/mrss/">
<head>
<title>Sample</title>
<dateCreated>Wed, 16 May 2007 14:48:38</dateCreated>
<dateModified>Wed, 16 May 2007 14:48:38</dateModified>
<ownerName>John Doe</ownerName>
<ownerEmail>john@doe.com</ownerEmail>
</head>
<body>
<outline text="News">
<media:thumbnail url="data://image/jpeg;base64,/9j/...+P/Z" width="20" height="20"/>
</outline>
</body>
</opml>
Using Kinoma extensions to OPML
Kinoma has defined three extensions to OPML, which offer you additional control over how your OPML data appears in Kinoma Play and Kinoma Player 4 EX.
If you use the Kinoma OPML extensions, you must declare the Kinoma namespace in your OPML file. This is done by adding the proper xmlns attribute to your <opml> element, as shows here:
xmlns:kinoma="http://schema.kinoma.com/opml"
Using the kinoma:description extension
We’ve defined an OPML extension called kinoma:description that allows you to provide a detailed description of an entry. This description appears on the second line in the media browser detailed view, as well as in the Kinoma Player 4 EX Details form.
<body>
<outline text="News" kinoma:description="A best-of collection of my excellent podcasts">
<outline text="My 1st podcast" type="rss" xmlUrl="http://mydomain.com/feeds/podcast-1.xml" />
<outline text="My 2nd podcast" type="rss" xmlUrl="http://mydomain.com/feeds/podcast-2.xml" />
</outline>
</body>
If you don’t define kinoma:description, the description will be empty.
Using the kinoma:hideurlextension
The OPML extension kinoma:hideurl is used to suppress the display of URLs in the Kinoma Player 4 EX user interface. If you want to hide the URL to any of your feeds, set the value of this attribute to “true”.
<outline text="My podcast" type="rss" kinoma:hideurl="true" xmlUrl="http://www.mydomain.com/podcasts/myPodcast.rss" />
Using the kinoma:stemming extension
Stemming is a feature of Kinoma Player 4 EX that tries to make titles more easily viewable on a small-screen device. For example, the example OPML below uses channel titles that are too long for a small-screen device, making it likely that the most important parts would be truncated.
<body>
<outline text="CNN Headline News">
<outline text="CNN Headline News - World" type="rss" xmlUrl="http://cnn.com/podcasts/hln-world.rss" />
<outline text="CNN Headline News - U.S." type="rss" xmlUrl="http://cnn.com/podcasts/hln-us.rss" />
<outline text="CNN Headline News - Politics" type="rss" xmlUrl="http://cnn.com/rss/hln-pol.rss" />
<outline text="CNN Headline News - Entertainment" type="rss" xmlUrl="http://cnn.com/rss/hln-ent.rss" />
<outline text="CNN Headline News - Health" type="rss" xmlUrl="http://cnn.com/rss/hln-health.rss" />
<outline text="CNN Headline News - Tech" type="rss" xmlUrl="http://http://cnn.com/rss/hln-tech.rss" />
<outline text="CNN Headline News - Travel" type="rss" xmlUrl="http://cnn.com/rss/hln-travel.rss" />
<outline text="CNN Headline News - Living" type="rss" xmlUrl="http://cnn.com/rss/hln-living.rss" />
<outline text="CNN Headline News - Business" type="rss" xmlUrl="http://cnn.com/rss/hln-buz.rss" />
<outline text="CNN Headline News - Sports" type="rss" xmlUrl="http://cnn.com/rss/hln-sports.rss" />
</outline>
</body>
To avoid this, Kinoma Player 4 EX will automatically identify the part that’s common to all channel titles (“CNN Headline News - ”) and trim it off in order to maintain readability. The result is exactly the same as if you’d defined the OPML like this:
<body>
<outline text="CNN Headline News">
<outline text="World" type="rss" xmlUrl="http://cnn.com/podcasts/hln-world.rss" />
<outline text="U.S." type="rss" xmlUrl="http://cnn.com/podcasts/hln-us.rss" />
<outline text="Politics" type="rss" xmlUrl="http://cnn.com/rss/hln-pol.rss" />
<outline text="Entertainment" type="rss" xmlUrl="http://cnn.com/rss/hln-ent.rss" />
<outline text="Health" type="rss" xmlUrl="http://cnn.com/rss/hln-health.rss" />
<outline text="Tech" type="rss" xmlUrl="http://http://cnn.com/rss/hln-tech.rss" />
<outline text="Travel" type="rss" xmlUrl="http://cnn.com/rss/hln-travel.rss" />
<outline text="Living" type="rss" xmlUrl="http://cnn.com/rss/hln-living.rss" />
<outline text="Business" type="rss" xmlUrl="http://cnn.com/rss/hln-buz.rss" />
<outline text="Sports" type="rss" xmlUrl="http://cnn.com/rss/hln-sports.rss" />
</outline>
</body>
The OPML extension kinoma:stemming is used to prevent Kinoma Player 4 EX from “stemming” the OPML entries. This extension is represented as an attribute of the <opml> element.
To force Kinoma Player 4 EX to show full channel titles regardless of length, set the kinoma:stemming attribute to “false”.
<opml xmlns:kinoma="http://schema.kinoma.com/opml" kinoma:stemming="false">
If you don’t define kinoma:stemming, the default is “true”.
Validate your feeds
It’s crucial to create a valid podcast feeds, so that users see and hear what you intended. We like to use these validators:
Feed Validator
Feed Validator works for all RSS and Atom feeds, including podcast feeds.
OPML Validator
This is technically in beta, but it’s the best OPML validator that we know of.
Internet Explorer
Both RSS and OPML feeds must be valid XML documents.
On Windows, a quick way to confirm that a feed is valid XML is to open it with Internet Explorer. If the file is not valid XML, Internet Explorer will tell you where the problem is.
Feed compression
Kinoma Player 4 EX supports gzip-compressed RSS and OPML feeds. This can reduce the amount of data transferred by up to 80%, so we strongly recommend it for delivering feeds.
Most web servers (including Apache and Microsoft IIS) support on-the-fly gzip compression, which means that you won’t need to make any changes to the feeds themselves.
Your IT department can help set this up. If you are the IT department, it's reasonably straightforward, and you can learn the details in your web server's documentation.
With Apache 2.x, for example, this can be as easy as putting an .htaccess file containing SetOutputFilter DEFLATE in the same directory as the feeds that you want to deliver compressed.
Resources
Media RSS specification
Base64 Encoder (web-based Base64 encoder)
http://www.opinionatedgeek.com/dotnet/tools/Base64Encode/
To convert a file to a Base64 string suitable for icon data, click the Browse button, choose your JPEG file, and then click Encode to create the Base64 string representing the encoded version of your file.
Base64 Online (web-based Base64 encoder)
http://www.motobit.com/util/base64-decoder-encoder.asp
Click the Browse button to choose your JPEG file, then click Convert the source data to create the Base64 string representing the encoded version of your file.

