add simple video player to embed
This commit is contained in:
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"><path fill="#fff" d="M6.514 2.143A1 1 0 0 0 5 3v18a1 1 0 0 0 1.514.858l15-9a1 1 0 0 0 0-1.716l-15-9Z"/></svg>
|
||||||
|
After Width: | Height: | Size: 182 B |
@@ -14,7 +14,7 @@ import {ComponentChildren, h} from 'preact'
|
|||||||
import {useMemo} from 'preact/hooks'
|
import {useMemo} from 'preact/hooks'
|
||||||
|
|
||||||
import infoIcon from '../../assets/circleInfo_stroke2_corner0_rounded.svg'
|
import infoIcon from '../../assets/circleInfo_stroke2_corner0_rounded.svg'
|
||||||
import playIcon from '../../assets/play_filled_corner2_rounded.svg'
|
import playIcon from '../../assets/play_filled_corner0_rounded.svg'
|
||||||
import starterPackIcon from '../../assets/starterPack.svg'
|
import starterPackIcon from '../../assets/starterPack.svg'
|
||||||
import {CONTENT_LABELS, labelsToInfo} from '../labels'
|
import {CONTENT_LABELS, labelsToInfo} from '../labels'
|
||||||
import * as bsky from '../types/bsky'
|
import * as bsky from '../types/bsky'
|
||||||
@@ -389,7 +389,6 @@ function GenericWithImageEmbed({
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// just the thumbnail and a play button
|
|
||||||
function VideoEmbed({content}: {content: AppBskyEmbedVideo.View}) {
|
function VideoEmbed({content}: {content: AppBskyEmbedVideo.View}) {
|
||||||
let aspectRatio = 1
|
let aspectRatio = 1
|
||||||
|
|
||||||
@@ -398,6 +397,28 @@ function VideoEmbed({content}: {content: AppBskyEmbedVideo.View}) {
|
|||||||
aspectRatio = clamp(width / height, 1 / 1, 3 / 1)
|
aspectRatio = clamp(width / height, 1 / 1, 3 / 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const supportsHls = useMemo(() => {
|
||||||
|
const video = document.createElement('video')
|
||||||
|
return video.canPlayType('application/vnd.apple.mpegurl') !== ''
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
if (supportsHls) {
|
||||||
|
return (
|
||||||
|
<video
|
||||||
|
src={content.playlist}
|
||||||
|
poster={content.thumbnail}
|
||||||
|
controls
|
||||||
|
playsinline
|
||||||
|
preload="metadata"
|
||||||
|
loading="lazy"
|
||||||
|
aria-label={content.alt || undefined}
|
||||||
|
onClickCapture={evt => evt.stopPropagation()}
|
||||||
|
className="w-full rounded-xl bg-black"
|
||||||
|
style={{aspectRatio: `${aspectRatio} / 1`}}
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
className="w-full overflow-hidden rounded-xl aspect-square relative"
|
className="w-full overflow-hidden rounded-xl aspect-square relative"
|
||||||
|
|||||||
Reference in New Issue
Block a user