Charger des asset

Présentation

Ce tutoriel explique comment charger des asset dans Frame.io. Frame.io peut gérer tous les types de fichiers, pas seulement les vidéos, mais aussi les Script, les images, les cartes et les fichiers de référence. En termes plus techniques, un asset dans Frame.io est une représentation robuste d’un fichier dans S3 et de son contexte dans Frame.io, incluant les transcodages, le contexte utilisateur/équipe/Projet et les métadonnées. Pour plus d’informations sur les asset, veuillez consulter la définition des ressources.​

Hiérarchies principales

Il est également utile de savoir comment Frame.io structure ses modèles principaux.

Les Comptes, auxquels appartiennent les Utilisateurs, contiennent de nombreux Projets, qui contiennent tous des asset. Les équipes sont disponibles uniquement pour les comptes Entreprise et fournissent un Niveau supplémentaire de séparation logique. Les asset ne « connaissent » pas l’équipe à laquelle ils appartiennent — seulement le Projet et le Compte — mais les Projets appartiennent strictement aux équipes, et non aux Comptes, faisant des équipes une partie intégrante du processus de chargement d’asset.

Conditions préalables

Pour ce tutoriel, vous aurez besoin de :

  • Un Compte Frame.io avec un jeton de développeur (les jetons sont expliqués ci-dessous)
  • Frame.io Python SDK

Charger un asset

Cette section vous guide à travers les étapes pour charger un asset.

  1. Créez un jeton de développeur sur developer.frame.io avec les portées suivantes :
portéeRaison
Comptes : LectureRécupérer la liste des Comptes pour l’Utilisateur demandeur.
équipes : LectureRécupérer les équipes disponibles pour le Compte souhaité.
Projets : LectureRécupérer les Projets disponibles pour l’équipe souhaitée.
Assets : Créer, LectureCréer le nouvel enregistrement d’asset et récupérer les assets disponibles pour parcourir la structure de dossiers dans le Projet.
Besoin d'aide pour créer un jeton d'API ?

Consultez les instructions ici.

  1. Localisez une destination pour votre asset. Au minimum, les assets doivent être placés dans un Projet. Vous devez récupérer l’ID de l’asset racine (root_asset_id) d’un projet ou un ID d’asset pour un dossier afin de pouvoir spécifier l’emplacement dans la hiérarchie de fichiers où vous souhaitez charger.
REMARQUE :

Vous ne pouvez pas charger avec un ID de projet uniquement. Pour charger à la racine de votre projet, spécifiez le root_asset_id dans votre demande.

En général, vous devez récupérer (dans l’ordre spécifié) :

  • les ID de Compte et choisir un compte
  • les ID d’équipe et choisir une équipe
  • les projets associés à une équipe
  • l’ID de projet pour le projet avec lequel vous souhaitez travailler
  • l’ID de l’asset racine ou un ID de dossier

Vous pouvez charger directement dans la racine d’un projet en utilisant le root_asset_id.

Lister les assets

Pour choisir où vous voulez charger votre nouvel asset, vous pouvez utiliser l’API pour lister tous les assets dans un projet ou dossier au sein d’un projet. Si un asset est un dossier, il contiendra des assets enfants, qui peuvent également être des fichiers et des dossiers. Lors de la liste des informations d’assets, vous pouvez utiliser n’importe quel ID d’asset, mais si vous voulez examiner tout ce qui est associé à un projet, utilisez le root_asset_id.

``` python-sdk
from frameioclient import FrameioClient
import os
ASSET_ID = ""
TOKEN = ""
client = FrameioClient(TOKEN)
response_list = client.assets.get_children(ASSET_ID)
assets = response_list.results
for item in assets:
print(item['id'], item['name'])
```python-sdk
# Code sample uses the Python SDK: https://github.com/Frameio/python-frameio-client
from frameioclient import FrameioClient
client = frameioclient("FRAMEIO_TOKEN)
asset = client.assets.upload(
destination_id="PARENT_ASSET_ID",
filepath="./my_file.mov"
)
# Create a folder:
asset = client.assets.create_folder(
parent_asset_id=PARENT_ASSET_ID,
name="My Awesome Folder"
)

Dans la liste retournée d’assets, vous pouvez utiliser un ID pour tout asset qui est un dossier, ou l’ID de l’asset racine. Vous utiliserez cet ID pour marquer où vous voulez charger votre nouvel asset.

Charger la ressource

Dans cet exemple, nous allons charger un nouveau fichier. Vous envoyez votre demande avec les informations suivantes :

ParamètreDescription
filesizeEntrez la taille du fichier que vous souhaitez charger
filetypeChoisissez le type de fichier que vous chargez. Les options incluent vidéo et image. Exemples : video/mp4, image/png.
nameEntrez une chaîne représentant le nom du fichier, sans espaces.
typeCeci indique si vous utilisez un fichier ou un dossier. Une pile de version est lorsque vous empilez plusieurs fichiers les uns sur les autres.
Si vous souhaitez créer un nouveau dossier, vous n’avez pas besoin d’inclure filesize ou filetype dans votre demande. Pour une demande cURL, vous pouvez rapidement charger une ressource dans Frame.io en incluant un lien vers votre fichier avec le paramètre "source": { "url":"URL_FOR_VIDEO" }. Le lien doit être accessible publiquement. Sinon, vous pouvez utiliser le SDK Python, qui gère la division de votre fichier en fragments pour chaque lien de chargement à votre place. ``` cURL

curl —request POST \

—url https://api.frame.io/v2/assets/&lt;asset_id&gt;/children \ —header ‘authorization: Bearer<dev_token>’ \

—header ‘content-type: application/json’ \

—data ’{“filesize”:200000,“filetype”:“video/mp4”,“name”:“test”,“source”:{“url”:“URL_FOR_VIDEO”},“type”:“file”}’

</dev_token></asset_id>```

Python
1filesize = 30000000
2upload_urls = ["https://...", "https://...", "https://..."]
3chunk_size = filesize / len(upload_urls)
4
5start_byte = 0 # Set to 0 to start
6for i, url in enumerate(upload_urls):
7 end_byte = chunk_size * (i + 1)
8 upload_chunk(url=url, start_byte, end_byte)
9 start_byte = start_byte + chunk_size
L'URL des asset va expirer

Les URL que vous obtenez de l’appel API de création d’asset sont pré-signées pour autoriser votre chargement, mais expireront après 24 heures.

Créez votre propre chargeur de fichiers

Si vous voulez créer votre propre chargeur, pour de meilleures performances, il est recommandé de charger les segments en parallèle. Chaque segment doit être PUT directement vers les URL Amazon S3 fournies dans la réponse de l’API Frame.io. Vos segments de fichiers doivent correspondre à l’ordre des upload_urls fournies, car elles dictent la séquence de l’asset final concaténé et transcodé. Cela signifie que la 1ère URL prend le 1er segment, la 2e URL prend le 2e segment, et ainsi de suite.

Exemple de pseudocode

Python
1filesize = 30000000
2
3
4
5
6upload_urls = [&quot;https://...&quot;, &quot;https://...&quot;, &quot;https://...&quot;]
7
8
9
10
11chunk_size = filesize / len(upload_urls)
12
13
14
15
16
17start_byte = 0 # Définir à 0 pour commencer
18
19
20
21
22for i, url in enumerate(upload_urls):
23
24
25
26
27end_byte = chunk_size * (i + 1)
28
29
30
31
32upload_chunk(url=url, start_byte, end_byte)
33
34
35
36
37start_byte = start_byte + chunk_size
38
39``` Les en-têtes pour chaque requête vers S3 doivent inclure le `filetype` de votre nouvel asset exactement comme il a été renvoyé de votre appel initial à l'API Frame.io, ainsi qu'un en-tête de confidentialité supplémentaire :
40
41```text
42PUT https://frameio-uploads-production.s3/etc/etc
43Content-Type: video/mp4
44x-amz-acl: private

Vous pouvez voir un exemple de comment tout cela est géré dans notre SDK Python ici.

Les erreurs AWS sont formatées en XML

Veuillez noter que toute erreur que vous obtenez à ce stade viendra directement d’AWS, et sera donc formatée comme XML, et non comme la gestion d’erreur JSON standard de Frame.io. Nous recommandons généralement de créer une logique de nouvelle tentative autour de ces chargements pour tout usage en production, car les fichiers incomplets (c’est-à-dire les fichiers avec des segments manquants) échoueront au transcodage et à l’affichage dans Frame.io

Et voilà ! Une fois que vous avez terminé les appels PUT vers les upload_urls, vous aurez un nouvel asset dans Frame.io.