fix(#747): new broadcast endpoint

pull/290/head
Rakov 2 years ago
parent 2a95f32aeb
commit 0e0f24454e
  1. 6
      src/features/AirPlay/index.tsx
  2. 16
      src/features/ChromeCast/index.tsx
  3. 2
      src/features/MatchPage/components/LiveMatch/hooks/index.tsx
  4. 3
      src/features/StreamPlayer/components/Controls/Components/ControlsMobile/index.tsx
  5. 3
      src/features/StreamPlayer/components/Controls/Components/ControlsWeb/index.tsx
  6. 7
      src/features/StreamPlayer/config.tsx

@ -1,8 +1,6 @@
/* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/no-explicit-any */
import { useEffect } from 'react' import { useEffect } from 'react'
import includes from 'lodash/includes'
import { usePageParams } from 'hooks/usePageParams' import { usePageParams } from 'hooks/usePageParams'
import { API_ROOT } from 'config' import { API_ROOT } from 'config'
@ -19,9 +17,7 @@ export const AirPlay = ({ videoRef }: Props) => {
const { profileId: matchId, sportType } = usePageParams() const { profileId: matchId, sportType } = usePageParams()
useEffect(() => { useEffect(() => {
const baseUrl = includes(videoRef?.current?.src, '.m3u8') const baseUrl = `${API_ROOT}/v1/broadcasts/${sportType}/${matchId}/master.m3u8?access_token=${readToken()}`
? `${API_ROOT}/video/chromecast/stream/${sportType}/${matchId}.m3u8?access_token=${readToken()}`
: videoRef?.current?.src!
const video = videoRef.current! const video = videoRef.current!
const airPlayBtn = document.getElementById('airPlay')! const airPlayBtn = document.getElementById('airPlay')!

@ -1,7 +1,6 @@
/* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/no-explicit-any */
import { import {
Fragment, Fragment,
memo,
useEffect, useEffect,
useRef, useRef,
useState, useState,
@ -16,13 +15,9 @@ import { Container } from './styled'
import { CastPlayer } from './CastVideos' import { CastPlayer } from './CastVideos'
import { useMatchPageStore } from '../MatchPage/store' import { useMatchPageStore } from '../MatchPage/store'
type Props = {
src?: string,
}
const NO_DEVICES_AVAILABLE = 'NO_DEVICES_AVAILABLE' const NO_DEVICES_AVAILABLE = 'NO_DEVICES_AVAILABLE'
export const ChromeCast = memo(({ src } : Props) => { export const ChromeCast = () => {
const [isCastAvailable, setIsCastAvailable] = useState(false) const [isCastAvailable, setIsCastAvailable] = useState(false)
const { profile } = useMatchPageStore() const { profile } = useMatchPageStore()
@ -32,8 +27,7 @@ export const ChromeCast = memo(({ src } : Props) => {
const GoogleCastLauncher = (document as any).createElement('google-cast-launcher') const GoogleCastLauncher = (document as any).createElement('google-cast-launcher')
GoogleCastLauncher.setAttribute('id', 'castbutton') GoogleCastLauncher.setAttribute('id', 'castbutton')
const baseUrl = src ?? `${API_ROOT}/video/chromecast/stream/${sportType}/${matchId}.m3u8` const baseUrl = `${API_ROOT}/v1/broadcasts/${sportType}/${matchId}/master.m3u8?access_token=${readToken()}`
const urlWithToken = (/\d.m3u8/.test(baseUrl)) ? `${baseUrl}?access_token=${readToken()}` : baseUrl
const teamsInfo = `${profile?.team1.name_eng} - ${profile?.team2.name_eng}` const teamsInfo = `${profile?.team1.name_eng} - ${profile?.team2.name_eng}`
@ -55,7 +49,7 @@ export const ChromeCast = memo(({ src } : Props) => {
document.body.appendChild(script) document.body.appendChild(script)
const castPlayer = new CastPlayer(urlWithToken, teamsInfo); const castPlayer = new CastPlayer(baseUrl, teamsInfo);
(window as any).__onGCastApiAvailable = (isAvailable: boolean) => { (window as any).__onGCastApiAvailable = (isAvailable: boolean) => {
if (isAvailable) { if (isAvailable) {
castPlayer.initializeCastPlayer() castPlayer.initializeCastPlayer()
@ -71,11 +65,11 @@ export const ChromeCast = memo(({ src } : Props) => {
document.body.removeChild(script) document.body.removeChild(script)
setIsCastAvailable(false) setIsCastAvailable(false)
} }
}, [teamsInfo, urlWithToken]) }, [teamsInfo, baseUrl])
return ( return (
<Fragment> <Fragment>
{isCastAvailable && <Container ref={containerRef} />} {isCastAvailable && <Container ref={containerRef} />}
</Fragment> </Fragment>
) )
}) }

@ -39,7 +39,7 @@ export const useLiveMatch = () => {
const { chapters } = useChapters({ const { chapters } = useChapters({
profile, profile,
selectedPlaylist, selectedPlaylist,
url: `${API_ROOT}/video/stream/${sportType}/${matchId}.m3u8?access_token=${readToken()}`, url: `${API_ROOT}/v1/broadcasts/${sportType}/${matchId}/master.m3u8?access_token=${readToken()}`,
}) })
const { const {

@ -31,7 +31,6 @@ export const ControlsMobile = (controlsProps: {props: ControlsPropsExtended}) =>
progressBarElement, progressBarElement,
selectedAudioTrack, selectedAudioTrack,
selectedQuality, selectedQuality,
src,
videoQualities, videoQualities,
videoRef, videoRef,
} = props } = props
@ -60,7 +59,7 @@ export const ControlsMobile = (controlsProps: {props: ControlsPropsExtended}) =>
</LiveBtn> </LiveBtn>
)} )}
<AirPlay videoRef={videoRef} /> <AirPlay videoRef={videoRef} />
<ChromeCast src={src} /> <ChromeCast />
<Settings <Settings
onSelect={onQualitySelect} onSelect={onQualitySelect}
selectedQuality={selectedQuality} selectedQuality={selectedQuality}

@ -56,7 +56,6 @@ export const ControlsWeb = (controlsProps: { props: ControlsPropsExtended }) =>
rewindForward, rewindForward,
selectedAudioTrack, selectedAudioTrack,
selectedQuality, selectedQuality,
src,
togglePlaying, togglePlaying,
videoQualities, videoQualities,
videoRef, videoRef,
@ -118,7 +117,7 @@ export const ControlsWeb = (controlsProps: { props: ControlsPropsExtended }) =>
<T9n t='live' /> <T9n t='live' />
</LiveBtn> </LiveBtn>
)} )}
<ChromeCast src={src} /> <ChromeCast />
{document.pictureInPictureEnabled && ( {document.pictureInPictureEnabled && (
<PiP videoRef={videoRef} /> <PiP videoRef={videoRef} />
)} )}

@ -1,17 +1,10 @@
import type { HlsConfig } from 'hls.js' import type { HlsConfig } from 'hls.js'
import { readToken } from 'helpers/token'
import { isMobileDevice } from 'config/userAgent' import { isMobileDevice } from 'config/userAgent'
export const streamConfig: Partial<HlsConfig> = { export const streamConfig: Partial<HlsConfig> = {
liveSyncDuration: 30, liveSyncDuration: 30,
maxBufferLength: 30, maxBufferLength: 30,
xhrSetup: (xhr, urlString) => {
const url = new URL(urlString)
url.searchParams.set('access_token', readToken() || '')
xhr.open('GET', url.toString())
},
} }
export const REWIND_SECONDS = isMobileDevice ? 10 : 5 export const REWIND_SECONDS = isMobileDevice ? 10 : 5

Loading…
Cancel
Save