Embedding av video

Video-objektene embeddes på sidene de er lagt inn på ved at templaten bruker vår egendefinerte template tag artikkel_video.

artikkel_video bruker wagtails innebygde {% embed %} tag for å inkludere videoen, og legger også på figurtekst med tittel/lengde av videoen.

Den innebygde {% embed %} støtter ikke å embedde videoer fra NTNUs strømmetjenester (se liste), men Wagtail-dokumentasjonen for embedded content forklarer hvordan en hjelpeklasse for å håndtere Mediasite kan legges til.

Hjelpeklassen artikkel.embeds.MediasiteFinder

Kode:

src/artikkel/embeds/mediasite.py

Klassen artikkel.embeds.MediasiteFinder implementerer en EmbedFinder som gjenkjenner Mediasite-videoer hostet på https://mediasite.ntnu.no/.

Mediasite støtter dessverre ikke oEmbed-protokollen, og vi har heller ikke funnet et eget API i Mediasite for å hente ut informasjonen som trengs for å embedde videoer.

Vi må derfor gjøre noen antakelser, mellom annet at Mediasite ikke kommer til å drastisk endre hvordan URL-ene er bygget opp:

Mediasite-URL-er kommer i flere versjoner, eksempelvis:

Den vanlige nettsiden har ingen <meta> eller <link> tags som henviser til den embeddbare URL-en, informasjonen ligger inne i en <script> tag som er et javascript-objekt (som ikke er i 100% json-format, og som dessuten ligger sammen med annen javascript-kode).

Vi omskriver derfor URL-er på den førstnevnte formen til sistnevnte form, dermed kan vi embedde både Video-objekter som lenker til den fullstendige Mediasite-nettsiden og objekter som lenker direkte til videostrømmen (se metoden MediasiteFinder.rewrite_path).

Deretter genereres en passende HTML-snippet (iframe) for å embedde Mediasite-videoen (se metoden MediasiteFinder.find_embed).

Hjelpeklassen artikkel.embeds.PanoptoFinder

Kode:

src/artikkel/embeds/panopto.py

Panopto støtter heller ikke oEmbed-protokollen, og vi har heller ikke funnet et eget API i Panopto for å hente ut informasjonen som trengs for å embedde videoer.

Vi gjør derfor som for Mediasite og skriver om URL-ene manuelt.

Installasjon

Wagtail gjøres oppmerksom på at hjelpeklassene finnes via følgende innstilling i settings.py:

WAGTAILEMBEDS_FINDERS = [
    {
        'class': 'artikkel.embeds.panopto',
    },
    {
        'class': 'artikkel.embeds.mediasite',
    },
    {
        'class': 'wagtail.embeds.finders.oembed',
    }
]