Repository navigation
Add Lens connector - #133
Open
GillesMoris-Dolby wants to merge 12 commits into
Open
GillesMoris-Dolby wants to merge 12 commits into
GillesMoris-Dolby wants to merge 12 commits into
Conversation
Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This comment was marked as resolved.
This comment was marked as resolved.
LensConnector joins Lens in the registered theoplayer namespace with the adapter, takes the other join options plus an optional content ID provider, exposes the handle and the adapter, and disposes with the player. Low latency now follows a latency configuration or a HESP or Millicast source only: a THEOlive channel can be regular HLS. A test covers a play request on a new source while playing, which the Apple SDK reports as PLAY. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This comment was marked as resolved.
This comment was marked as resolved.
…efault Co-Authored-By: Gilles <Gilles.Moris@dolby.com>
Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
The example enables the Lens development backend and sends its reports to the staging ingest only while the switch is on. The scenario replays the same playback as the Lens demos of the other platforms, reported with the content ID lens-connector-scenario, and can run unattended from launch arguments. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…nario Adds the 2 s settles after unmute, rate 1 and inline, and waits 2 s instead of 3 s after the end, as agreed for all platforms. Fullscreen stands for the picture-in-picture or fullscreen step. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
The scenario now goes into the player's in-app picture-in-picture, as the web demo uses the in-page one, and reports the content ID lens-connector-demo-scenario like the other platforms. The README spells out the timing choices every platform makes. The demo gets a PiP button. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Destination... takes a URL and a format, CMCD or JSON, remembers them, and joins Lens again with that destination. The app counts what it sent there, with the last HTTP status, and allows plain http endpoints. This replaces the constant in Config.swift. Forwarded posts to staging went out with an empty body: setting the body stream to nil after the body cleared the body. They now carry the reports. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
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.
Summary
OptiView Lens is Dolby's cross-player observability SDK: it turns a player adapter's observations into CMCD sessions and reports, and replaces the in-player CMCD reporting. This PR adds its THEOplayer iOS/tvOS connector,
THEOplayerConnectorLens(Code/Lens). Web (web-connectors#112) and Android (android-connector#114) ship the same connector with the same public API.THEOplayerLensAdapterimplements Lens's observation-onlyLensPlayerAdapterover THEOplayer's public API: source and fallback, play/pause/waiting/seek/ended, fatal errors, tracks and qualities, readiness, live and low latency, rate/volume, presentation mode, and a snapshot (playhead, PDT, buffered, seekable, bandwidth estimate, dropped frames, view size). Lens derives the sessions, states and CMCD keys itself.try LensConnector(player: player, configuration: LensConfiguration())joins Lens with that adapter in the registeredtheoplayernamespace.LensConfigurationis the Lens join options minus namespace and player, plus an optionalcontentIdprovider. It exposeshandle(consent, flush) andadapter(for an app or SDK that joins Lens in its own namespace and shares the session), holds the player weakly and disposes onDESTROY. Google DAI sources are named by asset key orcontentSourceID/videoID; the provider overrides it.optiview-lens-sdk-swift0.6.0..<0.7.0); no podspec, so the podspec release workflow skips it. Root README lists it as supported from11.1.0(assumes the next release is a minor).Code/Lens-Examples): shows every report, a staging switch, a destination setting, and the one-minute scenario shared with the web and Android demos; can run unattended with-runScenario YES.THEOplayer behaviour the adapter works around:
SOURCE_CHANGEis synchronous and Google DAI sets the same description twice (sources are compared by identity);duration == 0means unknown;Qualityhas no identifier, so a rendition's id is its bandwidth.Known gaps, documented in the README: no loading quality (so no
br/bc), no codecs or frame rate (not public on Apple), no player-view visibility, fatal errors only, ads not reported as ads.Tests: XCTest target against a real player, wired into CI. CI green (
cocoapods-validateskips, no podspec).Link to Devin session: https://dolby.devinenterprise.com/sessions/27abb4e55d6144e09a91f424e6b09630
Open in Devin Desktop: https://dolby.devinenterprise.com/desktop/session/27abb4e55d6144e09a91f424e6b09630?variant=devin
Requested by: @GillesMoris-Dolby