Status van speler bijhouden

De de staatsgebeurtenissen van de speler volgen hoe de kijkers met spelercontroles door een zitting interactie aangaan. Ze zijn optioneel en niet vereist voor de belangrijkste implementaties voor het bijhouden van media. De vijf trackable staten zijn: fullscreen , mute , closedCaptioning , pictureInPicture en inFocus .

Gebeurtenissen in de Player-status zijn handig voor een beter begrip van het gebruik van toegankelijkheidsfuncties, zoals hoe vaak gebruikers ondertiteling of dempen inschakelen. Ze laten ook gedragspatronen zien, zoals volledig scherm versus inlineweergave en beeld-in-beeld multitasking.

Gebeurtenissen van Player

Player, gebeurtenis
Actie
Player voert een status in
Start oproepstatus
Speler verlaat een staat
Einde van oproepstatus

Standaard- en aangepaste frames

Er zijn vijf standaardspelerstatussen beschikbaar en u kunt uw eigen aangepaste statussen toevoegen.

Standaardstatusnaam
Media SDK-constante
API-naam van mediagroep
Volledig scherm
ADB.Media.PlayerState.Fullscreen
fullScreen
Ondertiteling
ADB.Media.PlayerState.ClosedCaptioning
closedCaptioning
Dempen
ADB.Media.PlayerState.Mute
mute
Afbeelding in beeld
ADB.Media.PlayerState.PictureInPicture
pictureInPicture
Bij focus
ADB.Media.PlayerState.InFocus
inFocus

Zie ​ de staatsvariabelen van de Speler ​ voor de volledige veranderlijke verwijzing met inbegrip van wegen XDM en metrische definities.

de staten van de Douane: u kunt douanestaten tot stand brengen om extra spelergedrag te vangen specifiek voor uw toepassing. Zie de ​ Verwijzing van media API: createStateObject voor details over het creëren van de voorwerpen van de douanestatus.

Implementatiestappen

  1. {het begin van de 1} Staat van de Vraag 🔗wanneer de speler om het even welke vijf trackable staten ingaat.​De veelvoudige staten kunnen tezelfdertijd actief zijn, en de veelvoudige staten kunnen in de zelfde gebeurtenisvraag worden begonnen.
  2. eind van de Staat van de Vraag 🔗 wanneer de speler een staat weggaat. De veelvoudige staten kunnen in de zelfde gebeurtenisvraag worden gebeëindigd, en de staten kunnen samen in één enkele vraag worden begonnen en worden gebeëindigd.

Richtsnoeren

  • Eén videosessie is beperkt tot tien spelerstatussen.
  • Elke combinatie van frames is toegestaan.
  • Als er meerdere spelerstatussen worden doorgegeven, blijven alleen de eerste 10 behouden en worden deze verderop in de mediagroep doorgestuurd.
  • Het maximum van 10 staten is van toepassing op alle staten, ongeacht of zij open of gesloten zijn.
  • Een status kan meerdere keren beginnen en eindigen en telt als één status. closedCaptioning kan bijvoorbeeld vijf keer worden gestart en gestopt, maar telt als één status.
  • De spelerstatus wordt berekend over alle afspeelstatussen (geen splitsen).
  • De spelerstatussen worden vastgelegd voor elke afzonderlijke afspeelsessie. De spelerstatus wordt niet berekend over afspeelbestanden.
  • Kennis van de status van de toepassing blijft niet behouden nadat een status is gestopt. Nadat een status is afgelopen, moet de status opnieuw worden gestart om door te gaan met bijhouden.

Meerdere frames tegelijk bijwerken

Op XDM-gebaseerde platforms kunnen meerdere statuswijzigingen worden gebatcheerd in één statesUpdate -aanroep met behulp van arrays in statesStart en statesEnd . Bij mobiele SDK’s is voor elke statuswijziging een aparte aanroep vereist.

In de volgende voorbeelden worden dempen en beeld-in-beeld samen gestart en wordt vervolgens overgeschakeld naar volledig scherm.

Aanbevolen implementatietypen

SDK van het Web
code language-javascript
// t0 — start mute and picture-in-picture together
alloy("sendEvent", {
  xdm: {
    eventType: "media.statesUpdate",
    mediaCollection: {
      statesStart: [{ name: "mute" }, { name: "pictureInPicture" }],
      sessionID: "{sid}",
      playhead: 0
    }
  }
});

// t1 — end mute and picture-in-picture; start full screen
alloy("sendEvent", {
  xdm: {
    eventType: "media.statesUpdate",
    mediaCollection: {
      statesEnd: [{ name: "mute" }, { name: "pictureInPicture" }],
      statesStart: [{ name: "fullscreen" }],
      sessionID: "{sid}",
      playhead: 0
    }
  }
});

// t2 — end full screen
alloy("sendEvent", {
  xdm: {
    eventType: "media.statesUpdate",
    mediaCollection: {
      statesEnd: [{ name: "fullscreen" }],
      sessionID: "{sid}",
      playhead: 0
    }
  }
});
iOS

Mobile SDK biedt geen ondersteuning voor batchverwerking. Stuur een aparte oproep voor elke statuswijziging.

code language-swift
// t0 — start mute and picture-in-picture
let muteState = Media.createStateObjectWith(stateName: MediaConstants.PlayerState.MUTE)
let pipState = Media.createStateObjectWith(stateName: MediaConstants.PlayerState.PICTURE_IN_PICTURE)
tracker.trackEvent(event: MediaEvent.StateStart, info: muteState, metadata: nil)
tracker.trackEvent(event: MediaEvent.StateStart, info: pipState, metadata: nil)

// t1 — end mute and picture-in-picture; start full screen
tracker.trackEvent(event: MediaEvent.StateEnd, info: muteState, metadata: nil)
tracker.trackEvent(event: MediaEvent.StateEnd, info: pipState, metadata: nil)
let fullscreenState = Media.createStateObjectWith(stateName: MediaConstants.PlayerState.FULLSCREEN)
tracker.trackEvent(event: MediaEvent.StateStart, info: fullscreenState, metadata: nil)

// t2 — end full screen
tracker.trackEvent(event: MediaEvent.StateEnd, info: fullscreenState, metadata: nil)
Android

Mobile SDK biedt geen ondersteuning voor batchverwerking. Stuur een aparte oproep voor elke statuswijziging.

code language-kotlin
// t0 — start mute and picture-in-picture
val muteState = Media.createStateObject(MediaConstants.PlayerState.MUTE)
val pipState = Media.createStateObject(MediaConstants.PlayerState.PICTURE_IN_PICTURE)
tracker.trackEvent(Media.Event.StateStart, muteState, null)
tracker.trackEvent(Media.Event.StateStart, pipState, null)

// t1 — end mute and picture-in-picture; start full screen
tracker.trackEvent(Media.Event.StateEnd, muteState, null)
tracker.trackEvent(Media.Event.StateEnd, pipState, null)
val fullscreenState = Media.createStateObject(MediaConstants.PlayerState.FULLSCREEN)
tracker.trackEvent(Media.Event.StateStart, fullscreenState, null)

// t2 — end full screen
tracker.trackEvent(Media.Event.StateEnd, fullscreenState, null)
Roku
code language-brightscript
' t0 — start mute and picture-in-picture together
m.aepSdk.sendMediaEvent({
    "xdm": {
        "eventType": "media.statesUpdate",
        "mediaCollection": {
            "statesStart": [{"name": "mute"}, {"name": "pictureInPicture"}],
            "playhead": 0
        }
    }
})

' t1 — end mute and picture-in-picture; start full screen
m.aepSdk.sendMediaEvent({
    "xdm": {
        "eventType": "media.statesUpdate",
        "mediaCollection": {
            "statesEnd": [{"name": "mute"}, {"name": "pictureInPicture"}],
            "statesStart": [{"name": "fullscreen"}],
            "playhead": 0
        }
    }
})

' t2 — end full screen
m.aepSdk.sendMediaEvent({
    "xdm": {
        "eventType": "media.statesUpdate",
        "mediaCollection": {
            "statesEnd": [{"name": "fullscreen"}],
            "playhead": 0
        }
    }
})
Media Edge API
code language-sh
# t0 — start mute and picture-in-picture together
curl -X POST "https://edge.adobedc.net/ee/va/v1/statesUpdate?configId={datastreamID}" \
--header 'Content-Type: application/json' \
--data '{
  "events": [{
    "xdm": {
      "eventType": "media.statesUpdate",
      "mediaCollection": {
        "statesStart": [{"name": "mute"}, {"name": "pictureInPicture"}],
        "sessionID": "{sid}",
        "playhead": 0
      },
      "timestamp": "YYYY-01-01T00:00:00+00:00"
    }
  }]
}'

# t1 — end mute and picture-in-picture; start full screen
curl -X POST "https://edge.adobedc.net/ee/va/v1/statesUpdate?configId={datastreamID}" \
--header 'Content-Type: application/json' \
--data '{
  "events": [{
    "xdm": {
      "eventType": "media.statesUpdate",
      "mediaCollection": {
        "statesEnd": [{"name": "mute"}, {"name": "pictureInPicture"}],
        "statesStart": [{"name": "fullscreen"}],
        "sessionID": "{sid}",
        "playhead": 0
      },
      "timestamp": "YYYY-01-01T00:01:00+00:00"
    }
  }]
}'

# t2 — end full screen
curl -X POST "https://edge.adobedc.net/ee/va/v1/statesUpdate?configId={datastreamID}" \
--header 'Content-Type: application/json' \
--data '{
  "events": [{
    "xdm": {
      "eventType": "media.statesUpdate",
      "mediaCollection": {
        "statesEnd": [{"name": "fullscreen"}],
        "sessionID": "{sid}",
        "playhead": 0
      },
      "timestamp": "YYYY-01-01T00:02:00+00:00"
    }
  }]
}'

Oudere implementatietypen (alleen voor analyse)

Media SDK JS 3.x

De veelvoudige staatsveranderingen vereisen afzonderlijke vraag.

code language-javascript
// t0 — start mute and picture-in-picture
var muteState = ADB.Media.createStateObject(ADB.Media.PlayerState.Mute);
var pipState = ADB.Media.createStateObject(ADB.Media.PlayerState.PictureInPicture);
tracker.trackPlayerStateStart(muteState);
tracker.trackPlayerStateStart(pipState);

// t1 — end mute and picture-in-picture; start full screen
tracker.trackPlayerStateEnd(muteState);
tracker.trackPlayerStateEnd(pipState);
var fullscreenState = ADB.Media.createStateObject(ADB.Media.PlayerState.FullScreen);
tracker.trackPlayerStateStart(fullscreenState);

// t2 — end full screen
tracker.trackPlayerStateEnd(fullscreenState);
Chromecast

De veelvoudige staatsveranderingen vereisen afzonderlijke vraag.

code language-javascript
// t0 — start mute and picture-in-picture
var muteState = ADBMobile.media.createStateObject(ADBMobile.media.PlayerState.Mute);
var pipState = ADBMobile.media.createStateObject(ADBMobile.media.PlayerState.PictureInPicture);
ADBMobile.media.trackEvent(ADBMobile.media.Event.StateStart, muteState, null);
ADBMobile.media.trackEvent(ADBMobile.media.Event.StateStart, pipState, null);

// t1 — end mute and picture-in-picture; start full screen
ADBMobile.media.trackEvent(ADBMobile.media.Event.StateEnd, muteState, null);
ADBMobile.media.trackEvent(ADBMobile.media.Event.StateEnd, pipState, null);
var fullscreenState = ADBMobile.media.createStateObject(ADBMobile.media.PlayerState.FullScreen);
ADBMobile.media.trackEvent(ADBMobile.media.Event.StateStart, fullscreenState, null);

// t2 — end full screen
ADBMobile.media.trackEvent(ADBMobile.media.Event.StateEnd, fullscreenState, null);
de Inzameling API van Media
code language-json
// t0 — start mute and picture-in-picture together
{
  "eventType": "statesUpdate",
  "params": {
    "statesStart": [
      { "media.state.name": "mute" },
      { "media.state.name": "pictureInPicture" }
    ]
  },
  "playerTime": { "playhead": 0, "ts": 1569999130627 }
}

// t1 — end mute and picture-in-picture; start full screen
{
  "eventType": "statesUpdate",
  "params": {
    "statesEnd": [
      { "media.state.name": "mute" },
      { "media.state.name": "pictureInPicture" }
    ],
    "statesStart": [
      { "media.state.name": "fullScreen" }
    ]
  },
  "playerTime": { "playhead": 0, "ts": 1569999230627 }
}

// t2 — end full screen
{
  "eventType": "statesUpdate",
  "params": {
    "statesEnd": [{ "media.state.name": "fullScreen" }]
  },
  "playerTime": { "playhead": 0, "ts": 1569999330627 }
}

Lange pauze

Wanneer een videosessie een pauzeduur van meer dan 30 minuten heeft, vereist de API een nieuwe sessie. Genereer een nieuwe sessie-id en bewaar alle actieve statussen zodat deze kunnen worden hersteld met stateStart -gebeurtenissen direct na de nieuwe sessionStart -aanroep.

sessionStart → stateStart (fullscreen) → stateStart (mute) → pauseStart → (pings for 30 minutes) → sessionEnd

Nadat sessionEnd is verzonden, start u een nieuwe sessie en verzendt u de actieve frames onmiddellijk opnieuw:

sessionStart → stateStart (fullscreen) → stateStart (mute) → ... other API events

Staatmetriek

Drie metriek worden berekend voor elke gevolgde staat en naar Adobe Analytics verzonden op de media dichte vraag:

Metrisch
Contextgegevenssleutel
Beschrijving
Frameset
a.media.states.[state.name].set = true
true als de status ten minste één keer is ingesteld tijdens het afspelen
Aantal staten
a.media.states.[state.name].count = 4
Aantal keren dat de status is opgetreden tijdens het afspelen
Frametijd
a.media.states.[state.name].time = 240
Totale tijd (seconden) die tijdens het afspelen in de status wordt doorgebracht
recommendation-more-help
media-analytics-help