Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

QoE Metrics Reporting - Support for BufferLevel metric #33

Closed
dsilhavy opened this issue Jun 20, 2023 · 6 comments
Closed

QoE Metrics Reporting - Support for BufferLevel metric #33

dsilhavy opened this issue Jun 20, 2023 · 6 comments
Assignees
Labels
enhancement New feature or request
Milestone

Comments

@dsilhavy
Copy link
Contributor

dsilhavy commented Jun 20, 2023

Feature description

Buffer level status events should be exposed by the ExoPlayerAdapter class and included in the QoE metrics report.

Relevant specifications and corresponding clauses

  • ISO/IEC 23009-1 5th edition - clause D.4.5
  • 3GPP TS 26.501 Rel-17
  • 3GPP TS 26.512 Rel-17
  • 3GPP TS 26.247 - clauses 10.6.2 and 10.6.3

Example

<QoeMetric>
  <BufferLevel>
     <BufferLevelEntry t="2011-02-16T09:08:19" level="84673"/>
     <BufferLevelEntry t="2011-02-16T09:08:20" level="93874"/>
  </BufferLevel> 
</QoeMetric>
@dsilhavy dsilhavy added the enhancement New feature or request label Jun 20, 2023
@dsilhavy dsilhavy self-assigned this Jun 20, 2023
@dsilhavy
Copy link
Contributor Author

Follow up question: Should the buffer level be derived once the metrics are requested or at a certain interval. For the latter, we can then return a list of all the collected bufferlevel entries since the last request.

@rjb1000
Copy link

rjb1000 commented Jun 20, 2023

Follow up question: Should the buffer level be derived once the metrics are requested or at a certain interval. For the latter, we can then return a list of all the collected bufferlevel entries since the last request.

ServiceAccessInformation.clientMetricsReportingConfigurations[] specifies the reporting interval for QoE metrics, but not the metric sampling interval. I conclude therefore that the sampling interval is implementation-dependent as of TS 26.512 V17.5.0.

I envisage two asynchronous activities:

  • Media Stream Handler samples each metric at (currently implementation-specific) periodic interval.
  • Media Session Handler sends QoE metrics reports at periodic interval specified in Service Access Information containing all of the metric values sampled since the last report was sent.

@dsilhavy
Copy link
Contributor Author

Thanks @rjb1000

Media Session Handler sends QoE metrics reports at periodic interval specified in Service Access Information containing all of the metric values sampled since the last report was sent.

This periodic interval is in place and follows the reportingInterval value of the ServiceAccessInformation.clientMetricsReportingConfigurations

Media Stream Handler samples each metric at (currently implementation-specific) periodic interval.

This would indeed be required with the current implementaton as the buffer level is requested via the Exoplayer API and is currently not event driven like RepSwitch or HttpList. Maybe this would also be a configuration option provided via M8?

@rjb1000
Copy link

rjb1000 commented Jun 20, 2023

Maybe this would also be a configuration option provided via M8?

In a real world implementation, the QoE metrics sampling period is not something that would be signalled in a service catalogue feed at reference point M8 (think DVB-I).

Ideally, the M1 and M5 APIs would be extended to explicitly specify the data sampling period to the Media Session Handler. I suggest you raise an issue in 5G-MAG/Standards.

But, as a short term measure, I think that adding a configuration parameter to our test M8 feed isn't an unreasonable way of temporarily compensating for this gap in the specifications.

@dsilhavy
Copy link
Contributor Author

dsilhavy commented Jul 10, 2023

Similar to RepresentationSwitch and HttpList I am capturing the BufferLevel based on events now:

  • When segment download is completed
  • When a buffering event is thrown

A period timeout solution would also be possible if signaled via M8 or M5 (see above). However, the ExoPlayer API endpoints can only be called from the main thread so we cannot simply use a timer function for this. We will need to use something like a Handler to post a Runnable on the main thread.

Example report as currently generated:

        <QoeMetric>
            <BufferLevel>
                <BufferLevelEntry level="29992" t="1688980890949" />
                <BufferLevelEntry level="31886" t="1688980891024" />
                <BufferLevelEntry level="29972" t="1688980892972" />
                <BufferLevelEntry level="31918" t="1688980892996" />
                <BufferLevelEntry level="30013" t="1688980894929" />
                <BufferLevelEntry level="31898" t="1688980895019" />
                <BufferLevelEntry level="30020" t="1688980896923" />
                <BufferLevelEntry level="31869" t="1688980897041" />
                <BufferLevelEntry level="30021" t="1688980898921" />
            </BufferLevel>
        </QoeMetric>

@dsilhavy dsilhavy added this to the Version 1.2.0 milestone Apr 4, 2024
@dsilhavy
Copy link
Contributor Author

dsilhavy commented Apr 4, 2024

Implemented in #67

@dsilhavy dsilhavy closed this as completed Apr 4, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Development

No branches or pull requests

2 participants