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

FEC 10479 - Multicast integration #714

Merged
merged 6 commits into from
May 31, 2021
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions playkit/src/main/java/com/kaltura/playkit/Player.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

import com.kaltura.playkit.player.ABRSettings;
import com.kaltura.playkit.player.LoadControlBuffers;
import com.kaltura.playkit.player.MulticastSettings;
import com.kaltura.playkit.player.PKAspectRatioResizeMode;
import com.kaltura.playkit.player.PKLowLatencyConfig;
import com.kaltura.playkit.player.PKMaxVideoSize;
Expand Down Expand Up @@ -341,6 +342,14 @@ interface Settings {
*/
Settings setMaxAudioChannelCount(int maxAudioChannelCount);

/**
* Sets the multicastSettings for udp streams.
*
* @param multicastSettings - maxPacketSize default = 3000 & socketTimeoutMillis default = 10000
* @return - Player Settings
*/
Settings setMulticastSettings(MulticastSettings multicastSettings);

/**
* If the device codec is known to fail if security level L1 is used
* then set flag to true, it will force the player to use Widevine L3
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@
import com.kaltura.android.exoplayer2.drm.DrmSessionManager;
import com.kaltura.android.exoplayer2.drm.DrmSessionManagerProvider;
import com.kaltura.android.exoplayer2.ext.okhttp.OkHttpDataSource;
import com.kaltura.android.exoplayer2.extractor.ExtractorsFactory;
import com.kaltura.android.exoplayer2.extractor.ts.DefaultTsPayloadReaderFactory;
import com.kaltura.android.exoplayer2.extractor.ts.TsExtractor;
import com.kaltura.android.exoplayer2.mediacodec.MediaCodecRenderer;
import com.kaltura.android.exoplayer2.mediacodec.MediaCodecUtil;
import com.kaltura.android.exoplayer2.metadata.Metadata;
Expand Down Expand Up @@ -71,6 +74,8 @@
import com.kaltura.android.exoplayer2.upstream.HttpDataSource;
import com.kaltura.android.exoplayer2.upstream.TeeDataSource;
import com.kaltura.android.exoplayer2.upstream.TransferListener;
import com.kaltura.android.exoplayer2.upstream.UdpDataSource;
import com.kaltura.android.exoplayer2.util.TimestampAdjuster;
import com.kaltura.android.exoplayer2.video.CustomLoadControl;

import com.kaltura.playkit.*;
Expand Down Expand Up @@ -501,6 +506,22 @@ public void onTransferEnd(@NonNull DataSource dataSource, @NonNull DataSpec data
.createMediaSource(mediaItem);
break;

case udp:
MulticastSettings multicastSettings = (playerSettings != null) ? playerSettings.getMulticastSettings() : new MulticastSettings();
if (multicastSettings.getUseExoDefaultSettings()) {
mediaSource = new ProgressiveMediaSource.Factory(dataSourceFactory)
.createMediaSource(mediaItem);
} else {
DataSource.Factory udpDatasourceFactory = () -> new UdpDataSource(multicastSettings.getMaxPacketSize(), multicastSettings.getSocketTimeoutMillis());
ExtractorsFactory tsExtractorFactory = () -> new TsExtractor[]{
new TsExtractor(multicastSettings.getExtractorMode().mode,
new TimestampAdjuster(0), new DefaultTsPayloadReaderFactory())
};
mediaSource = new ProgressiveMediaSource.Factory(udpDatasourceFactory, tsExtractorFactory)
.createMediaSource(mediaItem);
}
break;

default:
throw new IllegalArgumentException("Unknown media format: " + format + " for url: " + requestParams.url);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package com.kaltura.playkit.player;

public class MulticastSettings {

private boolean useExoDefaultSettings = true;
// maxPacketSize The maximum datagram packet size, in bytes.
private int maxPacketSize = 3000;
// socketTimeoutMillis The socket timeout in milliseconds. A timeout of zero is interpreted
private int socketTimeoutMillis = 10000;

private ExtractorMode extractorMode = ExtractorMode.MODE_MULTI_PMT;

enum ExtractorMode {
MODE_MULTI_PMT(0),
MODE_SINGLE_PMT(1),
MODE_HLS(2);

public final int mode;
ExtractorMode(int mode) {
this.mode = mode;
}
}

public MulticastSettings() {}

public boolean getUseExoDefaultSettings() {
return useExoDefaultSettings;
}

public int getMaxPacketSize() {
return maxPacketSize;
}

public MulticastSettings setMaxPacketSize(int maxPacketSize) {
this.maxPacketSize = maxPacketSize;
this.useExoDefaultSettings = false;
return this;
}

public int getSocketTimeoutMillis() {
return socketTimeoutMillis;
}

public MulticastSettings setSocketTimeoutMillis(int socketTimeoutMillis) {
this.socketTimeoutMillis = socketTimeoutMillis;
this.useExoDefaultSettings = false;
return this;
}

public ExtractorMode getExtractorMode() {
return extractorMode;
}

public MulticastSettings setExtractorMode(ExtractorMode extractorMode) {
if (extractorMode != null) {
this.extractorMode = extractorMode;
}
this.useExoDefaultSettings = false;
return this;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ public class PlayerSettings implements Player.Settings {
private Integer maxAudioBitrate;
private int maxAudioChannelCount = -1;

private MulticastSettings multicastSettings = new MulticastSettings();
private LoadControlBuffers loadControlBuffers = new LoadControlBuffers();
private SubtitleStyleSettings subtitleStyleSettings;
private PKAspectRatioResizeMode resizeMode = PKAspectRatioResizeMode.fit;
Expand Down Expand Up @@ -123,6 +124,10 @@ public PKTrackConfig getPreferredAudioTrackConfig() {
return preferredAudioTrackConfig;
}

public MulticastSettings getMulticastSettings() {
return multicastSettings;
}

public PKMediaFormat getPreferredMediaFormat() {
return preferredMediaFormat;
}
Expand Down Expand Up @@ -423,12 +428,21 @@ public Player.Settings setMaxAudioBitrate(Integer maxAudioBitrate) {
return this;
}


@Override
public Player.Settings setMaxAudioChannelCount(int maxAudioChannelCount) {
this.maxAudioChannelCount = maxAudioChannelCount;
return this;
}

@Override
public Player.Settings setMulticastSettings(MulticastSettings multicastSettings) {
if (multicastSettings != null) {
this.multicastSettings = multicastSettings;
}
return this;
}

@Override
public Player.Settings forceWidevineL3Playback(boolean forceWidevineL3Playback) {
this.forceWidevineL3Playback = forceWidevineL3Playback;
Expand Down