Refactor method CmcdLog.createInstance to accept bufferedDurationUs

Instead of providing `playbackDurationUs` and `loadPositionUs` individually, which are used to calculate the buffer duration for CMCD logging, we can directly pass the pre-calculated `bufferedDurationUs` available in the `getNextChunk` method of the chunk source classes.

Issue: google/ExoPlayer#8699

#minor-release

PiperOrigin-RevId: 540630112
This commit is contained in:
rohks 2023-06-15 18:55:30 +01:00 committed by Marc Baechinger
parent 18bc893210
commit be9b057dda
5 changed files with 8 additions and 17 deletions

View File

@ -42,14 +42,13 @@ public final class CmcdLog {
* *
* @param cmcdConfiguration The {@link CmcdConfiguration} for this chunk source. * @param cmcdConfiguration The {@link CmcdConfiguration} for this chunk source.
* @param trackSelection The {@linkplain ExoTrackSelection track selection}. * @param trackSelection The {@linkplain ExoTrackSelection track selection}.
* @param playbackPositionUs The current playback position in microseconds. * @param bufferedDurationUs The duration of media currently buffered from the current playback
* @param loadPositionUs The current load position in microseconds. * position, in microseconds.
*/ */
public static CmcdLog createInstance( public static CmcdLog createInstance(
CmcdConfiguration cmcdConfiguration, CmcdConfiguration cmcdConfiguration,
ExoTrackSelection trackSelection, ExoTrackSelection trackSelection,
long playbackPositionUs, long bufferedDurationUs) {
long loadPositionUs) {
ImmutableMap<@CmcdConfiguration.HeaderKey String, String> customData = ImmutableMap<@CmcdConfiguration.HeaderKey String, String> customData =
cmcdConfiguration.requestConfig.getCustomData(); cmcdConfiguration.requestConfig.getCustomData();
int bitrateKbps = trackSelection.getSelectedFormat().bitrate / 1000; int bitrateKbps = trackSelection.getSelectedFormat().bitrate / 1000;
@ -65,8 +64,7 @@ public final class CmcdLog {
new CmcdLog.CmcdRequest.Builder() new CmcdLog.CmcdRequest.Builder()
.setCustomData(customData.get(CmcdConfiguration.KEY_CMCD_REQUEST)); .setCustomData(customData.get(CmcdConfiguration.KEY_CMCD_REQUEST));
if (cmcdConfiguration.isBufferLengthLoggingAllowed()) { if (cmcdConfiguration.isBufferLengthLoggingAllowed()) {
cmcdRequest.setBufferLengthMs( cmcdRequest.setBufferLengthMs(bufferedDurationUs / 1000);
loadPositionUs == C.TIME_UNSET ? 0 : (loadPositionUs - playbackPositionUs) / 1000);
} }
CmcdLog.CmcdSession.Builder cmcdSession = CmcdLog.CmcdSession.Builder cmcdSession =

View File

@ -60,10 +60,7 @@ public class CmcdLogTest {
.thenReturn(new Format.Builder().setPeakBitrate(840_000).build()); .thenReturn(new Format.Builder().setPeakBitrate(840_000).build());
CmcdLog cmcdLog = CmcdLog cmcdLog =
CmcdLog.createInstance( CmcdLog.createInstance(
cmcdConfiguration, cmcdConfiguration, trackSelection, /* bufferedDurationUs= */ 1_760_000);
trackSelection,
/* playbackPositionUs= */ 1_000_000,
/* loadPositionUs= */ 2_760_000);
ImmutableMap<@CmcdConfiguration.HeaderKey String, String> requestHeaders = ImmutableMap<@CmcdConfiguration.HeaderKey String, String> requestHeaders =
cmcdLog.getHttpRequestHeaders(); cmcdLog.getHttpRequestHeaders();

View File

@ -374,8 +374,7 @@ public class DefaultDashChunkSource implements DashChunkSource {
CmcdLog cmcdLog = CmcdLog cmcdLog =
cmcdConfiguration == null cmcdConfiguration == null
? null ? null
: CmcdLog.createInstance( : CmcdLog.createInstance(cmcdConfiguration, trackSelection, bufferedDurationUs);
cmcdConfiguration, trackSelection, playbackPositionUs, loadPositionUs);
RepresentationHolder representationHolder = RepresentationHolder representationHolder =
updateSelectedBaseUrl(trackSelection.getSelectedIndex()); updateSelectedBaseUrl(trackSelection.getSelectedIndex());

View File

@ -483,8 +483,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
CmcdLog cmcdLog = CmcdLog cmcdLog =
cmcdConfiguration == null cmcdConfiguration == null
? null ? null
: CmcdLog.createInstance( : CmcdLog.createInstance(cmcdConfiguration, trackSelection, bufferedDurationUs);
cmcdConfiguration, trackSelection, playbackPositionUs, loadPositionUs);
// Check if the media segment or its initialization segment are fully encrypted. // Check if the media segment or its initialization segment are fully encrypted.
@Nullable @Nullable

View File

@ -284,9 +284,7 @@ public class DefaultSsChunkSource implements SsChunkSource {
CmcdLog cmcdLog = CmcdLog cmcdLog =
cmcdConfiguration == null cmcdConfiguration == null
? null ? null
: CmcdLog.createInstance( : CmcdLog.createInstance(cmcdConfiguration, trackSelection, bufferedDurationUs);
cmcdConfiguration, trackSelection, playbackPositionUs, loadPositionUs);
;
out.chunk = out.chunk =
newMediaChunk( newMediaChunk(