kopia lustrzana https://github.com/Podcastindex-org/podcast-namespace
formalize alternateEnclosure tag
rodzic
9cca621413
commit
0bc285ce0c
94
README.md
94
README.md
|
@ -131,97 +131,19 @@ full implementation details.
|
|||
|
||||
### <u>Phase 3 (Closed on 6/1/21)</u>
|
||||
|
||||
The following tags have been finalized ahead of formal consideration and review after June 1st, 2021.
|
||||
|
||||
<br>
|
||||
|
||||
The following tags have been formally adopted into the namespace. They are fully documented in the XMLNS document located [here](docs/1.0.md). Please see that file for
|
||||
full implementation details.
|
||||
|
||||
- **\<podcast:trailer>** <br>
|
||||
- **\<podcast:license>** <br>
|
||||
- **\<podcast:alternateEnclosure>** <br>
|
||||
- **\<podcast:source>** <br>
|
||||
- **\<podcast:integrity>** <br>
|
||||
|
||||
### **\<podcast:alternateEnclosure>** - <small>[Discussion](https://github.com/Podcastindex-org/podcast-namespace/issues/174#issue-798007719)</small>
|
||||
<br>
|
||||
|
||||
<b>
|
||||
|
||||
```xml
|
||||
<podcast:alternateEnclosure
|
||||
type="[mime type]"
|
||||
length="[(int)]"
|
||||
bitrate="[(float)]"
|
||||
height="[(int)]"
|
||||
lang="[(string)]"
|
||||
title="[(string)]"
|
||||
rel="[(string)]"
|
||||
codecs="[(string)]"
|
||||
default="[(boolean)]"
|
||||
>
|
||||
[one or more <podcast:source> elements]
|
||||
</podcast:alternateEnclosure>
|
||||
```
|
||||
|
||||
</b>
|
||||
|
||||
Item
|
||||
|
||||
(optional | multiple)
|
||||
|
||||
This element defines a media file. One or more <podcast:source> tags must be contained within this element to list available methods to obtain the file. This is meant to provide different
|
||||
versions of a media file -- such as low or high bitrate, alternate formats (different codecs or video), alternate URI schemes (IPFS or live streaming), or alternate download types not
|
||||
indicated by the URI and type (like torrents).
|
||||
|
||||
This is a complex tag. The full documentation is [here](https://github.com/Podcastindex-org/podcast-namespace/blob/main/proposal-docs/alternateEnclosure/alternateEnclosure.md). Please
|
||||
read that document to understand and comment on this proposal.
|
||||
|
||||
Example:
|
||||
```xml
|
||||
<enclosure url="https://best-podcast.com/file-0.mp3" length="43200000" type="audio/mpeg" />
|
||||
|
||||
<podcast:alternateEnclosure type="audio/mpeg" length="43200000" bitrate="128000" default="true" title="Standard">
|
||||
<podcast:source uri="https://best-podcast.com/file-0.mp3" />
|
||||
<podcast:source uri="ipfs://someRandomMpegFile" />
|
||||
</podcast:alternateEnclosure>
|
||||
|
||||
<podcast:alternateEnclosure type="audio/opus" length="32400000" bitrate="96000" title="High quality">
|
||||
<podcast:source uri="https://best-podcast.com/file-high.opus" />
|
||||
<podcast:source uri="ipfs://someRandomHighBitrateOpusFile" />
|
||||
</podcast:alternateEnclosure>
|
||||
|
||||
<podcast:alternateEnclosure type="audio/aac" length="54000000" bitrate="160000" title="High quality AAC">
|
||||
<podcast:source uri="https://best-podcast.com/file-proprietary.aac" />
|
||||
<podcast:source uri="ipfs://someRandomProprietaryAACFile" />
|
||||
</podcast:alternateEnclosure>
|
||||
|
||||
<podcast:alternateEnclosure type="audio/opus" length="5400000" bitrate="16000" title="Low bandwidth">
|
||||
<podcast:source uri="https://best-podcast.com/file-low.opus" />
|
||||
<podcast:source uri="ipfs://someRandomLowBitrateOpusFile" />
|
||||
</podcast:alternateEnclosure>
|
||||
```
|
||||
|
||||
Example:
|
||||
```xml
|
||||
<podcast:alternateEnclosure type="audio/mpeg" length="2490970" bitrate="160707.74">
|
||||
<podcast:source uri="https://best-podcast.com/file-0.mp3" />
|
||||
<podcast:source uri="ipfs://QmdwGqd3d2gFPGeJNLLCshdiPert45fMu84552Y4XHTy4y" />
|
||||
<podcast:source uri="https://best-podcast.com/file-0.torrent" contentType="application/x-bittorrent" />
|
||||
<podcast:source uri="http://somerandom.onion/file-0.mp3" />
|
||||
</podcast:alternateEnclosure>
|
||||
|
||||
<podcast:alternateEnclosure type="video/mp4" length="10562995" bitrate="681483.55" height="1080">
|
||||
<podcast:source uri="https://best-podcast.com/file-1080.mp4" />
|
||||
<podcast:source uri="ipfs://QmfQKJcp2xdByEt8mzWr1AJUhwvb9rdWPoacvdq2roDhgh" />
|
||||
<podcast:source uri="https://best-podcast.com/file-1080.torrent" contentType="application/x-bittorrent" />
|
||||
<podcast:source uri="http://somrandom.onion/file-1080.mp4" />
|
||||
</podcast:alternateEnclosure>
|
||||
|
||||
<podcast:alternateEnclosure type="video/mp4" length="7924786" bitrate="511276.52" height="720">
|
||||
<podcast:source uri="https://best-podcast.com/file-720.mp4" />
|
||||
<podcast:source uri="ipfs://QmX33FYehk6ckGQ6g1D9D3FqZPix5JpKstKQKbaS8quUFb" />
|
||||
<podcast:source uri="https://best-podcast.com/file-720.torrent" contentType="application/x-bittorrent" />
|
||||
<podcast:source uri="http://somrandom.onion/file-720.mp4" />
|
||||
</podcast:alternateEnclosure>
|
||||
```
|
||||
|
||||
|
||||
<br><br>
|
||||
|
||||
|
||||
### <u>Phase 4 (Open for Proposals)</u>
|
||||
|
||||
|
|
131
docs/1.0.md
131
docs/1.0.md
|
@ -332,4 +332,133 @@ must be a free form abbreviation of the name of the license as you reference it
|
|||
#### Examples
|
||||
`<podcast:license>cc-by-4.0</podcast:license>`
|
||||
|
||||
`<podcast:license url="https://example.org/mypodcastlicense/full.pdf">my-podcast-license-v1</podcast:license>`
|
||||
`<podcast:license url="https://example.org/mypodcastlicense/full.pdf">my-podcast-license-v1</podcast:license>`
|
||||
|
||||
<br><br>
|
||||
|
||||
|
||||
## Alternate Enclosure
|
||||
`<podcast:alternateEnclosure>`
|
||||
This element is meant to provide different versions of, or companion media to the main `<enclosure>` file. This could be an audio only version of a video podcast to allow apps to switch back and forth between audio/video,
|
||||
lower (or higher) bitrate versions for bandwidth constrained areas, alternative codecs for different device platforms, alternate URI schemes and download types such as IPFS or WebTorrent, commentary tracks or supporting source clips, etc.
|
||||
This is a complex tag, so implementors are highley encouraged to read the companion [document](https://github.com/Podcastindex-org/podcast-namespace/blob/main/proposal-docs/alternateEnclosure/alternateEnclosure.md) for a fuller understanding of how
|
||||
this tag works and what it's capable of.
|
||||
|
||||
#### Parent
|
||||
`<item>`
|
||||
|
||||
#### Count
|
||||
Multiple
|
||||
|
||||
#### Node Value
|
||||
The node value must be one or more `<podcast:source>` elements that each define a uri where the parent `<podcast:alternateEnclosure>` can be downloaded or streamed.
|
||||
|
||||
#### Attributes
|
||||
- **type:** (required) Mime type of the media asset.
|
||||
- **length:** (required) Length of the file in bytes.
|
||||
- **bitrate:** (optional) Encoding bitrate of media asset.
|
||||
- **height:** (optional) Height of the media asset for video formats.
|
||||
- **lang:** (optional) An [IETF language tag (BCP 47)](https://en.wikipedia.org/wiki/BCP_47) code identifying the language of this media.
|
||||
- **title:** (optional) A human-readable string identifying the name of the media asset. Should be limited to 32 characters for UX.
|
||||
- **rel:** (optional) Provides a method of offering and/or grouping together different media elements. If not set, or set to "default", the media will be grouped with the enclosure and assumed to be an alternative to the enclosure's encoding/transport. This attribute can and should be the same for items with the same content encoded by different means. Should be limited to 32 characters for UX.
|
||||
- **codecs:** (optional) An [RFC 6381](https://tools.ietf.org/html/rfc6381) string specifying the codecs available in this media.
|
||||
- **default:** (optional) Boolean specifying whether or not the given media is the same as the file from the enclosure element and should be the preferred media element. The primary reason to set this is to offer alternative transports for the enclosure. If not set, this should be assumed to be false.
|
||||
|
||||
#### Examples
|
||||
```xml
|
||||
<enclosure url="https://best-podcast.com/file-0.mp3" length="43200000" type="audio/mpeg" />
|
||||
|
||||
<podcast:alternateEnclosure type="audio/mpeg" length="43200000" bitrate="128000" default="true" title="Standard">
|
||||
<podcast:source uri="https://example.com/file-0.mp3" />
|
||||
<podcast:source uri="ipfs://someRandomMpegFile" />
|
||||
</podcast:alternateEnclosure>
|
||||
|
||||
<podcast:alternateEnclosure type="audio/opus" length="32400000" bitrate="96000" title="High quality">
|
||||
<podcast:source uri="https://example.com/file-high.opus" />
|
||||
<podcast:source uri="ipfs://someRandomHighBitrateOpusFile" />
|
||||
</podcast:alternateEnclosure>
|
||||
|
||||
<podcast:alternateEnclosure type="audio/aac" length="54000000" bitrate="160000" title="High quality AAC">
|
||||
<podcast:source uri="https://example.com/file-proprietary.aac" />
|
||||
<podcast:source uri="ipfs://someRandomProprietaryAACFile" />
|
||||
</podcast:alternateEnclosure>
|
||||
|
||||
<podcast:alternateEnclosure type="audio/opus" length="5400000" bitrate="16000" title="Low bandwidth">
|
||||
<podcast:source uri="https://example.com/file-low.opus" />
|
||||
<podcast:source uri="ipfs://someRandomLowBitrateOpusFile" />
|
||||
</podcast:alternateEnclosure>
|
||||
```
|
||||
|
||||
```xml
|
||||
<podcast:alternateEnclosure type="audio/mpeg" length="2490970" bitrate="160707.74">
|
||||
<podcast:source uri="https://example.com/file-0.mp3" />
|
||||
<podcast:source uri="ipfs://QmdwGqd3d2gFPGeJNLLCshdiPert45fMu84552Y4XHTy4y" />
|
||||
<podcast:source uri="https://example.com/file-0.torrent" contentType="application/x-bittorrent" />
|
||||
<podcast:source uri="http://example.onion/file-0.mp3" />
|
||||
</podcast:alternateEnclosure>
|
||||
|
||||
<podcast:alternateEnclosure type="video/mp4" length="10562995" bitrate="681483.55" height="1080">
|
||||
<podcast:source uri="https://example.com/file-1080.mp4" />
|
||||
<podcast:source uri="ipfs://QmfQKJcp2xdByEt8mzWr1AJUhwvb9rdWPoacvdq2roDhgh" />
|
||||
<podcast:source uri="https://example.com/file-1080.torrent" contentType="application/x-bittorrent" />
|
||||
<podcast:source uri="http://example.onion/file-1080.mp4" />
|
||||
</podcast:alternateEnclosure>
|
||||
```
|
||||
|
||||
<br><br>
|
||||
|
||||
|
||||
## Source
|
||||
`<podcast:source>`
|
||||
This element defines a uri location for a `<podcast:alternateEnclosure>` media file. It is meant to be used as a child of the `<podcast:alternateEnclosure>` element.
|
||||
|
||||
#### Parent
|
||||
`<podcast:alternateEnclosure>`
|
||||
|
||||
#### Count
|
||||
Multiple
|
||||
|
||||
#### Node Value
|
||||
None
|
||||
|
||||
#### Attributes
|
||||
- **uri:** (required) This is the uri where a media file resides.
|
||||
|
||||
#### Examples
|
||||
```xml
|
||||
<podcast:alternateEnclosure type="video/mp4" length="7924786" bitrate="511276.52" height="720">
|
||||
<podcast:source uri="https://example.com/file-720.mp4" />
|
||||
<podcast:source uri="ipfs://QmX33FYehk6ckGQ6g1D9D3FqZPix5JpKstKQKbaS8quUFb" />
|
||||
<podcast:source uri="https://example.com/file-720.torrent" contentType="application/x-bittorrent" />
|
||||
<podcast:source uri="http://example.onion/file-720.mp4" />
|
||||
</podcast:alternateEnclosure>
|
||||
```
|
||||
|
||||
<br><br>
|
||||
|
||||
|
||||
## Integrity
|
||||
`<podcast:integrity>`
|
||||
This element defines a method of verifying integrity of the media given either an [SRI-compliant integrity string](https://www.w3.org/TR/SRI/) or a base64 encoded PGP signature.
|
||||
|
||||
#### Parent
|
||||
`<podcast:alternateEnclosure>`
|
||||
|
||||
#### Count
|
||||
Multiple
|
||||
|
||||
#### Node Value
|
||||
None
|
||||
|
||||
#### Attributes
|
||||
- **type:** (required) Type of integrity, either "sri" or "pgp-signature".
|
||||
- **value:** (required) Value of the sri string or base64 encoded pgp signature.
|
||||
|
||||
#### Examples
|
||||
```xml
|
||||
<podcast:alternateEnclosure type="video/mp4" length="7924786" bitrate="511276.52" height="720">
|
||||
<podcast:source uri="https://example.com/file-720.mp4" />
|
||||
<podcast:source uri="ipfs://QmX33FYehk6ckGQ6g1D9D3FqZPix5JpKstKQKbaS8quUFb" />
|
||||
<podcast:integrity type="sri" value="sha384-ExVqijgYHm15PqQqdXfW95x+Rs6C+d6E/ICxyQOeFevnxNLR/wtJNrNYTjIysUBo" />
|
||||
</podcast:alternateEnclosure>
|
||||
```
|
Ładowanie…
Reference in New Issue