支持VLC播放器

pull/85/head
Harold 3 years ago
parent 505aa3b832
commit 6525b1820b
  1. 22
      app/src/main/java/com/github/tvbox/osc/bean/MovieSort.java
  2. 76
      app/src/main/java/com/github/tvbox/osc/player/thirdparty/VlcPlayer.java
  3. 35
      app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java
  4. 35
      app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java
  5. 11
      app/src/main/java/com/github/tvbox/osc/util/PlayerHelper.java

@ -59,12 +59,34 @@ public class MovieSort implements Serializable {
public int compareTo(SortData o) {
return this.sort - o.sort;
}
@Override
public String toString() {
return "SortData{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", sort=" + sort +
", select=" + select +
", filters=" + filters +
", filterSelect=" + filterSelect +
", flag='" + flag + '\'' +
'}';
}
}
public static class SortFilter {
public String key;
public String name;
public LinkedHashMap<String, String> values;
@Override
public String toString() {
return "SortFilter{" +
"key='" + key + '\'' +
", name='" + name + '\'' +
", values=" + values +
'}';
}
}
}

@ -0,0 +1,76 @@
package com.github.tvbox.osc.player.thirdparty;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.util.Log;
import com.github.tvbox.osc.base.App;
public class VlcPlayer {
public static final String TAG = "ThirdParty.VLC";
private static final String PACKAGE_NAME = "org.videolan.vlc";
private static final String PLAYBACK_ACTIVITY = "org.videolan.vlc.gui.video.VideoPlayerActivity";
private static class VlcPackageInfo {
final String packageName;
final String activityName;
VlcPackageInfo(String packageName, String activityName) {
this.packageName = packageName;
this.activityName = activityName;
}
}
private static final VlcPackageInfo[] PACKAGES = {
new VlcPackageInfo(PACKAGE_NAME, PLAYBACK_ACTIVITY),
};
public static VlcPackageInfo getPackageInfo() {
for (VlcPackageInfo pkg : PACKAGES) {
try {
ApplicationInfo info = App.getInstance().getPackageManager().getApplicationInfo(pkg.packageName, 0);
if (info.enabled)
return pkg;
else
Log.v(TAG, "VLC Player package `" + pkg.packageName + "` is disabled.");
} catch (PackageManager.NameNotFoundException ex) {
Log.v(TAG, "VLC Player package `" + pkg.packageName + "` does not exist.");
}
}
return null;
}
public static boolean run(Activity activity, String url, String title, String subtitle, long progress) {
VlcPackageInfo packageInfo = getPackageInfo();
if (packageInfo == null)
return false;
// https://wiki.videolan.org/Android_Player_Intents/
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setPackage(packageInfo.packageName);
intent.setDataAndTypeAndNormalize(Uri.parse(url), "video/*");
intent.putExtra("title", title);
if (subtitle != null && !subtitle.isEmpty()) {
intent.putExtra("subtitles_location", subtitle);
}
if (progress > 0) {
intent.putExtra("from_start", false);
intent.putExtra("position", progress);
}
try {
activity.startActivity(intent);
return true;
} catch (ActivityNotFoundException ex) {
Log.e(TAG, "Can't run VLC Player(Pro)", ex);
return false;
}
}
}

@ -130,6 +130,23 @@ public class PlayActivity extends BaseActivity {
initData();
}
public long getSavedProgress(String url) {
int st = 0;
try {
st = mVodPlayerCfg.getInt("st");
} catch (JSONException e) {
e.printStackTrace();
}
long skip = st * 1000;
if (CacheManager.getCache(MD5.string2MD5(url)) == null) {
return skip;
}
long rec = (long) CacheManager.getCache(MD5.string2MD5(url));
if (rec < skip)
return skip;
return rec;
}
private void initView() {
mHandler = new Handler(new Handler.Callback() {
@Override
@ -160,20 +177,7 @@ public class PlayActivity extends BaseActivity {
@Override
public long getSavedProgress(String url) {
int st = 0;
try {
st = mVodPlayerCfg.getInt("st");
} catch (JSONException e) {
e.printStackTrace();
}
long skip = st * 1000;
if (CacheManager.getCache(MD5.string2MD5(url)) == null) {
return skip;
}
long rec = (long) CacheManager.getCache(MD5.string2MD5(url));
if (rec < skip)
return skip;
return rec;
return PlayActivity.this.getSavedProgress(url);
}
};
mVideoView.setProgressManager(progressManager);
@ -510,7 +514,8 @@ public class PlayActivity extends BaseActivity {
String playTitle = mVodInfo.name + " " + vs.name;
setTip("调用外部播放器" + PlayerHelper.getPlayerName(playerType) + "进行播放", true, false);
boolean callResult = false;
callResult = PlayerHelper.runExternalPlayer(playerType, PlayActivity.this, finalUrl, playTitle, playSubtitle, headers);
long progress = getSavedProgress(progressKey);
callResult = PlayerHelper.runExternalPlayer(playerType, PlayActivity.this, finalUrl, playTitle, playSubtitle, headers, progress);
setTip("调用外部播放器" + PlayerHelper.getPlayerName(playerType) + (callResult ? "成功" : "失败"), callResult, !callResult);
return;
}

@ -139,6 +139,23 @@ public class PlayFragment extends BaseLazyFragment {
initData();
}
public long getSavedProgress(String url) {
int st = 0;
try {
st = mVodPlayerCfg.getInt("st");
} catch (JSONException e) {
e.printStackTrace();
}
long skip = st * 1000;
if (CacheManager.getCache(MD5.string2MD5(url)) == null) {
return skip;
}
long rec = (long) CacheManager.getCache(MD5.string2MD5(url));
if (rec < skip)
return skip;
return rec;
}
private void initView() {
EventBus.getDefault().register(this);
mHandler = new Handler(new Handler.Callback() {
@ -170,20 +187,7 @@ public class PlayFragment extends BaseLazyFragment {
@Override
public long getSavedProgress(String url) {
int st = 0;
try {
st = mVodPlayerCfg.getInt("st");
} catch (JSONException e) {
e.printStackTrace();
}
long skip = st * 1000;
if (CacheManager.getCache(MD5.string2MD5(url)) == null) {
return skip;
}
long rec = (long) CacheManager.getCache(MD5.string2MD5(url));
if (rec < skip)
return skip;
return rec;
return PlayFragment.this.getSavedProgress(url);
}
};
mVideoView.setProgressManager(progressManager);
@ -519,7 +523,8 @@ public class PlayFragment extends BaseLazyFragment {
String playTitle = mVodInfo.name + " " + vs.name;
setTip("调用外部播放器" + PlayerHelper.getPlayerName(playerType) + "进行播放", true, false);
boolean callResult = false;
callResult = PlayerHelper.runExternalPlayer(playerType, requireActivity(), finalUrl, playTitle, playSubtitle, headers);
long progress = getSavedProgress(progressKey);
callResult = PlayerHelper.runExternalPlayer(playerType, requireActivity(), finalUrl, playTitle, playSubtitle, headers, progress);
setTip("调用外部播放器" + PlayerHelper.getPlayerName(playerType) + (callResult ? "成功" : "失败"), callResult, !callResult);
return;
}

@ -11,6 +11,7 @@ import com.github.tvbox.osc.player.thirdparty.Kodi;
import com.github.tvbox.osc.player.thirdparty.MXPlayer;
import com.github.tvbox.osc.player.thirdparty.ReexPlayer;
import com.github.tvbox.osc.player.thirdparty.RemoteTVBox;
import com.github.tvbox.osc.player.thirdparty.VlcPlayer;
import com.orhanobut.hawk.Hawk;
import org.json.JSONException;
@ -167,6 +168,7 @@ public class PlayerHelper {
playersInfo.put(11, "Reex播放器");
playersInfo.put(12, "Kodi播放器");
playersInfo.put(13, "附近TVBox");
playersInfo.put(14, "VLC播放器");
mPlayersInfo = playersInfo;
}
return mPlayersInfo;
@ -183,6 +185,7 @@ public class PlayerHelper {
playersExist.put(11, ReexPlayer.getPackageInfo() != null);
playersExist.put(12, Kodi.getPackageInfo() != null);
playersExist.put(13, RemoteTVBox.getAvalible() != null);
playersExist.put(14, VlcPlayer.getPackageInfo() != null);
mPlayersExistInfo = playersExist;
}
return mPlayersExistInfo;
@ -209,6 +212,10 @@ public class PlayerHelper {
}
public static Boolean runExternalPlayer(int playerType, Activity activity, String url, String title, String subtitle, HashMap<String, String> headers) {
return runExternalPlayer(playerType, activity, url, title, subtitle, headers);
}
public static Boolean runExternalPlayer(int playerType, Activity activity, String url, String title, String subtitle, HashMap<String, String> headers, long progress) {
boolean callResult = false;
switch (playerType) {
case 10: {
@ -227,6 +234,10 @@ public class PlayerHelper {
callResult = RemoteTVBox.run(activity, url, title, subtitle, headers);
break;
}
case 14: {
callResult = VlcPlayer.run(activity, url, title, subtitle, progress);
break;
}
}
return callResult;
}

Loading…
Cancel
Save