fix(media): fix videos not playing

fixes mimetype
also adds other playable trailers, if they exist
This commit is contained in:
zyachel
2025-06-01 18:32:27 +00:00
committed by ngn
parent 288ec34fb4
commit 648d5cde32
4 changed files with 37 additions and 28 deletions

View File

@ -14,32 +14,41 @@ type Props = {
const Media = ({ className, media }: Props) => { const Media = ({ className, media }: Props) => {
return ( return (
<div className={`${className} ${styles.media}`}> <div className={`${className} ${styles.media}`}>
{(media.trailer || !!media.videos.total) && ( {(media.trailers?.length || !!media.videos.total) && (
<section className={styles.videos}> <section className={styles.videos}>
<h2 className='heading heading__secondary'>Videos</h2> <h2 className='heading heading__secondary'>Videos</h2>
<div className={styles.videos__container}> <div className={styles.videos__container}>
{media.trailer && ( {media.trailers?.map(trailer => (
<div className={styles.trailer}> <div className={styles.trailer} key={trailer.id}>
<video <video
aria-label='trailer video' aria-label={trailer.caption ?? 'trailer video'}
controls controls
playsInline playsInline
poster={getProxiedIMDbImgUrl(modifyIMDbImg(media.trailer.thumbnail))} poster={getProxiedIMDbImgUrl(modifyIMDbImg(trailer.thumbnail))}
className={styles.trailer__video} className={styles.trailer__video}
preload='none' preload='none'
muted
> >
{media.trailer.urls.map(source => ( {trailer.urls.map(source => (
<source <source
key={source.url} key={source.url}
type={source.mimeType ?? undefined} type='video/mp4'
src={getProxiedIMDbImgUrl(source.url)} src={getProxiedIMDbImgUrl(source.url)}
media={source.resolution !== 'SD' ? '(min-width: 450px)' : undefined}
data-res={source.resolution} data-res={source.resolution}
/> />
))} ))}
<p>
{trailer.caption}:{' '}
<Link href={getProxiedIMDbImgUrl(trailer.urls[0]?.url)}>
<a className='link'>link</a>
</Link>
</p>
</video> </video>
</div> </div>
)} ))}
{!!media.videos.total && {!!media.videos.total &&
media.videos.videos.map(video => ( media.videos.videos.map(video => (

View File

@ -143,7 +143,7 @@ export default interface Name {
value: string; value: string;
language: string; language: string;
}; };
mimeType?: string; videoMimeType?: string;
url: string; url: string;
}>; }>;
recommendedTimedTextTrack?: { recommendedTimedTextTrack?: {

View File

@ -42,18 +42,18 @@ const cleanName = (rawData: RawName) => {
}, },
media: { media: {
...(main.primaryVideos.edges.length && { ...(main.primaryVideos.edges.length && {
trailer: { trailers: main.primaryVideos.edges.map(trailer => ({
id: main.primaryVideos.edges[0].node.id, id: trailer.node.id,
isMature: main.primaryVideos.edges[0].node.isMature, isMature: trailer.node.isMature,
thumbnail: main.primaryVideos.edges[0].node.thumbnail.url, thumbnail: trailer.node.thumbnail.url,
runtime: main.primaryVideos.edges[0].node.runtime.value, runtime: trailer.node.runtime.value,
caption: main.primaryVideos.edges[0].node.description?.value ?? null, caption: trailer.node.description?.value ?? null,
urls: main.primaryVideos.edges[0].node.playbackURLs.map(url => ({ urls: trailer.node.playbackURLs.map(url => ({
resolution: url.displayName.value, resolution: url.displayName.value as 'SD' | '480p',
mimeType: url.mimeType ?? null, mimeType: url.videoMimeType ?? null,
url: url.url, url: url.url,
})), })),
}, })),
}), }),
images: { images: {
total: misc.images.total, total: misc.images.total,

View File

@ -81,18 +81,18 @@ const cleanTitle = (rawData: RawTitle) => {
})), })),
media: { media: {
...(main.primaryVideos.edges.length && { ...(main.primaryVideos.edges.length && {
trailer: { trailers: main.primaryVideos.edges.map(trailer => ({
id: main.primaryVideos.edges[0].node.id, id: trailer.node.id,
isMature: main.primaryVideos.edges[0].node.isMature, isMature: trailer.node.isMature,
thumbnail: main.primaryVideos.edges[0].node.thumbnail.url, thumbnail: trailer.node.thumbnail.url,
runtime: main.primaryVideos.edges[0].node.runtime.value, runtime: trailer.node.runtime.value,
caption: main.primaryVideos.edges[0].node.description?.value ?? null, caption: trailer.node.description?.value ?? null,
urls: main.primaryVideos.edges[0].node.playbackURLs.map(url => ({ urls: trailer.node.playbackURLs.map(url => ({
resolution: url.displayName.value, resolution: url.displayName.value as 'SD' | '480p',
mimeType: url.videoMimeType ?? null, mimeType: url.videoMimeType ?? null,
url: url.url, url: url.url,
})), })),
}, })),
}), }),
images: { images: {
total: misc.titleMainImages.total, total: misc.titleMainImages.total,