Skip to content

Commit

Permalink
v2.4.10 (#118)
Browse files Browse the repository at this point in the history
* Cdn header crash fix (#114)

* Added nullpointer safeguards.

* Added dash support for automated tests.

* Null pointer crash fixed.

* Fixed bandwidth metric tests for dash.

* Added video_init and audio_init manifest subtypes.

* Run code formatter

Co-authored-by: Scott Kidder <scott@mux.com>

* bump version

Co-authored-by: Tomislav Kordic <32546640+tomkordic@users.noreply.github.com>
Co-authored-by: Scott Kidder <scott@mux.com>
  • Loading branch information
3 people authored Jul 1, 2021
1 parent ec95a38 commit 6b55044
Show file tree
Hide file tree
Showing 142 changed files with 228 additions and 56 deletions.
4 changes: 2 additions & 2 deletions MuxExoPlayer/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ android {
defaultConfig {
minSdkVersion project.ext.minSdkVersion
targetSdkVersion project.ext.targetSdkVersion
versionCode 20
versionName "2.4.9"
versionCode 21
versionName "2.4.10"
multiDexEnabled true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -818,7 +818,7 @@ public BandwidthMetricData onLoadCanceled(String segmentUrl) {
}

protected BandwidthMetricData onLoad(long mediaStartTimeMs, long mediaEndTimeMs,
String segmentUrl, int dataType, String host
String segmentUrl, int dataType, String host, String segmentMimeType
) {
BandwidthMetricData segmentData = new BandwidthMetricData();
// TODO RequestStart timestamp is currently not available from ExoPlayer
Expand All @@ -829,29 +829,33 @@ protected BandwidthMetricData onLoad(long mediaStartTimeMs, long mediaEndTimeMs,
segmentData.setRequestUrl(segmentUrl);
switch (dataType) {
case C.DATA_TYPE_MANIFEST:
segmentData.setRequestType("manifest");
case C.DATA_TYPE_MEDIA_INITIALIZATION:
if (segmentMimeType.contains("video")) {
segmentData.setRequestType("video_init");
} else if (segmentMimeType.contains("audio")) {
segmentData.setRequestType("audio_init");
} else {
segmentData.setRequestType("manifest");
}
break;
case C.DATA_TYPE_MEDIA:
segmentData.setRequestType("media");
segmentData.setRequestMediaDuration(mediaEndTimeMs
- mediaStartTimeMs);
break;
default:
return null;
}
segmentData.setRequestResponseHeaders(null);
segmentData.setRequestHostName(host);
if (dataType == C.DATA_TYPE_MEDIA) {
segmentData.setRequestMediaDuration(mediaEndTimeMs
- mediaStartTimeMs);
}
segmentData.setRequestRenditionLists(renditionList);
loadedSegments.put(segmentUrl, segmentData);
return segmentData;
}

public BandwidthMetricData onLoadStarted(long mediaStartTimeMs, long mediaEndTimeMs,
String segmentUrl, int dataType, String host) {
String segmentUrl, int dataType, String host, String segmentMimeType) {
BandwidthMetricData loadData = onLoad(mediaStartTimeMs, mediaEndTimeMs, segmentUrl
, dataType, host);
, dataType, host, segmentMimeType);
if (loadData != null) {
loadData.setRequestResponseStart(System.currentTimeMillis());
}
Expand All @@ -861,6 +865,9 @@ public BandwidthMetricData onLoadStarted(long mediaStartTimeMs, long mediaEndTim
public BandwidthMetricData onLoadCompleted(String segmentUrl, long bytesLoaded,
Format trackFormat) {
BandwidthMetricData segmentData = loadedSegments.get(segmentUrl);
if (segmentData == null) {
return null;
}
segmentData.setRequestBytesLoaded(bytesLoaded);
segmentData.setRequestResponseEnd(System.currentTimeMillis());
if (trackFormat != null && availableTracks != null) {
Expand Down Expand Up @@ -902,7 +909,7 @@ public BandwidthMetricData onLoadCompleted(String segmentUrl,
long bytesLoaded,
Format trackFormat) {
BandwidthMetricData loadData = super.onLoadCompleted(segmentUrl, bytesLoaded, trackFormat);
if (trackFormat != null) {
if (trackFormat != null && loadData != null) {
loadData.setRequestLabeledBitrate(trackFormat.bitrate);
}
return loadData;
Expand Down Expand Up @@ -944,13 +951,13 @@ public void onLoadCanceled(String segmentUrl, Map<String, List<String>> headers)
}

public void onLoadStarted(long mediaStartTimeMs, long mediaEndTimeMs, String segmentUrl,
int dataType, String host) {
int dataType, String host, String segmentMimeType) {
if (player == null || player.get() == null || muxStats == null
|| currentBandwidthMetric() == null) {
return;
}
currentBandwidthMetric().onLoadStarted(mediaStartTimeMs, mediaEndTimeMs, segmentUrl
, dataType, host);
, dataType, host, segmentMimeType);
}

public void onLoadCompleted(
Expand All @@ -962,8 +969,10 @@ public void onLoadCompleted(
}
BandwidthMetricData loadData = currentBandwidthMetric().onLoadCompleted(
segmentUrl, bytesLoaded, trackFormat);
parseHeaders(loadData, responseHeaders);
dispatch(loadData, new RequestCompleted(null));
if (loadData != null) {
parseHeaders(loadData, responseHeaders);
dispatch(loadData, new RequestCompleted(null));
}
}

private void parseHeaders(BandwidthMetricData loadData,
Expand All @@ -974,7 +983,7 @@ private void parseHeaders(BandwidthMetricData loadData,
if (headers != null) {
loadData.setRequestResponseHeaders(headers);
}
}
}
}

public void onTracksChanged(TrackGroupArray trackGroups) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -158,9 +158,14 @@ public void onLoadStarted(EventTime eventTime,
MediaSourceEventListener.LoadEventInfo loadEventInfo,
MediaSourceEventListener.MediaLoadData mediaLoadData) {
if (loadEventInfo.uri != null) {
String segmentMimeType = "unknown";
if (mediaLoadData.trackFormat != null && mediaLoadData.trackFormat.sampleMimeType != null) {
segmentMimeType = mediaLoadData.trackFormat.sampleMimeType;
}
bandwidthDispatcher
.onLoadStarted(mediaLoadData.mediaStartTimeMs, mediaLoadData.mediaEndTimeMs,
loadEventInfo.uri.getPath(), mediaLoadData.dataType, loadEventInfo.uri.getHost());
loadEventInfo.uri.getPath(), mediaLoadData.dataType,
loadEventInfo.uri.getHost(), segmentMimeType);
} else {
MuxLogger.d(TAG,
"ERROR: onLoadStarted called but mediaLoadData argument have no uri parameter.");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,9 +157,14 @@ public void onLoadStarted(EventTime eventTime,
MediaSourceEventListener.LoadEventInfo loadEventInfo,
MediaSourceEventListener.MediaLoadData mediaLoadData) {
if (loadEventInfo.uri != null) {
String segmentMimeType = "unknown";
if (mediaLoadData.trackFormat != null && mediaLoadData.trackFormat.sampleMimeType != null) {
segmentMimeType = mediaLoadData.trackFormat.sampleMimeType;
}
bandwidthDispatcher
.onLoadStarted(mediaLoadData.mediaStartTimeMs, mediaLoadData.mediaEndTimeMs,
loadEventInfo.uri.getPath(), mediaLoadData.dataType, loadEventInfo.uri.getHost());
loadEventInfo.uri.getPath(), mediaLoadData.dataType,
loadEventInfo.uri.getHost(), segmentMimeType);
} else {
MuxLogger.d(TAG,
"ERROR: onLoadStarted called but mediaLoadData argument have no uri parameter.");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -197,9 +197,14 @@ public void onLoadStarted(AnalyticsListener.EventTime eventTime,
LoadEventInfo loadEventInfo,
MediaLoadData mediaLoadData) {
if (loadEventInfo.uri != null) {
String segmentMimeType = "unknown";
if (mediaLoadData.trackFormat != null && mediaLoadData.trackFormat.sampleMimeType != null) {
segmentMimeType = mediaLoadData.trackFormat.sampleMimeType;
}
bandwidthDispatcher
.onLoadStarted(mediaLoadData.mediaStartTimeMs, mediaLoadData.mediaEndTimeMs,
loadEventInfo.uri.getPath(), mediaLoadData.dataType, loadEventInfo.uri.getHost());
loadEventInfo.uri.getPath(), mediaLoadData.dataType,
loadEventInfo.uri.getHost(), segmentMimeType);
} else {
MuxLogger.d(TAG,
"ERROR: onLoadStarted called but mediaLoadData argument have no uri parameter.");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -192,9 +192,14 @@ public void onLoadStarted(AnalyticsListener.EventTime eventTime,
LoadEventInfo loadEventInfo,
MediaLoadData mediaLoadData) {
if (loadEventInfo.uri != null) {
String segmentMimeType = "unknown";
if (mediaLoadData.trackFormat != null && mediaLoadData.trackFormat.sampleMimeType != null) {
segmentMimeType = mediaLoadData.trackFormat.sampleMimeType;
}
bandwidthDispatcher
.onLoadStarted(mediaLoadData.mediaStartTimeMs, mediaLoadData.mediaEndTimeMs,
loadEventInfo.uri.getPath(), mediaLoadData.dataType, loadEventInfo.uri.getHost());
loadEventInfo.uri.getPath(), mediaLoadData.dataType,
loadEventInfo.uri.getHost(), segmentMimeType);
} else {
MuxLogger.d(TAG,
"ERROR: onLoadStarted called but mediaLoadData argument have no uri parameter.");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -156,9 +156,14 @@ public void onLoadStarted(EventTime eventTime,
MediaSourceEventListener.LoadEventInfo loadEventInfo,
MediaSourceEventListener.MediaLoadData mediaLoadData) {
if (loadEventInfo.uri != null) {
String segmentMimeType = "unknown";
if (mediaLoadData.trackFormat != null && mediaLoadData.trackFormat.sampleMimeType != null) {
segmentMimeType = mediaLoadData.trackFormat.sampleMimeType;
}
bandwidthDispatcher
.onLoadStarted(mediaLoadData.mediaStartTimeMs, mediaLoadData.mediaEndTimeMs,
loadEventInfo.uri.getPath(), mediaLoadData.dataType, loadEventInfo.uri.getHost());
loadEventInfo.uri.getPath(), mediaLoadData.dataType,
loadEventInfo.uri.getHost(), segmentMimeType);
} else {
MuxLogger.d(TAG,
"ERROR: onLoadStarted called but mediaLoadData argument have no uri parameter.");
Expand Down
3 changes: 3 additions & 0 deletions RELEASENOTES.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# Release notes

## v2.4.10
- Fix an issue where the application may crash while using DASH playback sources

## v2.4.9
- Added support for CDN header tracking, including mid-stream CDN switching. (#109)
- Fix a null-pointer crash in the ads listener. (#112)
Expand Down
Loading

0 comments on commit 6b55044

Please sign in to comment.