← Cloudflare Stream / stream / viewing-videos
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ů:
- Podporu MP4 povolíte odesláním požadavku POST na
/downloadsnebo/downloads/defaultkoncový bod. - 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.
- Opakovaně se dotazujte na
/downloadsendpoint, dokudstatuspole je nastaveno nareadya 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>/downloadsconst 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/audioconst 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.
Získání odkazů ke stažení
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>/downloadsconst 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>',
});{
"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.mp4Odstraně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/defaultconst 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ě.