Implementing the ADL Video Profile

Video Profile Materials

Link to the profile: https://profiles.adlnet.gov/profile/90b2c849-d744-4d0c-8bd0-403e7859a35b

Everything about profiles: https://adlnet.github.io/xapi-profiles/xapi-profiles-communication.html

Profile JSON definition:

Gap Analysis

The goal is to determine what changes we would need to make to the existing event-routing-backends implementation of video events to make it full conformant with the video profile.

Problem 1: Unsupported Events

The Open edX event stream currently has events related to video that are not supported by the existing ADL profile, for example the show_transcript event.

Such events seem to be appropriately modeled using the profiles “Interacted” verb. A simple example of the the show_transcript event would be:

{ "username": "e0d", "event_source": "browser", "event_type": "show_transcript", "event": { "code": "AU66NP1kQm0", "id": "i4x-MITx-6_00_1_3x-videw-Asymptotic_Notation", "currentTime": 0 }, "context": { "course_id": "MITx/6.00.1_3x/2T2014", "org_id": "MITx", "path": "/event" }, "time": "2022-07-27T10:30:03.234323+00:00", "page": "https://courses.edx.org/courses/MITx/6.00.1_3x/2T2014/courseware/e52720be0db811eda290381428857bd9/videosquence:Lecture_8/" }

Interacted was designed to support diverse extensions without requiring a change to the core of the video profile.

Used to express that the actor interacted with the player (except play, pause, seek). e.g. mute, unmute, change resolution, change player size, etc.

Here’s an example of a template from the video profile documentation for a statement generate when closed captioning is enabled.

Note that the specification of the generic interacted verb happens in the extensions section of the context. The extensions are specified as a name value pair.

{ "actor": { "mbox": "mailto:jlh@example.com", "name": "Video User", "objectType": "Agent" }, "verb": { "id": "http://adlnet.gov/expapi/verbs/interacted", "display": { "en-US": "interacted" } }, "timestamp": "2018-08-07T15:42:20.066Z", "object": { "definition": { "type": "https://w3id.org/xapi/video/activity-type/video", "name": { "en-US": "Ocean Life" }, "description": { "en-US": "A short video clip of ocean lifeforms, used by videojs.com as part of their demo." } }, "id": "http://vjs.zencdn.net/v/oceans.mp4", "objectType": "Activity" }, "result": { "extensions": { "https://w3id.org/xapi/video/extensions/time": 28.799 } }, "context": { "contextActivities": { "category": [ { "id": "https://w3id.org/xapi/video" } ] }, "extensions": { "https://w3id.org/xapi/video/extensions/session-id": "86c5b148-4462-4da9-a13f-b570c27fa049", "https://w3id.org/xapi/video/extensions/cc-subtitle-lang": "en", "https://w3id.org/xapi/video/extensions/cc-enabled": true }, "registration": "96094a33-cc66-4d9a-8810-a0850ae2a4e1" }, "id": "f71a5b62-53d5-4794-aa75-7e0dc2570eed" }

 

Mapping Existing Event Routing Backing Statements to the Video Profile

Mapping documentation for the Open edX events to xAPI events as currently implemented is in the event_routing_backends repository.