INTEGRITY Dokumentace

Propojení s API Workers

A binding propojuje váš Worker na externí zdroje na Developer Platform, například Stream, R2 buckety, nebo KV namespaces.

Například při použití Stream ve Workers můžete:

Nastavení

Binding Stream se povoluje pro každý Worker zvlášť.

Chcete-li k Workeru připojit Stream, přidejte na konec konfiguračního souboru Wrangler následující:

{
	"stream": {
		"binding": "STREAM"
	}
}
[stream]
binding = "STREAM"

Podrobnější informace o konfiguraci Workeru najdete v Dokumentace ke konfiguraci Wrangler.

Metody

Metody na úrovni bindingu

Následující metody jsou k dispozici na env.STREAM binding přímo.

upload(url, params?)

Nahrání videa z URL. Vrací Promise<StreamVideo>.

Vyvolá: BadRequestError, QuotaReachedError, MaxFileSizeError, RateLimitedError, AlreadyUploadedError, InternalError.

createDirectUpload(params)

Vytvoří základní URL adresu pro přímé nahrávání na straně klienta bez nutnosti API klíče. Vrátí Promise<StreamDirectUpload> hodnotou uploadURL a id.

Tato metoda v současné době nepodporuje soubory větší než 200MB. Pro větší přímá nahrávání si přečtěte Požadavek API pro zřízení koncového bodu TUS ↗._

videos.list(params?)

Vypíše všechna videa v účtu. Vrací Promise<StreamVideo[]>.

Metody vázané na video

Volání env.STREAM.video(id) vrací identifikátor (handle) omezený na jedno video s následujícími metodami.

details()

Získání úplných podrobností o videu. Vrací Promise<StreamVideo>.

update(params)

Aktualizace metadat videa. Vrací Promise<StreamVideo>.

delete()

Odstraní video a jeho kopie. Vrátí Promise<void>.

generateToken()

Vytvoří token podepsané URL adresy pro video. Vrátí Promise<string>.

downloads

Namespace pro operace se stahováním videa.

captions

Namespace pro operace s titulky videa.

Metody vodoznaku

Následující metody jsou k dispozici na env.STREAM.watermarks namespace.

watermarks.generate(input, params)

Vytvoří profil vodoznaku. Přijímá buď ReadableStream nebo řetězec URL adresy. Vrací Promise<StreamWatermark>.

watermarks.list()

Vypíše všechny profily vodoznaků. Vrací Promise<StreamWatermark[]>.

watermarks.get(watermarkId)

Získání jednoho profilu vodoznaku. Vrací Promise<StreamWatermark>.

watermarks.delete(watermarkId)

Odstraní profil vodoznaku. Vrátí Promise<void>.

Příklady

Nahrání videa z URL

export default {
	async fetch(request, env) {
		const video = await env.STREAM.upload("https://example.com/video.mp4", {
			creator: "user-123",
			meta: { category: "tutorial" },
			allowedOrigins: ["example.com"],
		});
		return Response.json(video);
	},
};
export default {
	async fetch(request, env) {
		const video = await env.STREAM.upload("https://example.com/video.mp4", {
			creator: "user-123",
			meta: { category: "tutorial" },
			allowedOrigins: ["example.com"],
		});
		return Response.json(video);
	},
};

Vytvoření přímého nahrávání

export default {
	async fetch(request, env) {
		const directUpload = await env.STREAM.createDirectUpload({
			maxDurationSeconds: 300,
			creator: "user-123",
			meta: { source: "browser-upload" },
		});
		return Response.json(directUpload);
	},
};
export default {
	async fetch(request, env) {
		const directUpload = await env.STREAM.createDirectUpload({
			maxDurationSeconds: 300,
			creator: "user-123",
			meta: { source: "browser-upload" },
		});
		return Response.json(directUpload);
	},
};

Výpis videí

export default {
	async fetch(request, env) {
		const videos = await env.STREAM.videos.list({
			limit: 10,
			after: "2025-01-01T00:00:00Z",
		});
		return Response.json(videos);
	},
};
export default {
	async fetch(request, env) {
		const videos = await env.STREAM.videos.list({
			limit: 10,
			after: "2025-01-01T00:00:00Z",
		});
		return Response.json(videos);
	},
};

Získání podrobností o videu

export default {
	async fetch(request, env) {
		const videoDetails = await env.STREAM.video("VIDEO_ID").details();
		return Response.json(videoDetails);
	},
};
export default {
	async fetch(request, env) {
		const videoDetails = await env.STREAM.video("VIDEO_ID").details();
		return Response.json(videoDetails);
	},
};

Aktualizace metadat videa

export default {
	async fetch(request, env) {
		const videoDetails = await env.STREAM.video("VIDEO_ID").update({
			meta: { category: "updated-tutorial" },
			allowedOrigins: ["example.com", "*.example.com"],
		});
		return Response.json(videoDetails);
	},
};
export default {
	async fetch(request, env) {
		const videoDetails = await env.STREAM.video("VIDEO_ID").update({
			meta: { category: "updated-tutorial" },
			allowedOrigins: ["example.com", "*.example.com"],
		});
		return Response.json(videoDetails);
	},
};

Odstranění videa

export default {
	async fetch(request, env) {
		await env.STREAM.video("VIDEO_ID").delete();
		return new Response("Video deleted", { status: 200 });
	},
};
export default {
	async fetch(request, env) {
		await env.STREAM.video("VIDEO_ID").delete();
		return new Response("Video deleted", { status: 200 });
	},
};

Generování tokenu pro podepsanou URL adresu

export default {
	async fetch(request, env) {
		const token = await env.STREAM.video("VIDEO_ID").generateToken();
		return Response.json({ token });
	},
};
export default {
	async fetch(request, env) {
		const token = await env.STREAM.video("VIDEO_ID").generateToken();
		return Response.json({ token });
	},
};

Nahrání titulků

export default {
	async fetch(request, env) {
		const captionResponse = await fetch("https://example.com/captions-en.vtt");
		const caption = await env.STREAM.video("VIDEO_ID").captions.upload(
			"en",
			captionResponse.body,
		);
		return Response.json(caption);
	},
};
export default {
	async fetch(request, env) {
		const captionResponse = await fetch("https://example.com/captions-en.vtt");
		const caption = await env.STREAM.video("VIDEO_ID").captions.upload(
			"en",
			captionResponse.body,
		);
		return Response.json(caption);
	},
};

Generování titulků pomocí AI

export default {
	async fetch(request, env) {
		const caption = await env.STREAM.video("VIDEO_ID").captions.generate("en");
		return Response.json(caption);
	},
};
export default {
	async fetch(request, env) {
		const caption = await env.STREAM.video("VIDEO_ID").captions.generate("en");
		return Response.json(caption);
	},
};

Výpis a odstranění titulků

export default {
	async fetch(request, env) {
		const video = env.STREAM.video("VIDEO_ID");
		const captions = await video.captions.list();
		await video.captions.delete("en");
		return Response.json(captions);
	},
};
export default {
	async fetch(request, env) {
		const video = env.STREAM.video("VIDEO_ID");
		const captions = await video.captions.list();
		await video.captions.delete("en");
		return Response.json(captions);
	},
};

Generování a výpis stažení

export default {
	async fetch(request, env) {
		const video = env.STREAM.video("VIDEO_ID");
		const downloads = await video.downloads.generate();
		const audioDownloads = await video.downloads.generate("audio");
		const allDownloads = await video.downloads.get();
		return Response.json({ downloads, audioDownloads, allDownloads });
	},
};
export default {
	async fetch(request, env) {
		const video = env.STREAM.video("VIDEO_ID");
		const downloads = await video.downloads.generate();
		const audioDownloads = await video.downloads.generate("audio");
		const allDownloads = await video.downloads.get();
		return Response.json({ downloads, audioDownloads, allDownloads });
	},
};

Vytvoření profilu vodoznaku

export default {
	async fetch(request, env) {
		const watermark = await env.STREAM.watermarks.generate(
			"https://example.com/watermark.png",
			{
				name: "My Watermark",
				opacity: 0.5,
				position: "lowerRight",
				padding: 0.05,
				scale: 0.1,
			},
		);
		return Response.json(watermark);
	},
};
export default {
	async fetch(request, env) {
		const watermark = await env.STREAM.watermarks.generate(
			"https://example.com/watermark.png",
			{
				name: "My Watermark",
				opacity: 0.5,
				position: "lowerRight",
				padding: 0.05,
				scale: 0.1,
			},
		);
		return Response.json(watermark);
	},
};

Výpis a odstranění profilů vodoznaků

export default {
	async fetch(request, env) {
		const watermarks = await env.STREAM.watermarks.list();
		const watermark = await env.STREAM.watermarks.get("WATERMARK_ID");
		await env.STREAM.watermarks.delete("WATERMARK_ID");
		return Response.json({ watermarks, watermark });
	},
};
export default {
	async fetch(request, env) {
		const watermarks = await env.STREAM.watermarks.list();
		const watermark = await env.STREAM.watermarks.get("WATERMARK_ID");
		await env.STREAM.watermarks.delete("WATERMARK_ID");
		return Response.json({ watermarks, watermark });
	},
};

Definice typů

StreamVideo

StreamVideo se vrací u operací, které načítají nebo vytvářejí video. Obsahuje úplná metadata videa.

StreamVideoStatus

Informace o stavu zpracování videa.

StreamVideoInput

Vstupní metadata pro původní nahrávku.

StreamPublicDetails

Veřejné údaje přiřazené k videu.

StreamDirectUpload

Vráceno createDirectUpload(). Obsahuje URL adresu pro nahrání a identifikátor videa pro přímé nahrání.

StreamCaption

Představuje titulkovou stopu videa.

StreamDownloadGetResponse

Objekt s klíči podle typu stahování. Každý klíč je volitelný a je přítomný pouze v případě, že byl daný typ stahování vytvořen.

StreamDownload

Představuje vygenerovaný soubor ke stažení pro video.

StreamWatermark

Představuje profil vodoznaku.

StreamWatermarkPosition

Pozice vodoznaku na videu.

'upperRight' | 'upperLeft' | 'lowerLeft' | 'lowerRight' | 'center'

StreamDownloadStatus

Stav vygenerovaného souboru ke stažení.

'ready' | 'inprogress' | 'error'

StreamDownloadType

Typ stahování, které se má vygenerovat.

'default' | 'audio'

StreamUrlUploadParams

Parametry pro nahrání videa z URL.

StreamDirectUploadCreateParams

Parametry pro vytvoření direct upload.

StreamDirectUploadWatermark

Konfigurace vodoznaku pro přímé nahrání.

StreamUpdateVideoParams

Parametry pro aktualizaci videa.

StreamVideosListParams

Parametry pro výpis videí.

StreamPaginationComparison

Porovnávací operátory pro dotazy se stránkováním.

'eq' | 'gt' | 'gte' | 'lt' | 'lte'

StreamWatermarkCreateParams

Parametry pro vytvoření profilu watermarku.

Zpracování chyb

Chyby vyvolávají StreamError, které rozšiřuje standardní Error rozhraní s dalšími informacemi:

Mohou nastat následující podtypy chyb:

Typ chyby Popis
InternalError Došlo k interní chybě serveru.
BadRequestError Požadavek byl nesprávně formulovaný nebo obsahoval neplatné parametry.
NotFoundError Požadovaný prostředek nebyl nalezen.
ForbiddenError Požadavek nebyl autorizován.
RateLimitedError Požadavek byl omezen limitem četnosti požadavků.
QuotaReachedError Účet dosáhl své kvóty pro videa.
MaxFileSizeError Nahraný soubor přesahuje maximální povolenou velikost.
InvalidURLError Zadaná URL adresa je neplatná nebo nedostupná.
AlreadyUploadedError Video již bylo nahráno.
TooManyWatermarksError Účet dosáhl limitu profilů vodoznaku.

Použijte try...catch blok pro zpracování chyb:

export default {
	async fetch(request, env) {
		try {
			const videoDetails = await env.STREAM.upload(
				"https://example.com/video.mp4",
			);
			return Response.json(videoDetails);
		} catch (e) {
			if (e instanceof Error) {
				return new Response(`Stream error: ${e.message}`, { status: 500 });
			}
			throw e;
		}
	},
};
export default {
	async fetch(request, env) {
		try {
			const videoDetails = await env.STREAM.upload("https://example.com/video.mp4");
			return Response.json(videoDetails);
		} catch (e) {
			if (e instanceof Error) {
				return new Response(`Stream error: ${e.message}`, { status: 500 });
			}
			throw e;
		}
	},
};