mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-22 08:46:35 +00:00
Change exoplayer payload type (#7010)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
This commit is contained in:
parent
accf44b769
commit
11e3503dc2
@ -12,6 +12,7 @@ import {
|
|||||||
} from "lit-element";
|
} from "lit-element";
|
||||||
import { fireEvent } from "../common/dom/fire_event";
|
import { fireEvent } from "../common/dom/fire_event";
|
||||||
import { nextRender } from "../common/util/render-status";
|
import { nextRender } from "../common/util/render-status";
|
||||||
|
import { getExternalConfig } from "../external_app/external_config";
|
||||||
import type { HomeAssistant } from "../types";
|
import type { HomeAssistant } from "../types";
|
||||||
|
|
||||||
type HLSModule = typeof import("hls.js");
|
type HLSModule = typeof import("hls.js");
|
||||||
@ -93,16 +94,22 @@ class HaHLSPlayer extends LitElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async _getUseExoPlayer(): Promise<boolean> {
|
private async _getUseExoPlayer(): Promise<boolean> {
|
||||||
|
if (!this.hass!.auth.external || !this.allowExoPlayer) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
const externalConfig = await getExternalConfig(this.hass!.auth.external);
|
||||||
|
return externalConfig && externalConfig.hasExoPlayer;
|
||||||
|
}
|
||||||
|
|
||||||
private async _startHls(): Promise<void> {
|
private async _startHls(): Promise<void> {
|
||||||
let hls: any;
|
|
||||||
const videoEl = this._videoEl;
|
const videoEl = this._videoEl;
|
||||||
this._useExoPlayer = await this._getUseExoPlayer();
|
const playlist_url = this.url.replace("master_playlist", "playlist");
|
||||||
if (!this._useExoPlayer) {
|
const useExoPlayerPromise = this._getUseExoPlayer();
|
||||||
hls = ((await import(/* webpackChunkName: "hls.js" */ "hls.js")) as any)
|
const masterPlaylistPromise = fetch(this.url);
|
||||||
.default as HLSModule;
|
|
||||||
|
const hls = ((await import(
|
||||||
|
/* webpackChunkName: "hls.js" */ "hls.js"
|
||||||
|
)) as any).default as HLSModule;
|
||||||
let hlsSupported = hls.isSupported();
|
let hlsSupported = hls.isSupported();
|
||||||
|
|
||||||
if (!hlsSupported) {
|
if (!hlsSupported) {
|
||||||
@ -116,16 +123,20 @@ class HaHLSPlayer extends LitElement {
|
|||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
const url = this.url;
|
|
||||||
|
|
||||||
|
this._useExoPlayer = await useExoPlayerPromise;
|
||||||
|
let hevcRegexp: RegExp;
|
||||||
|
let masterPlaylist: string;
|
||||||
if (this._useExoPlayer) {
|
if (this._useExoPlayer) {
|
||||||
this._renderHLSExoPlayer(url);
|
hevcRegexp = /CODECS=".*?((hev1)|(hvc1))\..*?"/;
|
||||||
|
masterPlaylist = await (await masterPlaylistPromise).text();
|
||||||
|
}
|
||||||
|
if (this._useExoPlayer && hevcRegexp!.test(masterPlaylist!)) {
|
||||||
|
this._renderHLSExoPlayer(playlist_url);
|
||||||
} else if (hls.isSupported()) {
|
} else if (hls.isSupported()) {
|
||||||
this._renderHLSPolyfill(videoEl, hls, url);
|
this._renderHLSPolyfill(videoEl, hls, playlist_url);
|
||||||
} else {
|
} else {
|
||||||
this._renderHLSNative(videoEl, url);
|
this._renderHLSNative(videoEl, playlist_url);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user