diff --git a/app/src/main/java/com/github/tvbox/osc/player/controller/VodController.java b/app/src/main/java/com/github/tvbox/osc/player/controller/VodController.java index 0f6444f7..136083b9 100644 --- a/app/src/main/java/com/github/tvbox/osc/player/controller/VodController.java +++ b/app/src/main/java/com/github/tvbox/osc/player/controller/VodController.java @@ -20,9 +20,6 @@ import com.github.tvbox.osc.R; import com.github.tvbox.osc.api.ApiConfig; import com.github.tvbox.osc.bean.IJKCode; import com.github.tvbox.osc.bean.ParseBean; -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.subtitle.widget.SimpleSubtitleView; import com.github.tvbox.osc.ui.adapter.ParseAdapter; import com.github.tvbox.osc.ui.adapter.SelectDialogAdapter; @@ -347,22 +344,19 @@ public class VodController extends BaseController { // myHandle.postDelayed(myRunnable, myHandleSeconds); try { int playerType = mPlayerConfig.getInt("pl"); - boolean playerVail = false; - do { - playerType++; - if (playerType <= 2) { - playerVail = true; - } else if (playerType == 10) { - playerVail = MXPlayer.getPackageInfo() != null; - } else if (playerType == 11) { - playerVail = ReexPlayer.getPackageInfo() != null; - } else if (playerType == 12) { - playerVail = Kodi.getPackageInfo() != null; - } else if (playerType > 11) { - playerType = 0; - playerVail = true; + ArrayList exsitPlayerTypes = PlayerHelper.getExistPlayerTypes(); + int playerTypeIdx = 0; + int playerTypeSize = exsitPlayerTypes.size(); + for(int i = 0; i 0) { - String[] hds = new String[headers.size() * 2]; + url = url + "|"; int idx = 0; for (String hk : headers.keySet()) { - hds[idx] = hk; - hds[idx + 1] = headers.get(hk).trim(); - idx += 2; + url += hk + "=" + URLEncoder.encode(headers.get(hk).trim()); + if (idx < headers.keySet().size() -1) { + url += "&"; + } + idx ++; } - intent.putExtra("headers", headers); } + intent.setData(Uri.parse(url)); + intent.putExtra("title", title); + intent.putExtra("name", title); if (subtitle != null && !subtitle.isEmpty()) { intent.putExtra("subs", subtitle); diff --git a/app/src/main/java/com/github/tvbox/osc/player/thirdparty/MXPlayer.java b/app/src/main/java/com/github/tvbox/osc/player/thirdparty/MXPlayer.java index 0132f083..bc0290f3 100644 --- a/app/src/main/java/com/github/tvbox/osc/player/thirdparty/MXPlayer.java +++ b/app/src/main/java/com/github/tvbox/osc/player/thirdparty/MXPlayer.java @@ -11,6 +11,7 @@ import android.util.Log; import com.github.tvbox.osc.base.App; +import java.net.URLEncoder; import java.util.HashMap; public class MXPlayer { @@ -80,19 +81,19 @@ public class MXPlayer { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setPackage(packageInfo.packageName); intent.setClassName(packageInfo.packageName, packageInfo.activityName); - - intent.setData(Uri.parse(url)); - intent.putExtra("title", title); if (headers != null && headers.size() > 0) { - String[] hds = new String[headers.size() * 2]; + url = url + "|"; int idx = 0; for (String hk : headers.keySet()) { - hds[idx] = hk; - hds[idx + 1] = headers.get(hk).trim(); - idx += 2; + url += hk + "=" + URLEncoder.encode(headers.get(hk).trim()); + if (idx < headers.keySet().size() -1) { + url += "&"; + } + idx ++; } - intent.putExtra("headers", headers); } + intent.setData(Uri.parse(url)); + intent.putExtra("title", title); if (subtitle != null && !subtitle.isEmpty()) { Parcelable[] parcels = new Parcelable[1]; diff --git a/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java b/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java index 49d8b142..bf81e0a1 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java @@ -380,8 +380,10 @@ public class PlayActivity extends BaseActivity { mediaPlayer.pause(); long progress = mediaPlayer.getCurrentPosition();//保存当前进度,ijk 切换轨道 会有快进几秒 if (mediaPlayer instanceof IjkMediaPlayer) { - ((IjkMediaPlayer)mediaPlayer).setTrack(value.index); + mController.mSubtitleView.destroy(); + mController.mSubtitleView.clearSubtitleCache(); mController.mSubtitleView.isInternal = true; + ((IjkMediaPlayer)mediaPlayer).setTrack(value.index); new Handler().postDelayed(new Runnable() { @Override public void run() { @@ -493,9 +495,7 @@ public class PlayActivity extends BaseActivity { TrackInfo trackInfo = null; trackInfo = ((IjkMediaPlayer)(mVideoView.getMediaPlayer())).getTrackInfo(); if (trackInfo != null && trackInfo.getSubtitle().size() > 0) { - mController.mSubtitleView.isInternal = true; mController.mSubtitleView.hasInternal = true; - } ((IjkMediaPlayer)(mVideoView.getMediaPlayer())).setOnTimedTextListener(new IMediaPlayer.OnTimedTextListener() { @Override @@ -508,17 +508,17 @@ public class PlayActivity extends BaseActivity { } }); } - mController.mSubtitleView.bindToMediaPlayer(mVideoView.getMediaPlayer()); mController.mSubtitleView.setPlaySubtitleCacheKey(subtitleCacheKey); - if (!mController.mSubtitleView.isInternal) { + String subtitlePathCache = (String)CacheManager.getCache(MD5.string2MD5(subtitleCacheKey)); + if (subtitlePathCache != null && !subtitlePathCache.isEmpty()) { + mController.mSubtitleView.setSubtitlePath(subtitlePathCache); + } else { if (playSubtitle != null && playSubtitle .length() > 0) { - // 设置字幕 mController.mSubtitleView.setSubtitlePath(playSubtitle); } else { - String subtitlePathCache = (String)CacheManager.getCache(MD5.string2MD5(subtitleCacheKey)); - if (subtitlePathCache != null && !subtitlePathCache.isEmpty()) { - mController.mSubtitleView.setSubtitlePath(subtitlePathCache); + if (mController.mSubtitleView.hasInternal) { + mController.mSubtitleView.isInternal = true; } } } diff --git a/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java b/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java index c6e9a332..c0e39ed3 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java @@ -381,8 +381,10 @@ public class PlayFragment extends BaseLazyFragment { mediaPlayer.pause(); long progress = mediaPlayer.getCurrentPosition();//保存当前进度,ijk 切换轨道 会有快进几秒 if (mediaPlayer instanceof IjkMediaPlayer) { - ((IjkMediaPlayer)mediaPlayer).setTrack(value.index); + mController.mSubtitleView.destroy(); + mController.mSubtitleView.clearSubtitleCache(); mController.mSubtitleView.isInternal = true; + ((IjkMediaPlayer)mediaPlayer).setTrack(value.index); new Handler().postDelayed(new Runnable() { @Override public void run() { @@ -492,7 +494,6 @@ public class PlayFragment extends BaseLazyFragment { TrackInfo trackInfo = null; trackInfo = ((IjkMediaPlayer)(mVideoView.getMediaPlayer())).getTrackInfo(); if (trackInfo != null && trackInfo.getSubtitle().size() > 0) { - mController.mSubtitleView.isInternal = true; mController.mSubtitleView.hasInternal = true; } ((IjkMediaPlayer)(mVideoView.getMediaPlayer())).setOnTimedTextListener(new IMediaPlayer.OnTimedTextListener() { @@ -506,17 +507,17 @@ public class PlayFragment extends BaseLazyFragment { } }); } - mController.mSubtitleView.bindToMediaPlayer(mVideoView.getMediaPlayer()); mController.mSubtitleView.setPlaySubtitleCacheKey(subtitleCacheKey); - if (!mController.mSubtitleView.isInternal) { + String subtitlePathCache = (String)CacheManager.getCache(MD5.string2MD5(subtitleCacheKey)); + if (subtitlePathCache != null && !subtitlePathCache.isEmpty()) { + mController.mSubtitleView.setSubtitlePath(subtitlePathCache); + } else { if (playSubtitle != null && playSubtitle .length() > 0) { - // 设置字幕 mController.mSubtitleView.setSubtitlePath(playSubtitle); } else { - String subtitlePathCache = (String)CacheManager.getCache(MD5.string2MD5(subtitleCacheKey)); - if (subtitlePathCache != null && !subtitlePathCache.isEmpty()) { - mController.mSubtitleView.setSubtitlePath(subtitlePathCache); + if (mController.mSubtitleView.hasInternal) { + mController.mSubtitleView.isInternal = true; } } }