mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-23 05:41:20 -08:00
48 lines
1.5 KiB
TypeScript
48 lines
1.5 KiB
TypeScript
import type { InputTrack } from 'mediabunny'
|
|
import type { PlaybackMedia } from './media'
|
|
|
|
async function getTrackBitrate(track: InputTrack): Promise<number> {
|
|
return await track.getAverageBitrate() ?? await track.getBitrate() ?? 0
|
|
}
|
|
|
|
export async function getHlsState(media: PlaybackMedia | null) {
|
|
if (!media?.isHls || !media.input)
|
|
return null
|
|
|
|
const [videoTracks, pairableAudioTracks] = await Promise.all([
|
|
media.input.getVideoTracks(),
|
|
media.videoTrack ? media.videoTrack.getPairableAudioTracks() : [],
|
|
])
|
|
const [levels, audios] = await Promise.all([
|
|
Promise.all(videoTracks.map(async (track, index) => ({
|
|
id: track.id,
|
|
track,
|
|
index,
|
|
name: await track.getName(),
|
|
height: await track.getDisplayHeight(),
|
|
bitrate: await getTrackBitrate(track),
|
|
}))),
|
|
Promise.all(pairableAudioTracks.map(async (track, index) => {
|
|
const name = await track.getName()
|
|
const language = await track.getLanguageCode()
|
|
return {
|
|
id: track.id,
|
|
track,
|
|
index,
|
|
name,
|
|
lang: language,
|
|
language,
|
|
bitrate: await getTrackBitrate(track),
|
|
}
|
|
})),
|
|
])
|
|
return {
|
|
levels,
|
|
audios,
|
|
currentLevel: media.videoTrack ? levels.find(item => item.id === media.videoTrack?.id) ?? null : null,
|
|
currentAudio: media.audioTrack ? audios.find(item => item.id === media.audioTrack?.id) ?? null : null,
|
|
videoMode: media.videoMode ?? 'auto',
|
|
audioMode: media.audioMode ?? 'auto',
|
|
}
|
|
}
|