fix(media): fix videos not playing
fixes mimetype also adds other playable trailers, if they exist
This commit is contained in:
@ -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 => (
|
||||||
|
@ -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?: {
|
||||||
|
@ -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,
|
||||||
|
@ -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,
|
||||||
|
Reference in New Issue
Block a user