PAQUETES / MULTIPART

Dividir paquetes grandes

Multipart separa un payload embebido grande en archivos adyacentes sin perder el manifiesto, el grafo ni la verificación SHA-256 del contenido lógico.

Cuándo usarlo

Úsalo cuando el curso contiene un payload grande —por ejemplo un vídeo, un ZIP SCORM o un binario— y no quieres que ese contenido viaje dentro del único archivo exterior .p2lrn.

ANTES curso.p2lrn manifest + graph + payload grande
→
DESPUÉS curso-split.p2lrn manifest + graph + descriptor curso-split.part001 curso-split.part002 curso-split.part003

Comando básico

Parte de un paquete ya válido. El comando crea un nuevo paquete con el descriptor Multipart y escribe las partes junto al archivo de salida.

Terminal
p2lrn-multipart   curso.p2lrn   curso-split.p2lrn   --part-size 26214400
Tamaño por defecto25 MiB · 26214400 bytes
Mínimo permitido1 MiB · 1048576 bytes
Selección automáticala representación embebida más grande que supera el límite
Selección explícita--representation <representation-id>

Qué cambia dentro del paquete

La representación deja de apuntar directamente al payload grande y pasa a apuntar a un descriptor multipart/*.json. El perfil multipart se declara como requerido.

Descriptor conceptual
{
  "version": "1",
  "mediaType": "video/mp4",
  "size": 1503238553,
  "byteDigest": "sha256:…",
  "parts": [
    {
      "href": "curso-split.part001",
      "size": 26214400,
      "byteDigest": "sha256:…"
    },
    {
      "href": "curso-split.part002",
      "size": 26214400,
      "byteDigest": "sha256:…"
    }
  ]
}

Cómo lo reconstruye el Player

  1. 1. Descriptor.El Player abre el descriptor multipart del paquete exterior.
  2. 2. Resolución.Cada href se resuelve de forma relativa a la URL del .p2lrn.
  3. 3. Verificación.Cada .partNNN se valida con su SHA-256.
  4. 4. Reconstrucción.Las partes se concatenan en el orden declarado.
  5. 5. Digest final.Se verifica el SHA-256 del payload lógico completo.
  6. 6. Renderer.Sólo entonces se entrega al renderer normal.

Publicación correcta

El archivo exterior y todas las partes deben quedar accesibles en la misma ruta relativa.

https://content.example.com/courses/curso/
/courses/curso/
├─ curso-split.p2lrn
├─ curso-split.part001
├─ curso-split.part002
├─ curso-split.part003
└─ curso-split.part004
No muevas las partes por separado

Los href son relativos al paquete exterior. Si una parte falta o cambia, la verificación falla.

SCORM y otros subpaquetes

Cuando una actividad usa una vista package-member, por ejemplo index.html dentro de un ZIP SCORM, multipart conserva el nombre del miembro. El Player reconstruye primero el ZIP lógico y después abre el miembro interno solicitado.

Varios payloads grandes

El comando transforma una representación por ejecución. Si necesitas elegir una concreta, usa --representation. Si repites el proceso sobre un paquete que ya contiene multipart, conserva en el mismo directorio las partes generadas anteriormente y las nuevas.

Terminal
p2lrn-multipart curso.p2lrn curso-stage1.p2lrn   --representation urn:uuid:video-principal   --part-size 26214400

p2lrn-multipart curso-stage1.p2lrn curso-final.p2lrn   --representation urn:uuid:scorm-grande   --part-size 26214400

Para muchos recursos pesados, valora también representar algunos como recursos remotos autorizados en lugar de convertir todo el curso en un conjunto enorme de fragmentos.

Comprobación antes de publicar

Valida el paquete resultante y conserva juntas todas las partes generadas antes de subirlo al servidor.

Terminal
p2lrn-validate curso-final.p2lrn
p2lrn-inspect curso-final.p2lrn
  • OUTEREl paquete exterior valida.
  • PARTSTodas las partes existen en la misma ruta pública.
  • HASHNinguna parte ha cambiado después de generarse.
  • PLAYEREl Player puede reconstruir el payload y renderizarlo.

Ejemplo Multipart

El ejemplo incluido divide un recurso de prueba en varias partes y permite abrir el paquete resultante en el visor para comprobar su reconstrucción.

/examples/multipart-demo/
course.p2lrn\ncourse.part001\ncourse.part002\ncourse.part003\ncourse.part004\nmetadata.json

¿Necesitas ayuda con este punto?

El formulario completo está centralizado para no repetirlo en cada artículo técnico.

Contactar