use source file for web video compression (#11090)

This commit is contained in:
Spence Pope
2026-07-08 15:07:52 -04:00
committed by GitHub
parent 510dc51d7a
commit 6dce96881c
4 changed files with 17 additions and 2 deletions
+2
View File
@@ -1404,6 +1404,8 @@ export type Events = {
uploadId: string
engine: string
errorClass: string
/** Truncated to 256 chars */
errorMessage: string
elapsedMs: number
}
'video:upload:uploadStarted': {
+6 -2
View File
@@ -36,8 +36,12 @@ export async function compressVideo(
hasWebCodecs: hasWebCodecs(),
})
const response = await fetch(asset.uri)
const blob = await response.blob()
/*
* Prefer the original File over re-fetching the blob URL. A fetch round
* trip copies the bytes and fails with a bare TypeError if the URL was
* revoked or the read fails - the top web compressFailed error class.
*/
const blob = asset.file ?? (await (await fetch(asset.uri)).blob())
const isGif = blob.type === 'image/gif'
const hasCodecs = hasWebCodecs()
+6
View File
@@ -26,6 +26,11 @@ function errorClass(e: unknown): string {
return 'Unknown'
}
function errorMessage(e: unknown): string {
const message = e instanceof Error ? e.message : String(e)
return message.slice(0, 256)
}
export type VideoTelemetry = {
readonly uploadId: string
readonly engine: string
@@ -208,6 +213,7 @@ export function createVideoTelemetry({
uploadId,
engine,
errorClass: errorClass(e),
errorMessage: errorMessage(e),
elapsedMs: Date.now() - phaseStartedAt,
})
endTxn('error')
@@ -73,6 +73,7 @@ async function getMetadataWithWebCodecs(
return {
uri: blobUrl,
file,
mimeType: file.type,
width: videoTrack.displayWidth,
height: videoTrack.displayHeight,
@@ -93,6 +94,7 @@ async function getMetadataWithBrowserAPIs(
img.onload = () => {
resolve({
uri: blobUrl,
file,
mimeType: 'image/gif',
width: img.width,
height: img.height,
@@ -112,6 +114,7 @@ async function getMetadataWithBrowserAPIs(
video.onloadedmetadata = () => {
resolve({
uri: blobUrl,
file,
mimeType: file.type,
width: video.videoWidth,
height: video.videoHeight,