Volver a la wiki

MediaAsset · Modelo signage

MediaAsset · Modelo signage

Propósito

MediaAsset representa cualquier recurso multimedia subido o referenciado para reproducción en pantallas. Soporta 5 tipos: imagen, vídeo, widget HTML5, URL web, stream en directo. Almacena ruta bajo MEDIA_ROOT/signage/, metadatos técnicos (resolución, duración, códec) y variantes transcodificadas para servir calidad óptima al player destino. Ciclo: uploading → processing → ready | error, gestionado por process_media_asset en signage/tasks.py.

Contrato

Campos:

CampoTipoNotas
organizationFK(core.Organization, CASCADE)Scope tenant
nameCharField(255)Nombre de display
file_pathCharField(500)Ruta relativa bajo MEDIA_ROOT/signage/; vacío para URL/stream
thumbnail_pathCharField(500)Miniatura post-proceso
asset_typeCharField(choices)image/video/html5/url/stream
statusCharField(choices)uploading/processing/ready/error
mime_typeCharField(100)MIME detectado
file_sizeBigIntegerFieldBytes; cuota workspace
durationFloatField(null)Segundos; solo vídeo/stream
resolutionCharField(20)1920x1080
metadataJSONFieldCódec, bitrate, color space
transcoded_variantsJSONField{"1080p": "path", "720p": "path"}
tagsArrayField(CharField)Libres; ["corporate"] tiene semántica especial
created_at / updated_atDateTimeFieldAuto

Meta:

Métodos:

Dependencias entrantes

MóduloUso
signage.PlaybackLogFK nullable asset — proof-of-play; SET_NULL
signage/api/content.pyCRUD completo: create, list, get, update, delete, bulk-delete, tag
signage/api/playlists.pyLookup por IDs para compose_project_svg
signage/api/portal.pyUpload desde portal cliente; swap en playlist
signage/views.pyLista/upload con filtro por tag
signage/views_publish.pyResolución en publish, corporate image, scheduled download
signage/services/deployment.pyCarga assets por IDs para SVG de despliegue
monitoring/api/signage/deploy.pyCorporate image: create/delete con tag corporate
core/workspace_api.pySUM(file_size) para cuota de storage
signage/tasks.pyprocess_media_asset: actualiza status, duration, resolution, metadata, thumbnail

Dependencias salientes

Ejemplos

# Upload de imagen
asset = MediaAsset.objects.create(
    organization=org,
    name="Banner Q1",
    file_path="signage/uploads/banner_q1.jpg",
    asset_type="image",
    status="uploading",
    mime_type="image/jpeg",
    file_size=204800,
)

# Uso en compose_project_svg (playlists.py)
assets_map = {a.id: a for a in MediaAsset.objects.filter(id__in=asset_ids, organization=org)}
playlist_items = [{"asset": assets_map[item["asset_id"]], "type": "image", "duration": 10}]
svg_content = compose_project_svg(playlist_items)

# Purgado imagen corporativa antes de reemplazar
MediaAsset.objects.filter(organization=org, tags__contains=["corporate"]).delete()

Véase también

Subir