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

Feature/metrics reporting #56

Merged
merged 13 commits into from
Apr 4, 2024
Merged

Feature/metrics reporting #56

merged 13 commits into from
Apr 4, 2024

Conversation

dsilhavy
Copy link
Contributor

@dsilhavy dsilhavy commented Feb 26, 2024

This PR adds support for QoE Metrics Reporting. In addition, it refactors the code to make it more modular, use dependency injection and introduce a more clear separation of concerns.

  • Adds dedicated controller classes for consumption reporting, QoE metrics reporting, handling of Service Access Information and session management. The MediaSessionHandlerMessengerService only acts as an entry point after an IPC message from the Media Stream Handler has been received. It calls the right controller class to perform the necessary actions.
  • The QoeMetricsReportingController requests QoE metrics reports from the MediaStreamHandler and sends them via M5 to the AF
  • QoeMetricsReportingController and ConsumptionReportingController extend ReportingController which is implemented as an abstract class. That way, common functionality and required methods are shared across ReportingController classes.
  • SessionController acts as a controller for media streaming sessions initiating playback and download of ServiceAccessInformation (via ServiceAccessInformationController).
  • Dedicated messenger services for incoming and outgoing messages
  • Added an Eventbus to implement an observer pattern that allow subscriber classes to react to changes dispatched by publisher classes. As an example. the ServiceAccessInformationController dispatches a notification once the ServiceAccessInformation has been updated to allow the ConsumptionReportingController to react to these changes.
  • Increases version number to 1.2.0

Example of a report as generated by version 1.2.0:

<?xml version="1.0" encoding="utf-8"?>
<ReceptionReport contentURI="https://dash.akamaized.net/envivio/EnvivioDash3/manifest.mpd"
                 xsi:schemaLocation="urn:3gpp:metadata:2011:HSD:receptionreport DASH-QoE-Report.xsd"
                 xmlns:sv="urn:3gpp:metadata:2016:PSS:schemaVersion" xmlns="urn:3gpp:metadata:2011:HSD:receptionreport"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <QoeReport reportPeriod="10" reportTime="2024-02-26T14:47:08.169Z" periodID="period0">
        <QoeMetric>
            <BufferLevel>
                <BufferLevelEntry level="0" t="2024-02-26T14:47:07.530Z"/>
                <BufferLevelEntry level="0" t="2024-02-26T14:47:07.759Z"/>
                <BufferLevelEntry level="0" t="2024-02-26T14:47:07.856Z"/>
                <BufferLevelEntry level="0" t="2024-02-26T14:47:07.908Z"/>
                <BufferLevelEntry level="2040" t="2024-02-26T14:47:08.046Z"/>
                <BufferLevelEntry level="2040" t="2024-02-26T14:47:08.046Z"/>
                <BufferLevelEntry level="2040" t="2024-02-26T14:47:08.087Z"/>
                <BufferLevelEntry level="2040" t="2024-02-26T14:47:08.119Z"/>
            </BufferLevel>
        </QoeMetric>
        <QoeMetric>
            <HttpList>
                <HttpListEntry actualurl="https://dash.akamaized.net/envivio/EnvivioDash3/manifest.mpd" interval="229"
                               range="" responsecode="200" trequest="2024-02-26T14:47:07.530Z"
                               tresponse="2024-02-26T14:47:07.530Z" type="MPD"
                               url="https://dash.akamaized.net/envivio/EnvivioDash3/manifest.mpd">
                    <Trace b="2726" d="229" s="2024-02-26T14:47:07.530Z"/>
                </HttpListEntry>
                <HttpListEntry actualurl="https://dash.akamaized.net/envivio/EnvivioDash3/v7_257-Header.m4s"
                               interval="27" range="" responsecode="200" trequest="2024-02-26T14:47:07.829Z"
                               tresponse="2024-02-26T14:47:07.829Z" type="InitializationSegment"
                               url="https://dash.akamaized.net/envivio/EnvivioDash3/v7_257-Header.m4s">
                    <Trace b="688" d="27" s="2024-02-26T14:47:07.829Z"/>
                </HttpListEntry>
                <HttpListEntry actualurl="https://dash.akamaized.net/envivio/EnvivioDash3/v4_258-Header.m4s"
                               interval="77" range="" responsecode="200" trequest="2024-02-26T14:47:07.831Z"
                               tresponse="2024-02-26T14:47:07.831Z" type="InitializationSegment"
                               url="https://dash.akamaized.net/envivio/EnvivioDash3/v4_258-Header.m4s">
                    <Trace b="615" d="77" s="2024-02-26T14:47:07.831Z"/>
                </HttpListEntry>
                <HttpListEntry actualurl="https://dash.akamaized.net/envivio/EnvivioDash3/v4_258-270146-i-1.m4s"
                               interval="136" range="" responsecode="200" trequest="2024-02-26T14:47:07.910Z"
                               tresponse="2024-02-26T14:47:07.910Z" type="MediaSegment"
                               url="https://dash.akamaized.net/envivio/EnvivioDash3/v4_258-270146-i-1.m4s">
                    <Trace b="33578" d="136" s="2024-02-26T14:47:07.910Z"/>
                </HttpListEntry>
                <HttpListEntry actualurl="https://dash.akamaized.net/envivio/EnvivioDash3/v7_257-270146-i-1.m4s"
                               interval="188" range="" responsecode="200" trequest="2024-02-26T14:47:07.858Z"
                               tresponse="2024-02-26T14:47:07.858Z" type="MediaSegment"
                               url="https://dash.akamaized.net/envivio/EnvivioDash3/v7_257-270146-i-1.m4s">
                    <Trace b="1535564" d="188" s="2024-02-26T14:47:07.858Z"/>
                </HttpListEntry>
                <HttpListEntry actualurl="https://dash.akamaized.net/envivio/EnvivioDash3/v4_258-270146-i-2.m4s"
                               interval="28" range="" responsecode="200" trequest="2024-02-26T14:47:08.058Z"
                               tresponse="2024-02-26T14:47:08.059Z" type="MediaSegment"
                               url="https://dash.akamaized.net/envivio/EnvivioDash3/v4_258-270146-i-2.m4s">
                    <Trace b="32948" d="28" s="2024-02-26T14:47:08.059Z"/>
                </HttpListEntry>
                <HttpListEntry actualurl="https://dash.akamaized.net/envivio/EnvivioDash3/v4_258-270146-i-3.m4s"
                               interval="31" range="" responsecode="200" trequest="2024-02-26T14:47:08.088Z"
                               tresponse="2024-02-26T14:47:08.088Z" type="MediaSegment"
                               url="https://dash.akamaized.net/envivio/EnvivioDash3/v4_258-270146-i-3.m4s">
                    <Trace b="32770" d="31" s="2024-02-26T14:47:08.088Z"/>
                </HttpListEntry>
            </HttpList>
        </QoeMetric>
        <QoeMetric>
            <MPDInformation representationId="v7_257">
                <Mpdinfo bandwidth="5300000" codecs="avc1.4D401E" frameRate="29.970029830932617" height="1080"
                         mimeType="video/mp4" width="1920"/>
            </MPDInformation>
            <MPDInformation representationId="v4_258">
                <Mpdinfo bandwidth="130800" codecs="mp4a.40.2" mimeType="audio/mp4"/>
            </MPDInformation>
        </QoeMetric>
        <QoeMetric>
            <RepSwitchList>
                <RepSwitchEvent mt="P0Y0DT0H0M0S" t="2024-02-26T14:47:07.869Z" to="v7_257"/>
                <RepSwitchEvent mt="P0Y0DT0H0M0S" t="2024-02-26T14:47:07.938Z" to="v4_258"/>
            </RepSwitchList>
        </QoeMetric>
        <sv:delimiter>0</sv:delimiter>
    </QoeReport>
</ReceptionReport>

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

Successfully merging this pull request may close these issues.

1 participant