- 字幕加载逻辑优化

- 云盘原画支持Mx播放器
- 云盘原画支持Kodi播放器
pull/83/head
okjackcaptain 4 years ago
parent 1593fb8949
commit 43bedf50e6
  1. 34
      app/src/main/java/com/github/tvbox/osc/player/controller/VodController.java
  2. 19
      app/src/main/java/com/github/tvbox/osc/player/thirdparty/Kodi.java
  3. 17
      app/src/main/java/com/github/tvbox/osc/player/thirdparty/MXPlayer.java
  4. 18
      app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java
  5. 17
      app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.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<Integer> exsitPlayerTypes = PlayerHelper.getExistPlayerTypes();
int playerTypeIdx = 0;
int playerTypeSize = exsitPlayerTypes.size();
for(int i = 0; i<playerTypeSize; i++) {
if (playerType == exsitPlayerTypes.get(i)) {
if (i == playerTypeSize - 1) {
playerTypeIdx = 0;
} else {
playerTypeIdx = i + 1;
}
}
} while (!playerVail);
}
playerType = exsitPlayerTypes.get(playerTypeIdx);
mPlayerConfig.put("pl", playerType);
updatePlayerCfgView();
listener.updatePlayerCfg();
@ -574,9 +568,11 @@ public class VodController extends BaseController {
@Override
public boolean onLongClick(View view) {
mSubtitleView.setVisibility(View.GONE);
mSubtitleView.destroy();
mSubtitleView.clearSubtitleCache();
mSubtitleView.isInternal = false;
hideBottom();
Toast.makeText(getContext(), "外挂字幕已关闭", Toast.LENGTH_SHORT).show();
Toast.makeText(getContext(), "字幕已关闭", Toast.LENGTH_SHORT).show();
return true;
}
});

@ -10,6 +10,7 @@ import android.util.Log;
import com.github.tvbox.osc.base.App;
import java.net.URLEncoder;
import java.util.HashMap;
public class Kodi {
@ -76,20 +77,20 @@ public class Kodi {
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);
intent.putExtra("name", 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);
intent.putExtra("name", title);
if (subtitle != null && !subtitle.isEmpty()) {
intent.putExtra("subs", subtitle);

@ -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];

@ -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;
}
}
}

@ -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;
}
}
}

Loading…
Cancel
Save