liveItem refactor

pull/331/head
Dave Jones 2022-01-20 09:41:14 -06:00
rodzic 24300f2470
commit dbd95dc01f
1 zmienionych plików z 69 dodań i 22 usunięć

Wyświetl plik

@ -756,8 +756,16 @@ Example of specifying four different image sizes:
<br><br><br><br><!-- Tag block -->
## Live Item
`<podcast:liveItem>`<br><br>
The `liveItem` tag is used for a feed to deliver a live stream to podcast apps. It takes the same format as a standard `<item>` episode tag, and all tags that are allowed inside of
a normal `<item>` tag are also allowed as children of `<podcast:liveItem>`. Podcast apps should support both `<enclosure>` and `<podcast:alternateEnclosure>` for greatest compatibility.
The `liveItem` tag is used for a feed to deliver a live audio or video stream to podcast apps. It takes the same format as a standard `<item>` episode tag, and all tags that are
allowed inside of a normal `<item>` tag are also allowed as children of `<podcast:liveItem>`.
The [`<podcast:alternateEnclosure>`](#alternate-enclosure) tag is highly encouraged over the use of `<enclosure>` since it gives the broadest coverage of possible stream types and is
much more explicit in it's definition of what transport protocol and media codecs are being used. If `<podcast:alternateEnclosure>` cannot be used, `<enclosure>` can be used as a fallback,
however feed owners must limit the stream to using only the two most widely supported protocols (mp3 and mp4/h.264) to ensure compatibility with the broadest number of apps on various
platforms. Choosing a streaming format for `<enclosure>` outside of this narrow list will exclude many apps from playing your content.
The `<podcast:contentLink>` tag is also highly encouraged to ensure that listeners have a fallback option in case their chosen app cannot play the given content stream directly. Podcasters
who live stream to multiple platforms at once can also use the `<podcast:contentLink>` tag to provide links to those various platforms.
The `start` and `end` attributes denote when the live stream "should" start and end. But, real life dictates that those times might not be adhered to. Apps are therefore encouraged
not to rely solely on those times as anything more than an approximation. The canonical way to know if a stream has started is with the `status` attribute. If `status` is "live" then
@ -766,6 +774,9 @@ the stream has started.
This tag will also make use of the [podping](https://podping.cloud) notification network. A podping notification SHOULD be sent out by the host when the live stream starts, to let
apps know.
The function of `<guid>` within a live item tag is the same as it is within a regular item. If the `<guid>` of a `<podcast:liveItem>` changes, it MUST be considered a new stream by
podcast apps.
### Parent
&nbsp; `<channel>`
@ -774,7 +785,8 @@ apps know.
### Node Value
All tags that are valid inside of a standard `<item>` tag are also valid here. The [`alternateEnclosure`](#alternate-enclosure) tag has robust support for specifying streaming content
in a myriad of ways and is encouraged over `<enclosure>` where possible.
in a myriad of ways and is highly encouraged over the use of `<enclosure>` where possible. A `<podcast:contentLink>` tag is also highly encouraged as a fallback for apps to display when
they cannot play the content directly.
### Attributes
- **status** (required) A string that must be one of `pending`, `live` or `ended`.
@ -782,32 +794,18 @@ in a myriad of ways and is encouraged over `<enclosure>` where possible.
- **end** (required) A string representing an ISO8601 timestamp that denotes the time when the stream is intended to end.
### Examples
A very simple example:
A complete example:
```xml
<podcast:liveItem status="live" start="2021-09-26T07:30:00.000-0600" end="2021-09-26T09:30:00.000-0600">
<title>Podcasting 2.0 Live Show</title>
<guid>e32b4890-983b-4ce5-8b46-f2d6bc1d8819</guid>
<author>John Doe (john@example.com)</author>
<enclosure url="https://example.com/pc20/livestream" type="audio/mpeg" length="312" />
</podcast:liveItem>
```
A more complex example:
```xml
<podcast:liveItem
status="live"
start="2021-09-26T07:30:00.000-0600"
end="2021-09-26T09:30:00.000-0600"
>
<title>Podcasting 2.0 Live Show</title>
<description>A look into the future of podcasting and how we get to Podcasting 2.0!</description>
<link>https://example.com/podcast/live</link>
<guid isPermaLink="true">https://example.com/live</guid>
<author>John Doe (john@example.com)</author>
<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"
<podcast:images srcset="https://example.com/images/live/pci_avatar-massive.jpg 1500w,
https://example.com/images/live/pci_avatar-middle.jpg 600w,
https://example.com/images/live/pci_avatar-small.jpg 300w,
https://example.com/images/live/pci_avatar-tiny.jpg 150w"
/>
<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>
@ -815,5 +813,54 @@ A more complex example:
<podcast:alternateEnclosure type="audio/mpeg" length="312" default="true">
<podcast:source uri="https://example.com/pc20/livestream" />
</podcast:alternateEnclosure>
<enclosure url="https://example.com/pc20/livestream?format=.mp3" type="audio/mpeg" length="312" />
<podcast:contentLink href="https://youtube.com/pc20/livestream">YouTube!</podcast:contentLink>
<podcast:contentLink href="https://twitch.com/pc20/livestream">Twitch!</podcast:contentLink>
<podcast:contentLink href="https://example.com/html/livestream">Listen Live!</podcast:contentLink>
</podcast:liveItem>
```
A bare bones example:
```xml
<podcast:liveItem status="live" start="2021-09-26T07:30:00.000-0600" end="2021-09-26T09:30:00.000-0600">
<title>Podcasting 2.0 Live Stream</title>
<guid>e32b4890-983b-4ce5-8b46-f2d6bc1d8819</guid>
<enclosure url="https://example.com/pc20/livestream?format=.mp3" type="audio/mpeg" length="312" />
<podcast:contentLink href="https://example.com/html/livestream">Listen Live!</podcast:contentLink>
</podcast:liveItem>
```
<br><br><br><br><!-- Tag block -->
## Content Link
`<podcast:contentLink>`<br><br>
The `contentLink` tag is used in multiple tags to indicate that the content begin delivered by the parent element can be found at an external location
instead of, or in addition to, being delivered directly to the tag itself within an app. In most instances it is used as a fallback link for the user
to use when the app itself can't handle a certain content delivery directly.
For instance, perhaps a podcast feed specifies a `<podcast:liveItem>` to deliver a live stream to apps. The feed may also give a `<podcast:contentLink>`
pointing to YouTube and Twitch versions of the live stream as well, just in case the listener uses an app that doesn't fully support live streaming content.
Currently this tag is only indicated for use in the `<podcast:liveItem>` tag. In the future, its use will be expanded.
### Parent
&nbsp; `<podcast:liveItem>`
### Count
&nbsp; Multiple
### Node Value
The node value is a free form string meant to explain to the user where this content link points and/or the nature of it's purpose.
### Attributes
- **href** (required) A string that is the uri pointing to content outside of the application.
### Examples
```xml
<podcast:contentLink href="https://youtube.com/blahblah/livestream">Live on YouTube!</podcast:contentLink>
```
```xml
<podcast:contentLink href="https://twitter.com/statuses/somepost">Chat on Twitter!</podcast:contentLink>
```