diff --git a/src/components/canvas/players/audio-player.ts b/src/components/canvas/players/audio-player.ts index 1ff7672..81b40dd 100644 --- a/src/components/canvas/players/audio-player.ts +++ b/src/components/canvas/players/audio-player.ts @@ -30,6 +30,9 @@ export class AudioPlayer extends Player { const audioClipConfiguration = this.clipConfiguration.asset as AudioAsset; const identifier = audioClipConfiguration.src; + if (!identifier) { + throw new Error("Audio asset is missing a 'src'."); + } const loadOptions: pixi.UnresolvedAsset = { src: identifier, parser: AudioLoadParser.Name }; const audioResource = await this.edit.assetLoader.load(identifier, loadOptions); @@ -123,6 +126,9 @@ export class AudioPlayer extends Player { this.syncTimer = 0; const audioAsset = this.clipConfiguration.asset as AudioAsset; + if (!audioAsset.src) { + throw new Error("Audio asset is missing a 'src'."); + } const loadOptions: pixi.UnresolvedAsset = { src: audioAsset.src, parser: AudioLoadParser.Name }; const audioResource = await this.edit.assetLoader.load(audioAsset.src, loadOptions); diff --git a/src/components/canvas/players/image-player.ts b/src/components/canvas/players/image-player.ts index c937ee5..600d569 100644 --- a/src/components/canvas/players/image-player.ts +++ b/src/components/canvas/players/image-player.ts @@ -86,6 +86,9 @@ export class ImagePlayer extends Player { private async loadTexture(): Promise { const imageAsset = this.clipConfiguration.asset as ImageAsset; const { src } = imageAsset; + if (!src) { + throw new Error("Image asset is missing a 'src'."); + } const corsUrl = `${src}${src.includes("?") ? "&" : "?"}x-cors=1`; const loadOptions: pixi.UnresolvedAsset = { src: corsUrl, crossorigin: "anonymous", data: {} }; diff --git a/src/components/canvas/players/video-player.ts b/src/components/canvas/players/video-player.ts index 6c64f8a..9d92a90 100644 --- a/src/components/canvas/players/video-player.ts +++ b/src/components/canvas/players/video-player.ts @@ -168,6 +168,9 @@ export class VideoPlayer extends Player { private async loadVideo(): Promise { const videoAsset = this.clipConfiguration.asset as VideoAsset; const { src } = videoAsset; + if (!src) { + throw new Error("Video asset is missing a 'src'."); + } if (src.endsWith(".mov")) { throw new Error(`Video source '${src}' is not supported. .mov files cannot be played in the browser. Please convert to .webm or .mp4 first.`); diff --git a/src/components/timeline/media-thumbnail-renderer.ts b/src/components/timeline/media-thumbnail-renderer.ts index 3a8487d..c9ad548 100644 --- a/src/components/timeline/media-thumbnail-renderer.ts +++ b/src/components/timeline/media-thumbnail-renderer.ts @@ -127,7 +127,11 @@ export class MediaThumbnailRenderer implements ClipRenderer { this.clipStates.set(clipKey, state); try { - const result = await this.generator.generateThumbnail(asset.src, asset.trim ?? 0); + const { src } = asset; + if (!src) { + throw new Error("Video asset is missing a 'src'."); + } + const result = await this.generator.generateThumbnail(src, asset.trim ?? 0); // Check if element is still in DOM (might have been disposed) if (!element.isConnected) return; @@ -156,7 +160,11 @@ export class MediaThumbnailRenderer implements ClipRenderer { this.clipStates.set(clipKey, state); try { - const result = await this.loadImageThumbnail(asset.src); + const { src } = asset; + if (!src) { + throw new Error("Image asset is missing a 'src'."); + } + const result = await this.loadImageThumbnail(src); // Check if element is still in DOM (might have been disposed) if (!element.isConnected) return;