Salta ai contenuti

Multimedia: rendition, media clip e parametri dello schermo

Il modulo Multimedia modella le rendition PDF e i relativi parametri multimediali come value object immutabili. Ogni oggetto convalida nel costruttore le proprie invarianti ISO 32000-2 e si serializza nel dizionario PDF corrispondente. L’azione di rendition del modulo Navigation fa riferimento all’output prodotto.

Terminal window
composer require nextpdf/core:^3

Una rendition PDF descrive un elemento multimediale riproducibile, ad esempio audio, video o una clip interattiva, e le condizioni in cui un visualizzatore lo riproduce. ISO 32000-2 §13.2 definisce il modello a oggetti della rendition e del media. Questo modulo fornisce l’encoder tipizzato e convalidato per quel modello. Ogni classe è un value object final readonly: riceve le proprie voci nel costruttore, vi applica le regole strutturali della specifica ed emette una stringa di dizionario PDF da toDictionary(). Non riproduce media e non incorpora dati di file: produce il dizionario che il Writer serializza.

Rendition è la radice. Una Media Rendition (/MR) contiene un MediaClip e parametri opzionali di riproduzione e dello schermo. Una Selector Rendition (/SR) contiene un elenco ordinato di riferimenti a rendition di fallback. Il costruttore applica le esclusioni reciproche previste dalla specifica: una /MR richiede una clip e rifiuta i riferimenti del selettore; una /SR rifiuta le voci di clip, riproduzione e schermo. In questo modo non è possibile costruire una rendition non valida.

MediaClip rappresenta il dato multimediale o una sua sezione. Il sottotipo sezione consente a una rendition di riprodurre un sottointervallo senza copiare i dati. MediaPlayInfo e MediaScreenInfo contengono i parametri di riproduzione (/P) e di presentazione a schermo (/SP). Entrambi espongono isEmpty(), così il chiamante può omettere la voce quando la specifica raccomanda l’omissione anziché emettere un dizionario vuoto. MediaCriteria contiene gli insiemi di requisiti obbligatori (/MH) e best-effort (/BE), con una via di fuga extras per le voci che la superficie tipizzata non modella. L’intero modulo è @since 2.3.0.

ClasseMembri chiaveRuolo
Rendition__construct(...), toDictionary(), SUBTYPE_MEDIA, SUBTYPE_SELECTOROggetto rendition /MR o /SR (@since 2.3.0)
MediaClip__construct(...), toDictionary(), SUBTYPE_DATA, SUBTYPE_SECTIONOggetto dati / sezione del media clip (@since 2.3.0)
MediaPlayInfotoDictionary(), isEmpty()Parametri di riproduzione /P (@since 2.3.0)
MediaScreenInfotoDictionary(), isEmpty()Parametri dello schermo /SP (@since 2.3.0)
MediaCriteriatoDictionary(), isEmpty()Insiemi di requisiti /MH e /BE (@since 2.3.0)

Per la tabella PHPDoc completa, eseguire composer docs:generate-api-php -- --module=Multimedia.

Costruire una media rendition per una clip video incorporata.

<?php
declare(strict_types=1);
require_once __DIR__ . '/../vendor/autoload.php';
use NextPDF\Multimedia\MediaClip;
use NextPDF\Multimedia\Rendition;
$clip = new MediaClip(
subtype: MediaClip::SUBTYPE_DATA,
dataRef: 42, // indirect object number of the embedded file specification
);
$rendition = new Rendition(
subtype: Rendition::SUBTYPE_MEDIA,
name: 'Intro Video',
clip: $clip,
);
$dictionary = $rendition->toDictionary();

Costruire una selector rendition con fallback lungo una catena ordinata, mantenendo esplicitamente separati i criteri obbligatori e best-effort.

<?php
declare(strict_types=1);
require_once __DIR__ . '/../vendor/autoload.php';
use NextPDF\Multimedia\MediaCriteria;
use NextPDF\Multimedia\Rendition;
// Preferred rendition first, degraded fallback second.
$selector = new Rendition(
subtype: Rendition::SUBTYPE_SELECTOR,
name: 'Adaptive Media',
mustHonour: new MediaCriteria(/* strict /MH requirements */),
bestEffort: new MediaCriteria(/* soft /BE requirements */),
selectorRefs: [51, 52], // indirect rendition object numbers, in evaluation order
);
$dictionary = $selector->toDictionary();
  • Una rendition /MR senza un MediaClip solleva un’eccezione nel costruttore: è una regola della specifica, non un avviso a runtime. Costruirla con la clip.
  • Una rendition /SR rifiuta le voci di clip, riproduzione e schermo. Mescolare le due forme di rendition è un errore di programmazione, rilevato in fase di costruzione.
  • MediaPlayInfo::isEmpty() e MediaScreenInfo::isEmpty() esistono per poter omettere un /P o /SP vuoto. Emettere un dizionario vuoto quando la specifica raccomanda l’omissione è strutturalmente valido ma dispendioso: controllare isEmpty().
  • Il nome /N di una rendition non deve contenere un byte NUL; il costruttore lo rifiuta.
  • Gli elementi di selectorRefs sono numeri di oggetto indiretto, ciascuno >= 1. Il modulo emette i riferimenti; risolverli in oggetti effettivi è compito del Writer.

Ogni chiamata a toDictionary() costruisce una stringa in modo lineare su un insieme fisso di voci: richiede microsecondi e non esegue I/O. Il profilo di riproducibilità è bitwise: lo stesso value object emette sempre gli stessi byte di dizionario. Il workload di riferimento predefinito rientra ampiamente nel budget di 1500 ms wall / 64 MB di picco. I dizionari multimediali sono piccoli rispetto al contenuto multimediale incorporato a cui fanno riferimento.

Questo modulo emette la struttura del dizionario; non incorpora né trasmette dati multimediali. La specifica del file incorporato a cui un MediaClip fa riferimento è prodotta dalla superficie degli allegati file del modulo Navigation, che delimita e convalida i byte incorporati. Trattare qualsiasi nome di file multimediale o nome di rendition proveniente da input utente come testo non attendibile. Il costruttore rifiuta i byte NUL ma non verifica il contenuto semantico di una stringa valida. Vedere il modello di minaccia del motore in /modules/core/security/.

I dizionari emessi da questo modulo seguono il modello a oggetti della rendition e del media in ISO 32000-2 §13.2, comprese le voci di dati e di sezione del media clip. Le mappature delle voci per tabella sono documentate inline in src/Multimedia/ con riferimento ai numeri di tabella §13.2 e coperte da tests/Unit/Multimedia/ (RenditionTest, MediaClipTest, MediaCriteriaTest, MediaPlayInfoTest, MediaScreenInfoTest). Si tratta di dettagli di implementazione, non di un’attestazione di conformità PDF 2.0 end-to-end; la conformità dell’intero documento è convalidata dalle suite oracle e golden descritte in /modules/core/conformance/.