Architecture Proposal
In order to settle on a tag, its important to settle on the usage of the system as a whole.
Conventions
To help with the example I use the following terms and conventions:
bold = subsystem
Terms
| Subsystem: |
creator |
publisher |
advertiser |
provider |
endpoint |
| Description: |
Podcaster |
Podcasting Host |
Index |
Application |
Consumer Device |
| Examples: |
No Agenda, Daily Tech News |
Podbean, Self Hosted, Blubrry, BuzzSprout, PodBean, Youtube, Facebook Live |
iTunes, Podcast Index |
Hypercatcher, PlayaPod, Podfriend |
iOS app, Google app, GrapheneOS app, Website |
Considerations
- This solution attempts to maintain a fluid model whereby any subsystem could be handled by a single operator, and is not wholly dependent upon any one member of the supply chain
- Ex.1 a user should be able to enter a RSS for a podcast into their endpoint, and the provider could arguably retrieve the xml, parse the tag, subscribe and provide the stream to the user without any other involvement.
- Ex.2 A podcaster should be able to stand up their own repository and self-publish, combining the creator and publisher subsystems into one. Similarly, an endpoint could act as provider as well all within the application, such as with a browser plugin.
Proposed Use Case - A publisher model with centralized aggregation and decentralized propagation of notification

Note: The use of RTMP was chosen to provide a specific mechanism, but could be replaced with others interchangeably
- Publishing the podcast as supported
- The creator indicates as a show
- This is a publisher interface, maybe a checkbox? Its basically there to prompt the publisher to make sure there is a tag and it gets populated.
- The publisher adds tag to XML with stream source, stream notifier subscription address
- This is the area of open question. It may be simple enough to have the stream address be fully qualified with the protocol and that would allow the standard to evolve with protocols.
- My narrow view is RTMP, but there may be a better choice. I suppose the address could be an http(s) which could point a user to the big-tech options or a publisher based WebRTC.
- The advertiser updates the Index with the stream address, and the publisher subscription address
- Would be an address that accepts POST whose payload includes the provider webhook for start/stop notification.
- Subscribing to a show
- provider enrolls in stream notification from publisher by posting the provider webhooks address to the publisher stream subscription address
- Going Live with podcast
- The creator pushes stream to publisher
- I envision this utilizing RTMP or RTMPS - one advantage here is the built in functionality of RTMP to fire events on stream start, such as a routine to notify the downstream consumers
- The creator announces stream to publisher
- With RTMP(S), this can be as simple as pushing the stream to the publisher, or could require a user to push a "go live" button on their panel.
- The publisher announces stream to provider
- The provider announces stream to endpoint
- The endpoint accesses the stream utilizing the publisher stream address
Proposed Enclosures
<podcast:live>
<item>
<title>Podcasting 2.0 Live Show</title>
<description><p>A look into the future of podcasting and how we get to Podcasting 2.0!</p></description>
<link>https://example.com/podcast/live</link>
<guid isPermaLink="true">https://example.com/live</guid>
<author>John Doe (john@example.com)</author>
<podcast:scheduledstart>Fri, 09 Oct 2020 04:30:00 GMT</live:scheduledstart>
<podcast:scheduledend>Fri, 09 Oct 2020 07:30:00 GMT</live:scheduledend>
<itunes:image>https://example.com/ep0003/artMd.jpg</itunes:image>
<podcast:images srcset="https://example.com/images/ep3/pci_avatar-massive.jpg 1500w,
https://example.com/images/ep3/pci_avatar-middle.jpg 600w,
https://example.com/images/ep3/pci_avatar-small.jpg 300w,
https://example.com/images/ep3/pci_avatar-tiny.jpg 150w" />
<itunes:explicit>no</itunes:explicit>
<podcast:season name="Podcasting 2.0">1</podcast:season>
<podcast:episode>3</podcast:episode>
<podcast:person href="https://www.podchaser.com/creators/adam-curry-107ZzmWE5f" img="https://example.com/images/adamcurry.jpg">Adam Curry</podcast:person>
<podcast:person role="guest" href="https://github.com/daveajones/" img="https://example.com/images/davejones.jpg">Dave Jones</podcast:person>
<podcast:person group="visuals" role="cover art designer" href="https://example.com/artist/beckysmith">Becky Smith</podcast:person>
<enclosure url="rtmps://live.example.com/live.mp3" type="audio/mpeg"/>
<podcast:subscribe url="https://live.example.com/subscribe"/>
</item>
</podcast:live>
Concerns
<podcast:scheduledstart> could be a discrete time, or a pattern? Having someone update their XML and hope that it propagates to their subscribers in time is worrisome.
<podcast:scheduledstop> could be a disaster. I don't even know if anyone would care...
<title> & <podcast:episode> are either redundant or useless. I'm not sure they are helpful in the context. The <channel> text is probably the most helpful here and <podcast:episode> suffers from the same issue as <scheduledstart>.
Architecture Proposal
In order to settle on a tag, its important to settle on the usage of the system as a whole.
Conventions
To help with the example I use the following terms and conventions:
bold = subsystem
Terms
Considerations
Proposed Use Case - A publisher model with centralized aggregation and decentralized propagation of notification
Note: The use of RTMP was chosen to provide a specific mechanism, but could be replaced with others interchangeably
Proposed Enclosures
Concerns
<podcast:scheduledstart>could be a discrete time, or a pattern? Having someone update their XML and hope that it propagates to their subscribers in time is worrisome.<podcast:scheduledstop>could be a disaster. I don't even know if anyone would care...<title>&<podcast:episode>are either redundant or useless. I'm not sure they are helpful in the context. The<channel>text is probably the most helpful here and<podcast:episode>suffers from the same issue as<scheduledstart>.