INTEGRITY Dokumentace

Stažení videa nebo zvuku

Po nahrání videa do Stream ho lze streamovat pomocí HLS/DASH. Pro některé případy použití ale možná budete chtít stáhnout soubor MP4 nebo M4A. Pro offline přehrávání se hodí stažení souboru MP4. Naproti tomu pro navazující úlohy, jako je souhrn pomocí AI, kdy potřebujete jen zvukovou stopu, může být užitečnější stáhnout soubor M4A.

Generování stažitelných souborů MP4

Podporu MP4 můžete povolit pro jednotlivá videa podle následujících kroků:

  1. Podporu MP4 povolíte odesláním požadavku POST na /downloads nebo /downloads/default koncový bod.
  2. Uložte si URL adresu MP4 souboru, kterou vrátí odpověď z endpointu. Tato URL adresa začne fungovat, jakmile bude soubor MP4 připraven v dalším kroku.
  3. Opakovaně se dotazujte na /downloads endpoint, dokud status pole je nastaveno na ready a informujte se tak, jakmile bude MP4 k dispozici. Nyní můžete použít URL adresu MP4 z kroku 2.

Stahování nahraného videa můžete povolit, jakmile je připravené ke sledování, a to odesláním HTTP požadavku buď na /downloads nebo /downloads/default koncový bod.

Chcete-li dostat oznámení, jakmile bude video připravené ke sledování, viz Používání webhooků.

curl -X POST \
-H "Authorization: Bearer <API_TOKEN>" \
https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/stream/<VIDEO_UID>/downloads
const client = new Cloudflare({
	apiEmail: process.env['CLOUDFLARE_EMAIL'],
	apiKey: process.env['CLOUDFLARE_API_KEY'],
});

const download = await client.stream.downloads.create({
	account_id: '<ACCOUNT_ID>',
	identifier: '<VIDEO_UID>',
});

Odpověď obsahuje typ stahování, URL adresu a stav zpracování:

{
	"result": {
    "default": {
			"status": "inprogress",
			"url": "https://customer-<CODE>.cloudflarestream.com/<VIDEO_UID>/downloads/default.mp4",
			"percentComplete": 75.0
		}
	},
	"success": true,
	"errors": [],
	"messages": []
}

Podívejte se na celý Stream Referenční dokumentace REST API a SDK kde najdete podrobnosti o používání REST API z externích aplikací, včetně předpřipravených SDK pro externí aplikace v TypeScriptu, Pythonu nebo Go.

export default {
	async fetch(request, env) {
		const videoHandle = env.STREAM.video("VIDEO_ID");
		const downloads = await videoHandle.downloads.generate();
		return Response.json(downloads);
	},
};
{
	"$schema": "node_modules/wrangler/config-schema.json",
	"name": "<ENTER_WORKER_NAME>",
	"main": "src/index.ts",
	"compatibility_date": "$today",
	"observability": {
		"enabled": true
	},
	"stream": {
		"binding": "STREAM"
	}
}

Podívejte se na celý Referenční dokumentace API pro Workers Stream binding.

Generování stažitelných souborů M4A

Chcete-li povolit podporu M4A pro jednotlivá videa, postupujte obdobně jako při generování stahování MP4, ale místo toho odešlete požadavek POST na /downloads/audio koncový bod.

curl -X POST \
-H "Authorization: Bearer <API_TOKEN>" \
https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/stream/<VIDEO_UID>/downloads/audio
const client = new Cloudflare({
	apiEmail: process.env['CLOUDFLARE_EMAIL'],
	apiKey: process.env['CLOUDFLARE_API_KEY'],
});

const download = await client.stream.downloads.audio.create({
	account_id: '<ACCOUNT_ID>',
	identifier: '<VIDEO_UID>',
});

Odpověď obsahuje typ stahování, URL adresu a stav zpracování:

{
	"result": {
    "audio": {
			"status": "inprogress",
			"url": "https://customer-<CODE>.cloudflarestream.com/<VIDEO_UID>/downloads/audio.m4a",
			"percentComplete": 75.0
		}
	},
	"success": true,
	"errors": [],
	"messages": []
}

Podívejte se na celý Stream Referenční dokumentace REST API a SDK kde najdete podrobnosti o používání REST API z externích aplikací, včetně předpřipravených SDK pro externí aplikace v TypeScriptu, Pythonu nebo Go.

export default {
	async fetch(request, env) {
		const videoHandle = env.STREAM.video("VIDEO_ID");
		const downloads = await videoHandle.downloads.generate("audio");
		return Response.json(downloads);
	},
};
{
	"$schema": "node_modules/wrangler/config-schema.json",
	"name": "<ENTER_WORKER_NAME>",
	"main": "src/index.ts",
	"compatibility_date": "$today",
	"observability": {
		"enabled": true
	},
	"stream": {
		"binding": "STREAM"
	}
}

Podívejte se na celý Referenční dokumentace API pro Workers Stream binding.

Všechna dostupná stažení videa zobrazíte odesláním GET HTTP požadavek na downloads API.

curl -X GET \
-H "Authorization: Bearer <API_TOKEN>" \
https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/stream/<VIDEO_UID>/downloads
const client = new Cloudflare({
	apiEmail: process.env['CLOUDFLARE_EMAIL'],
	apiKey: process.env['CLOUDFLARE_API_KEY'],
});

const downloads = await client.stream.downloads.get({
	account_id: '<ACCOUNT_ID>',
	identifier: '<VIDEO_UID>',
});
Odpověď
{
	"result": {
    "audio": {
			"status": "ready",
			"url": "https://customer-<CODE>.cloudflarestream.com/<VIDEO_UID>/downloads/audio.m4a",
			"percentComplete": 100.0
		}
		"default": {
			"status": "ready",
			"url": "https://customer-<CODE>.cloudflarestream.com/<VIDEO_UID>/downloads/default.mp4",
			"percentComplete": 100.0
		}
	},
	"success": true,
	"errors": [],
	"messages": []
}

Podívejte se na celý Stream Referenční dokumentace REST API a SDK kde najdete podrobnosti o používání REST API z externích aplikací, včetně předpřipravených SDK pro externí aplikace v TypeScriptu, Pythonu nebo Go.

export default {
	async fetch(request, env) {
		const videoHandle = env.STREAM.video("VIDEO_ID");
		const downloads = await videoHandle.downloads.get();
		return Response.json(downloads);
	},
};
{
	"$schema": "node_modules/wrangler/config-schema.json",
	"name": "<ENTER_WORKER_NAME>",
	"main": "src/index.ts",
	"compatibility_date": "$today",
	"observability": {
		"enabled": true
	},
	"stream": {
		"binding": "STREAM"
	}
}

Podívejte se na celý Referenční dokumentace API pro Workers Stream binding.

Přizpůsobení názvu staženého souboru

Název souborů ke stažení můžete přizpůsobit přidáním filename parametr řetězce dotazu na konci URL adresy.

V následujícím příkladu přidání ?filename=MY_VIDEO.mp4 k URL adrese změní název souboru na MY_VIDEO.mp4.

https://customer-<CODE>.cloudflarestream.com/<VIDEO_UID>/downloads/default.mp4?filename=MY_VIDEO.mp4

filename může mít maximálně 120 znaků a skládat se z abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_ znaků. Přípona (.mp4) se přidává automaticky.

Načtení souborů ke stažení

Vygenerované soubory MP4 ke stažení lze získat pomocí odkazu v odpovědi download API.

curl -L https://customer-<CODE>.cloudflarestream.com/<VIDEO_UID>/downloads/default.mp4 > download.mp4

Odstranění stahování

Stažení videa můžete odstranit. Dostupné typy jsou default a audio. Výchozí hodnota je default pokud je vynechán.

curl -X DELETE \
-H "Authorization: Bearer <API_TOKEN>" \
https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/stream/<VIDEO_UID>/downloads/default
const client = new Cloudflare({
	apiEmail: process.env['CLOUDFLARE_EMAIL'],
	apiKey: process.env['CLOUDFLARE_API_KEY'],
});

await client.stream.downloads.default.delete({
	account_id: '<ACCOUNT_ID>',
	identifier: '<VIDEO_UID>',
});

Podívejte se na celý Stream Referenční dokumentace REST API a SDK kde najdete podrobnosti o používání REST API z externích aplikací, včetně předpřipravených SDK pro externí aplikace v TypeScriptu, Pythonu nebo Go.

export default {
	async fetch(request, env) {
		const videoHandle = env.STREAM.video("VIDEO_ID");
		await videoHandle.downloads.delete();
		return new Response("Download deleted", { status: 200 });
	},
};
{
	"$schema": "node_modules/wrangler/config-schema.json",
	"name": "<ENTER_WORKER_NAME>",
	"main": "src/index.ts",
	"compatibility_date": "$today",
	"observability": {
		"enabled": true
	},
	"stream": {
		"binding": "STREAM"
	}
}

Podívejte se na celý Referenční dokumentace API pro Workers Stream binding.

Zabezpečené stahování videí

Pokud je vaše video veřejné, bude veřejně dostupný i soubor MP4. Pokud je vaše video soukromé a pro přehrání vyžaduje podepsanou URL adresu, soubor MP4 veřejně dostupný nebude. Pro přístup k MP4 u soukromého videa můžete vygenerovat podepsanou URL adresu stejně jako pro běžné přehrávání, a to s dodatečným příznakem s názvem downloadable nastaveno na true.

Podepsaný token můžete vygenerovat pomocí Stream binding:

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

Odkazy ke stažení nebudou fungovat u videí, která již vyžadují podepsané URL adresy, pokud downloadable příznak není v tokenu přítomen.

Další podrobnosti o používání podepsaných URL adres u videí najdete v Zabezpečení Streamu.

Ukázkový payload tokenu

{
    "sub": <VIDEO_UID>,
    "kid": <KEY_ID>,
    "exp": 1537460365,
    "nbf": 1537453165,
    "downloadable": true,
    "accessRules": [
      {
        "type": "ip.geoip.country",
        "action": "allow",
        "country": [
          "GB"
        ]
      },
      {
        "type": "any",
        "action": "block"
      }
    ]
  }

Fakturace stahování MP4

Stahování MP4 se účtuje stejným způsobem jako streamování videa. Za každé stažení souboru MP4 vám bude naúčtována délka daného videa. Pokud máte například video v délce 10 minut, které je za měsíc staženo 100krát, budou tato stažení započítána jako 1000 minut doručeného obsahu.

Povolením MP4 vám nevzniknou žádné dodatečné náklady za úložiště.