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

Refactor player profiles #899

Merged
merged 11 commits into from May 21, 2021
Expand Up @@ -18,9 +18,9 @@
import org.jellyfin.androidtv.data.service.BackgroundService;
import org.jellyfin.androidtv.preference.UserPreferences;
import org.jellyfin.androidtv.preference.constant.PreferredVideoPlayer;
import org.jellyfin.androidtv.util.ProfileHelper;
import org.jellyfin.androidtv.util.Utils;
import org.jellyfin.androidtv.util.apiclient.ReportingHelper;
import org.jellyfin.androidtv.util.profile.ExternalPlayerProfile;
import org.jellyfin.apiclient.interaction.ApiClient;
import org.jellyfin.apiclient.interaction.Response;
import org.jellyfin.apiclient.model.dto.BaseItemDto;
Expand Down Expand Up @@ -231,7 +231,7 @@ protected void launchExternalPlayer(int ndx) {
options.setItemId(item.getId());
options.setMediaSources(item.getMediaSources());
options.setMaxBitrate(Utils.getMaxBitrate());
options.setProfile(ProfileHelper.getExternalProfile());
options.setProfile(new ExternalPlayerProfile());

// Get playback info for each player and then decide on which one to use
get(PlaybackManager.class).getVideoStreamInfo(apiClient.getValue().getServerInfo().getId(), options, item.getResumePositionTicks(), false, apiClient.getValue(), new Response<StreamInfo>() {
Expand Down
Expand Up @@ -35,10 +35,11 @@
import org.jellyfin.androidtv.ui.shared.BaseActivity;
import org.jellyfin.androidtv.util.AutoBitrate;
import org.jellyfin.androidtv.util.DeviceUtils;
import org.jellyfin.androidtv.util.ProfileHelper;
import org.jellyfin.androidtv.util.RemoteControlReceiver;
import org.jellyfin.androidtv.util.Utils;
import org.jellyfin.androidtv.util.apiclient.ReportingHelper;
import org.jellyfin.androidtv.util.profile.ExoPlayerProfile;
import org.jellyfin.androidtv.util.profile.LibVlcProfile;
import org.jellyfin.apiclient.interaction.ApiClient;
import org.jellyfin.apiclient.interaction.Response;
import org.jellyfin.apiclient.model.dlna.DeviceProfile;
Expand Down Expand Up @@ -565,11 +566,11 @@ private void playInternal(final BaseItemDto item, final int pos) {
Long maxBitrate = get(AutoBitrate.class).getBitrate();
if (maxBitrate != null) options.setMaxBitrate(maxBitrate.intValue());
options.setMediaSources(item.getMediaSources());
DeviceProfile profile = ProfileHelper.getBaseProfile(false);
DeviceProfile profile;
if (DeviceUtils.is60()) {
ProfileHelper.setExoOptions(profile, false, true);
profile = new ExoPlayerProfile();
} else {
ProfileHelper.setVlcOptions(profile, false);
profile = new LibVlcProfile();
}
options.setProfile(profile);
get(PlaybackManager.class).getAudioStreamInfo(apiClient.getServerInfo().getId(), options, item.getResumePositionTicks(), false, apiClient, new Response<StreamInfo>() {
Expand Down
Expand Up @@ -21,12 +21,15 @@
import org.jellyfin.androidtv.ui.ImageButton;
import org.jellyfin.androidtv.ui.livetv.TvManager;
import org.jellyfin.androidtv.util.DeviceUtils;
import org.jellyfin.androidtv.util.ProfileHelper;
import org.jellyfin.androidtv.util.TimeUtils;
import org.jellyfin.androidtv.util.Utils;
import org.jellyfin.androidtv.util.apiclient.PlaybackHelper;
import org.jellyfin.androidtv.util.apiclient.ReportingHelper;
import org.jellyfin.androidtv.util.apiclient.StreamHelper;
import org.jellyfin.androidtv.util.profile.BaseProfile;
import org.jellyfin.androidtv.util.profile.ExoPlayerProfile;
import org.jellyfin.androidtv.util.profile.LibVlcProfile;
import org.jellyfin.androidtv.util.profile.ProfileHelper;
import org.jellyfin.apiclient.interaction.ApiClient;
import org.jellyfin.apiclient.interaction.Response;
import org.jellyfin.apiclient.model.dlna.DeviceProfile;
Expand Down Expand Up @@ -376,8 +379,7 @@ public void onClick(DialogInterface dialog, int which) {
}
vlcOptions.setSubtitleStreamIndex(transcodedSubtitle >= 0 ? transcodedSubtitle : null);
vlcOptions.setMediaSourceId(transcodedSubtitle >= 0 ? getCurrentMediaSource().getId() : null);
DeviceProfile vlcProfile = ProfileHelper.getBaseProfile(isLiveTv);
ProfileHelper.setVlcOptions(vlcProfile, isLiveTv);
DeviceProfile vlcProfile = new LibVlcProfile(isLiveTv);
vlcOptions.setProfile(vlcProfile);

VideoOptions internalOptions = new VideoOptions();
Expand All @@ -389,9 +391,13 @@ public void onClick(DialogInterface dialog, int which) {
internalOptions.setMaxAudioChannels(Utils.downMixAudio() ? 2 : null); //have to downmix at server
internalOptions.setSubtitleStreamIndex(transcodedSubtitle >= 0 ? transcodedSubtitle : null);
internalOptions.setMediaSourceId(transcodedSubtitle >= 0 ? getCurrentMediaSource().getId() : null);
DeviceProfile internalProfile = ProfileHelper.getBaseProfile(isLiveTv);
DeviceProfile internalProfile = new BaseProfile();
if (DeviceUtils.is60() || userPreferences.getValue().get(UserPreferences.Companion.getAc3Enabled())) {
ProfileHelper.setExoOptions(internalProfile, isLiveTv, true);
internalProfile = new ExoPlayerProfile(
isLiveTv,
userPreferences.getValue().get(UserPreferences.Companion.getLiveTvDirectPlayEnabled()),
true
);
ProfileHelper.addAc3Streaming(internalProfile, true);
Timber.i("*** Using extended Exoplayer profile options");

Expand Down Expand Up @@ -525,8 +531,11 @@ public void onResponse(StreamInfo internalResponse) {
// requested specific audio stream that is different from default so we need to force a transcode to get it (ExoMedia currently cannot switch)
// remove direct play profiles to force the transcode
final DeviceProfile save = internalOptions.getProfile();
DeviceProfile newProfile = ProfileHelper.getBaseProfile(isLiveTv);
ProfileHelper.setExoOptions(newProfile, isLiveTv, true);
DeviceProfile newProfile = new ExoPlayerProfile(
isLiveTv,
userPreferences.getValue().get(UserPreferences.Companion.getLiveTvDirectPlayEnabled()),
true
);
if (!Utils.downMixAudio()) ProfileHelper.addAc3Streaming(newProfile, true);
newProfile.setDirectPlayProfiles(new DirectPlayProfile[]{});
internalOptions.setProfile(newProfile);
Expand Down