VPAAMP-542 AAMP VOD CDAI using reservation APIs instead of Player Switching [Nitro] - Phase 2#1579
Open
pstroffolino wants to merge 5 commits into
Open
VPAAMP-542 AAMP VOD CDAI using reservation APIs instead of Player Switching [Nitro] - Phase 2#1579pstroffolino wants to merge 5 commits into
pstroffolino wants to merge 5 commits into
Conversation
Contributor
There was a problem hiding this comment.
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/cancelVodAdBreakAPIs through Player/PrivateInstance layers and JS/aampcli, plus a newAAMP_EVENT_VOD_ADBREAK_OPPORTUNITYevent 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. |
…, postroll EOS intercept, virtual position
…ped by header edit
…tion to AAMP-UVE-API.md
- 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
4af0705 to
40a03ac
Compare
|
b'## WARNING: A Blackduck scan failure has been waived A prior failure has been upvoted
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.