修正从后台返回继续播放时黑屏的bug;

fix live bug;
pull/144/head
21561 1 year ago
parent 4752096360
commit 9fa2b407d0
  1. 1
      app/src/main/java/com/github/tvbox/osc/player/IjkMediaPlayer.java
  2. 42
      app/src/main/java/com/github/tvbox/osc/ui/activity/LivePlayActivity.java
  3. 2
      gradle.properties
  4. 67
      player/src/main/java/xyz/doikki/videoplayer/player/VideoView.java

@ -77,7 +77,6 @@ public class IjkMediaPlayer extends IjkPlayer {
mMediaPlayer.setOption(tv.danmaku.ijk.media.player.IjkMediaPlayer.OPT_CATEGORY_CODEC, "threads", "2");
}
// mMediaPlayer.setOption(tv.danmaku.ijk.media.player.IjkMediaPlayer.OPT_CATEGORY_PLAYER, "sync-av-start", 1);//强制音画同步
mMediaPlayer.setOption(tv.danmaku.ijk.media.player.IjkMediaPlayer.OPT_CATEGORY_FORMAT, "reconnect", 1);
}
private static final String ITV_TARGET_DOMAIN = "gslbserv.itv.cmvideo.cn";

@ -663,11 +663,14 @@ public class LivePlayActivity extends BaseActivity {
mHandler.postDelayed(mPlaySelectedChannel, 2500);
}
private final Handler mmHandler = new Handler();
private Runnable mLongPressRunnable;
private static final long LONG_PRESS_DELAY = 800;
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
int keyCode = event.getKeyCode();
if (event.getAction() == KeyEvent.ACTION_DOWN) {
int keyCode = event.getKeyCode();
if (keyCode == KeyEvent.KEYCODE_MENU) {
if (keyCode == KeyEvent.KEYCODE_MENU || keyCode == KeyEvent.KEYCODE_INFO || keyCode == KeyEvent.KEYCODE_HELP) {
showSettingGroup();
} else if (!isListOrSettingLayoutVisible()) {
switch (keyCode) {
@ -700,7 +703,6 @@ public class LivePlayActivity extends BaseActivity {
case KeyEvent.KEYCODE_DPAD_CENTER:
case KeyEvent.KEYCODE_ENTER:
case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
showChannelList();
break;
default:
if (keyCode >= KeyEvent.KEYCODE_0 && keyCode <= KeyEvent.KEYCODE_9) {
@ -714,10 +716,40 @@ public class LivePlayActivity extends BaseActivity {
}
}
} else if (event.getAction() == KeyEvent.ACTION_UP) {
if (!isListOrSettingLayoutVisible()) {
if ((keyCode == KeyEvent.KEYCODE_DPAD_CENTER || keyCode == KeyEvent.KEYCODE_ENTER || keyCode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE) && event.getRepeatCount() == 0) {
showChannelList();
}
}
}
return super.dispatchKeyEvent(event);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_DPAD_CENTER || keyCode == KeyEvent.KEYCODE_ENTER || keyCode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE) && event.getRepeatCount() == 0) {
mLongPressRunnable = new Runnable() {
@Override
public void run() {
showSettingGroup(); //实现长按调出菜单
}
};
mmHandler.postDelayed(mLongPressRunnable, LONG_PRESS_DELAY);
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER || keyCode == KeyEvent.KEYCODE_ENTER || keyCode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE) {
if (mLongPressRunnable != null) {
mmHandler.removeCallbacks(mLongPressRunnable);
mLongPressRunnable = null;
}
}
return super.onKeyUp(keyCode, event);
}
@Override
protected void onResume() {
super.onResume();
@ -938,6 +970,8 @@ public class LivePlayActivity extends BaseActivity {
mVideoView.setUrl(currentLiveChannelItem.getUrl(),liveWebHeader());
mVideoView.start();
}
// liveChannelItemAdapter.setFocusedChannelIndex(currentLiveChannelIndex);
liveChannelItemAdapter.setSelectedChannelIndex(currentLiveChannelIndex);
return true;
}
@ -1564,11 +1598,11 @@ public class LivePlayActivity extends BaseActivity {
private void clickLiveChannel(int position) {
liveChannelItemAdapter.setSelectedChannelIndex(position);
playChannel(liveChannelGroupAdapter.getSelectedGroupIndex(), position, false);
if (tvLeftChannelListLayout.getVisibility() == View.VISIBLE) {
mHandler.removeCallbacks(mHideChannelListRun);
mHandler.postDelayed(mHideChannelListRun, postTimeout);
}
playChannel(liveChannelGroupAdapter.getSelectedGroupIndex(), position, false);
}
private void initSettingGroupView() {

@ -18,4 +18,4 @@ android.useAndroidX=true
# Automatically convert third-party libraries to use AndroidX
android.enableJetifier=true
IsDebug=true
#org.gradle.jvmargs=-Xmx2048m --add-opens java.base/java.io=ALL-UNNAMED
org.gradle.jvmargs=-Xmx2048m --add-opens java.base/java.io=ALL-UNNAMED

@ -13,6 +13,9 @@ import android.os.Parcelable;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.TextureView;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
@ -346,14 +349,64 @@ public class VideoView<P extends AbstractPlayer> extends FrameLayout
* 继续播放
*/
public void resume() {
if (isInPlaybackState()
&& !mMediaPlayer.isPlaying()) {
mMediaPlayer.start();
setPlayState(STATE_PLAYING);
if (mAudioFocusHelper != null && !isMute()) {
mAudioFocusHelper.requestFocus();
if (isInPlaybackState() && !mMediaPlayer.isPlaying()) {
addDisplay();
if (mRenderView != null) {
mRenderView.setScaleType(mCurrentScreenScaleType);
mRenderView.setVideoSize(mVideoSize[0], mVideoSize[1]);
}
assert mRenderView != null;
View renderView = mRenderView.getView();
if (renderView instanceof SurfaceView) {
final SurfaceView surfaceView = (SurfaceView) renderView;
final SurfaceHolder holder = surfaceView.getHolder();
if (holder.getSurface() != null && holder.getSurface().isValid()) {
mMediaPlayer.setDisplay(holder);
mMediaPlayer.start();
setPlayState(STATE_PLAYING);
if (mAudioFocusHelper != null && !isMute()) {
mAudioFocusHelper.requestFocus();
}
mPlayerContainer.setKeepScreenOn(true);
} else {
holder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
mMediaPlayer.setDisplay(holder);
mMediaPlayer.start();
setPlayState(STATE_PLAYING);
if (mAudioFocusHelper != null && !isMute()) {
mAudioFocusHelper.requestFocus();
}
mPlayerContainer.setKeepScreenOn(true);
// 记得移除回调,避免重复调用
holder.removeCallback(this);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
});
}
} else if (renderView instanceof TextureView) {
mMediaPlayer.start();
setPlayState(STATE_PLAYING);
if (mAudioFocusHelper != null && !isMute()) {
mAudioFocusHelper.requestFocus();
}
mPlayerContainer.setKeepScreenOn(true);
} else {
mMediaPlayer.start();
setPlayState(STATE_PLAYING);
if (mAudioFocusHelper != null && !isMute()) {
mAudioFocusHelper.requestFocus();
}
mPlayerContainer.setKeepScreenOn(true);
}
mPlayerContainer.setKeepScreenOn(true);
}
}

Loading…
Cancel
Save