Skip to content

VPAAMP-542 AAMP VOD CDAI using reservation APIs instead of Player Switching [Nitro] - Phase 2#1579

Open
pstroffolino wants to merge 5 commits into
dev_sprint_25_2from
feature/VPAAMP-420-phase2
Open

VPAAMP-542 AAMP VOD CDAI using reservation APIs instead of Player Switching [Nitro] - Phase 2#1579
pstroffolino wants to merge 5 commits into
dev_sprint_25_2from
feature/VPAAMP-420-phase2

Conversation

@pstroffolino

Copy link
Copy Markdown
Contributor

Reason for Change: follow-up work to complete core functionality for reservation based ad insertion

Phase 2 extends AAMP's client-side DAI for DASH VOD using the same reservation API already used for live CDAI. Ad pods are inserted at registered time positions in the VOD source asset rather than at manifest period boundaries. Preroll, midroll, and postroll positions are all supported.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds Phase 2 support for DASH VOD client-side DAI using the existing reservation APIs by introducing VOD ad-break registration/cancellation APIs, firing a new VOD ad-break opportunity event ahead of insertion points (lookahead), and extending MPD fetcher/ad-manager logic plus bindings/docs/tests to support preroll/midroll/postroll insertion points.

Changes:

  • Introduces registerVodAdBreak / cancelVodAdBreak APIs through Player/PrivateInstance layers and JS/aampcli, plus a new AAMP_EVENT_VOD_ADBREAK_OPPORTUNITY event and JS event mapping.
  • Adds VOD ad-break tracking in the MPD ad manager (registration, cancellation, lookahead event firing, virtual position accounting, postroll EOS intercept, resume handling).
  • Adds/updates configuration (vodAdBreakLookaheadSec) and expands unit/functional tests and documentation to cover the new behavior.

Reviewed changes

Copilot reviewed 28 out of 28 changed files in this pull request and generated 13 comments.

Show a summary per file
File Description
test/utests/tests/StreamAbstractionAAMP_MPD/FunctionalTests.cpp Adds default int config entry for vodAdBreakLookaheadSec in MPD functional test setup.
test/utests/tests/StreamAbstractionAAMP_MPD/FetcherLoopTests.cpp Adds default int config entry for vodAdBreakLookaheadSec in fetcher-loop test setup.
test/utests/tests/ConfigTests/ConfigTests.cpp Adds config tests for vodAdBreakLookaheadSec default, JSON parsing, and negative range handling.
test/utests/tests/AdManagerMPDTests/FunctionalTests.cpp Adds functional tests for VOD ad-break lookahead behavior and sentinel tracking.
test/utests/fakes/FakePrivateInstanceAAMP.cpp Adds stubbed RegisterVodAdBreak/CancelVodAdBreak methods to the fake PrivateInstance.
test/utests/fakes/FakePlayerInstanceAamp.cpp Adds stubbed RegisterVodAdBreak/CancelVodAdBreak methods to the fake PlayerInstance.
test/utests/fakes/FakeAdManager.cpp Extends fake ad manager classes with new VOD CDAI methods and members for linking tests.
test/utests/fakes/FakeAampEvent.cpp Adds fake implementation for VodAdBreakOpportunityEvent.
test/utests/aampcfg.json Adds a JSON config file under utests (appears to duplicate runtime-generated test file).
test/aampcli/AampcliPlaybackCommand.h Declares new aampcli commands to register/cancel VOD ad breaks.
test/aampcli/AampcliPlaybackCommand.cpp Implements new aampcli commands to register/cancel VOD ad breaks.
test/aampcli/Aampcli.cpp Prints the new VOD ad-break opportunity event in the CLI event listener.
priv_aamp.h Declares PrivateInstance APIs for registering/canceling VOD ad breaks.
priv_aamp.cpp Implements PrivateInstance VOD ad-break API forwarding to CDAI object.
main_aamp.h Declares PlayerInstance APIs for registering/canceling VOD ad breaks.
main_aamp.cpp Implements PlayerInstance VOD ad-break API forwarding to PrivateInstance.
jsbindings/jsutils.cpp Adds JS event name mapping for vodAdBreakOpportunity.
jsbindings/jsbindings.cpp Adds JS listener and JS APIs registerVodAdBreak / cancelVodAdBreak.
fragmentcollector_mpd.cpp Adds fetcher-loop lookahead firing and postroll EOS intercept; adds VOD resume seek behavior after pod end.
AdManagerBase.h Adds virtual no-op VOD ad-break APIs and GetVirtualPosition() to CDAIObject base.
admanager_mpd.h Adds VOD CDAI structures/methods, state event VOD_BREAK_START, and new VOD tracking members.
admanager_mpd.cpp Implements VOD ad-break registration/cancellation/lookahead event firing, crossing detection, completion, and virtual position logic.
AampEvent.h Adds AAMP_EVENT_VOD_ADBREAK_OPPORTUNITY and VodAdBreakOpportunityEvent class.
AampEvent.cpp Implements VodAdBreakOpportunityEvent.
AampDefine.h Adds DEFAULT_VOD_ADBREAK_LOOKAHEAD_SEC.
AampConfig.h Adds new int config enum eAAMPConfig_VodAdBreakLookaheadSec.
AampConfig.cpp Adds lookup-table entry for vodAdBreakLookaheadSec.
AAMP-UVE-API.md Documents the new VOD CDAI mechanism and JS APIs/events.

Comment thread admanager_mpd.cpp Outdated
Comment thread admanager_mpd.cpp
Comment thread admanager_mpd.cpp
Comment thread admanager_mpd.cpp Outdated
Comment thread fragmentcollector_mpd.cpp Outdated
Comment thread test/utests/aampcfg.json Outdated
Comment thread AAMP-UVE-API.md
Comment thread test/utests/fakes/FakeAdManager.cpp Outdated
Comment thread test/aampcli/AampcliPlaybackCommand.cpp
Comment thread test/utests/tests/AdManagerMPDTests/FunctionalTests.cpp
@rdkcmf-jenkins

Copy link
Copy Markdown

b'## Blackduck scan failure details

Summary: 0 violations, 0 files pending approval, 1 file pending identification.

  • Protex Server Path: /home/blackduck/github/aamp/1579/rdk/components/generic/aamp

  • Commit: 4af0705

Report detail: gist'

- admanager_mpd.cpp: reorder ctor initializer list to match header
  declaration order; add missing mWaitForManifestUpdate(0) and
  mVodAdBreakIdToPos() initialisers
- admanager_mpd.cpp ResetState(): clear mVodAdBreakIdToPos and reset
  mVodResumeOffset to 0.0 so no stale VOD state survives a tune
- admanager_mpd.cpp RegisterVodAdBreak(): erase old mVodAdBreaks entry
  when same breakId is re-registered at a different insertionPointSec,
  preventing duplicate keys and broken CancelVodAdBreak() semantics
- admanager_mpd.cpp/h HasPendingVodBreakAtPosition(): take mDaiMtx lock
  (remove const; mDaiMtx is non-mutable) to fix data race
- fragmentcollector_mpd.cpp: snapshot mAdState under mDaiMtx before
  CheckVodAdBreakCrossing to fix bare read data race in fetcher loop
- FakeAdManager.cpp: reorder ctor init list to match header; add
  mWaitForManifestUpdate(0) and mVodAdBreakIdToPos() to fix -Wreorder
- AdManagerMPDTests/FunctionalTests.cpp: add #include <limits> for
  std::numeric_limits usage
- AampcliPlaybackCommand.cpp: replace assert() on user-input token with
  explicit if-check + error output in HandleCommandCancelVodAdBreak
- AAMP-UVE-API.md: correct breakDurationSec description; it is advisory
  metadata, not used by the lookahead window calculation
- test/utests/aampcfg.json: remove stray generated file from source
  control; add test/utests/.gitignore to prevent re-commit
@pstroffolino pstroffolino force-pushed the feature/VPAAMP-420-phase2 branch from 4af0705 to 40a03ac Compare June 11, 2026 00:40
@rdkcmf-jenkins

Copy link
Copy Markdown

b'## Blackduck scan failure details

Summary: 0 violations, 0 files pending approval, 1 file pending identification.

  • Protex Server Path: /home/blackduck/github/aamp/1579/rdk/components/generic/aamp

  • Commit: 40a03ac

Report detail: gist'

@rdkcmf-jenkins

Copy link
Copy Markdown

b'## Blackduck scan failure details

Summary: 0 violations, 0 files pending approval, 1 file pending identification.

  • Protex Server Path: /home/blackduck/github/aamp/1579/rdk/components/generic/aamp

  • Commit: 40a03ac

Report detail: gist'

@rdkcmf-jenkins

Copy link
Copy Markdown

b'## WARNING: A Blackduck scan failure has been waived

A prior failure has been upvoted

  • Upvote reason: ok

  • Commit: 40a03ac
    '

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants