4.4 KiB
File Thumbnails
Introduction
When sending media, it is often helpful for users when a thumbnail can be shown before the actual file is finished downloading.
XMPP already has a protocol for specifying thumbails, Jingle Content Thumbnails. However, this protocol requires that the thumbnail is a base64-encoded image published using Bits of Binary. This prevents clients from implementing newer technologies, such as Blurhash.
This document specifies are more general and extensible element for specifiying thumbnails.
Usage
<file-thumbnail type="proto:urn:xmpp:file-thumbnails:0:blurhash" xmlns="proto:urn:xmpp:file-thumbnails:0">
<blurhash>LEHV6nWB2yk8pyoJadR*.7kCMdnj</blurhash>
</thumbnail>
In this example, the thumbnail is specified of type proto:urn:xmpp:file-thumbnails:0:blurhash
, which means that a supporting
client should decode the <blurhash/>
element using the Blurhash algorithm.
In order to enable a sort-of interoperability with Jingle Content Thumbnails, a type
proto:urn:xmpp:file-thumbnails:0:jct
is defined.
<file-thumbnail type="proto:urn:xmpp:file-thumbnails:0:jct" xmlns="proto:urn:xmpp:file-thumbnails:0">
<thumbnail xmlns="urn:xmpp:thumbs:1" uri="..." media-type="image/png" width="128" height="96" />
</thumbnail>
In the case of Jingle Content Thumbnails compatibility,
the <file-thumbnail />
element must contain exactly one <thumbnail xmlns="urn:xmpp:thumbs:1" />
element.
Other extensions may define similar types. Note that the content of the <file-thumbnail />
element
is dependent on the type specified in the <file-thumbnail xmlns="proto:urn:xmpp:file-thumbnails:0" />
element.
Thumbnail Types
Blurhash
If a sender specifies the type to be of proto:urn:xmpp:file-thumbnails:0:blurhash
, then the <file-thumbnail />
element must contain the
image data as specified by the Blurhash algorithm. Care should be taken to prevent
the blurhash data from growing to large in order to prevent hitting the stanza size limit.
Jingle Content Thumbnail Compatability
If a sender specified the type to be of proto:urn:xmpp:file-thumbnails:0:jct
, then the <file-thumbnail />
element must contain exactly one <thumbnail xmlns="urn:xmpp:thumbs:1" />
element.
Usage Example with Stateless Inline Media Sharing
NOTE: This example is taken from Stateless Inline Media Sharing and modified for this protocol.
<message to='julient@shakespeare.lit' from='romeo@montague.lit'>
<body>Look at the nice view from the summit.</body>
<reference xmlns='urn:xmpp:reference:0' begin='17' end='20' type='data'>
<media-sharing xmlns='urn:xmpp:sims:1'>
<file xmlns='urn:xmpp:jingle:apps:file-transfer:5'>
<media-type>image/jpeg</media-type>
<name>summit.jpg</name>
<size>3032449</size>
<hash xmlns='urn:xmpp:hashes:2' algo='sha3-256'>2XarmwTlNxDAMkvymloX3S5+VbylNrJt/l5QyPa+YoU=</hash>
<hash xmlns='urn:xmpp:hashes:2' algo='id-blake2b256'>2AfMGH8O7UNPTvUVAM9aK13mpCY=</hash>
<desc>Photo from the summit.</desc>
<file-thumbnail type="proto:proto:urn:xmpp:file-thumbnails:0:jct" xmlns='urn:xmpp:thumbnail:0'>
<thumbnail xmlns='urn:xmpp:thumbs:1'uri='cid:sha1+ffd7c8d28e9c5e82afea41f97108c6b4@bob.xmpp.org' media-type='image/png' width='128' height='96'/>
</thumbnail>
<file-thumbnail type="proto:urn:xmpp:file-thumbnails:0:blurhash" xmlns='proto:urn:xmpp:file-thumbnails:0'>
<blurhash>LEHV6nWB2yk8pyoJadR*.7kCMdnj</blurhash>
</thumbnail>
</file>
<sources>
<reference xmlns='urn:xmpp:reference:0' type='data' uri='https://download.montague.lit/4a771ac1-f0b2-4a4a-9700-f2a26fa2bb67/summit.jpg' />
<reference xmlns='urn:xmpp:reference:0' type='data' uri='xmpp:romeo@montague.lit/resource?jingle;id=9559976B-3FBF-4E7E-B457-2DAA225972BB' />
</sources>
</media-sharing>
</reference>
</message>
Security Considerations
The same considerations apply as specified by Jingle Content Thumbnails.
Info
Key | Value |
---|---|
Author | PapaTutuWawa |
Version | 0.0.2 |