Merge pull request #56 from llb0/main

根据视频宽高比旋转横竖屏(抖音/火山)
pull/55/head
q215613905 4 years ago committed by GitHub
commit f37237602c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 5
      app/src/main/java/com/github/tvbox/osc/util/DefaultConfig.java
  2. 45
      player/src/main/java/xyz/doikki/videoplayer/controller/BaseVideoController.java
  3. 12
      player/src/main/java/xyz/doikki/videoplayer/controller/ControlWrapper.java
  4. 17
      player/src/main/java/xyz/doikki/videoplayer/player/VideoView.java
  5. 2
      player/src/main/java/xyz/doikki/videoplayer/player/VideoViewConfig.java

@ -105,10 +105,7 @@ public class DefaultConfig {
return start > -1 ? fileName.substring(0, start) : fileName;
}
//增加对flv|avi|mkv|rm|wmv|mpg等几种视频格式的支持
//private static final Pattern snifferMatch = Pattern.compile("http((?!http).){26,}?\\.(m3u8|mp4)\\?.*|http((?!http).){26,}\\.(m3u8|mp4)|http((?!http).){26,}?/m3u8\\?pt=m3u8.*|http((?!http).)*?default\\.ixigua\\.com/.*|http((?!http).)*?cdn-tos[^\\?]*|http((?!http).)*?/obj/tos[^\\?]*|http.*?/player/m3u8play\\.php\\?url=.*|http.*?/player/.*?[pP]lay\\.php\\?url=.*|http.*?/playlist/m3u8/\\?vid=.*|http.*?\\.php\\?type=m3u8&.*|http.*?/download.aspx\\?.*|http.*?/api/up_api.php\\?.*|https.*?\\.66yk\\.cn.*|http((?!http).)*?netease\\.com/file/.*");
// private static final Pattern snifferMatch = Pattern.compile("http((?!http).)*?default\\.365yg\\.com/.*|http((?!http).){26,}?\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg)\\?.*|http((?!http).){26,}\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg)|http((?!http).){26,}?/m3u8\\?pt=m3u8.*|http((?!http).)*?default\\.ixigua\\.com/.*|http((?!http).)*?cdn-tos[^\\?]*|http((?!http).)*?/obj/tos[^\\?]*|http.*?/player/m3u8play\\.php\\?url=.*|http.*?/player/.*?[pP]lay\\.php\\?url=.*|http.*?/playlist/m3u8/\\?vid=.*|http.*?\\.php\\?type=m3u8&.*|http.*?/download.aspx\\?.*|http.*?/api/up_api.php\\?.*|https.*?\\.66yk\\.cn.*|http((?!http).)*?netease\\.com/file/.*");
private static final Pattern snifferMatch = Pattern.compile("http((?!http).)*?default\\.365yg\\.com/.*|http((?!http).){26,}?\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg)\\?.*|http((?!http).){26,}\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg)|http((?!http).){26,}?/m3u8\\?pt=m3u8.*|http((?!http).)*?default\\.ixigua\\.com/.*|http((?!http).)*?/video/tos[^\\?]*|http((?!http).)*?dycdn-tos\\.pstatp[^\\?]*|http.*?/player/m3u8play\\.php\\?url=.*|http.*?/player/.*?[pP]lay\\.php\\?url=.*|http.*?/playlist/m3u8/\\?vid=.*|http.*?\\.php\\?type=m3u8&.*|http.*?/download.aspx\\?.*|http.*?/api/up_api.php\\?.*|https.*?\\.66yk\\.cn.*|http((?!http).)*?netease\\.com/file/.*");
private static final Pattern snifferMatch = Pattern.compile("http((?!http).)*?default\\.365yg\\.com/.*|http((?!http).){26,}?\\.(m3u8|mp4|flv|avi|mkv|rm|rmvb|wmv|mpg|mpeg|mpe|mp3|m4a|wma)\\?.*|http((?!http).){26,}\\.(m3u8|mp4|flv|avi|mkv|rm|rmvb|wmv|mpg|mpeg|mpe|mp3|m4a|wma)|http((?!http).){26,}?/m3u8\\?pt=m3u8.*|http((?!http).)*?default\\.ixigua\\.com/.*|http((?!http).)*?/video/tos[^\\?]*|http((?!http).)*?dycdn-tos\\.pstatp[^\\?]*|http.*?/player/m3u8play\\.php\\?url=.*|http.*?/player/.*?[pP]lay\\.php\\?url=.*|http.*?/playlist/m3u8/\\?vid=.*|http.*?\\.php\\?type=m3u8&.*|http.*?/download.aspx\\?.*|http.*?/api/up_api.php\\?.*|https.*?\\.66yk\\.cn.*|http((?!http).)*?netease\\.com/file/.*|http((?!http).)*?douyin\\.com/.*/play/\\?.*|http((?!http).)*?huoshan\\.com/.*/\\?item.*");
public static boolean isVideoFormat(String url) {
if (url.contains("=http") || url.contains(".html")) {
return false;

@ -396,7 +396,7 @@ public abstract class BaseVideoController extends FrameLayout
* 横竖屏切换
*/
protected void toggleFullScreen() {
mControlWrapper.toggleFullScreen(mActivity);
mControlWrapper.toggleFullScreenByVideoSize(mActivity);
}
/**
@ -508,32 +508,47 @@ public abstract class BaseVideoController extends FrameLayout
if (mIsLocked) return;
//没有开启设备方向监听的情况
if (!mEnableOrientation) return;
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
mControlWrapper.stopFullScreen();
int[] size = mControlWrapper.getVideoSize();
int width = size[0];
int height = size[1];
int o = activity.getRequestedOrientation();
if (width < height && o != ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
mControlWrapper.replay(true);
}
}
/**
* 横屏
*/
protected void onOrientationLandscape(Activity activity) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
if (mControlWrapper.isFullScreen()) {
handlePlayerStateChanged(VideoView.PLAYER_FULL_SCREEN);
} else {
mControlWrapper.startFullScreen();
}
int[] size = mControlWrapper.getVideoSize();
int width = size[0];
int height = size[1];
if (width > height) {
if (mControlWrapper.isFullScreen()) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
handlePlayerStateChanged(VideoView.PLAYER_FULL_SCREEN);
} else {
mControlWrapper.startFullScreen();
}
}
}
/**
* 反向横屏
*/
protected void onOrientationReverseLandscape(Activity activity) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
if (mControlWrapper.isFullScreen()) {
handlePlayerStateChanged(VideoView.PLAYER_FULL_SCREEN);
} else {
mControlWrapper.startFullScreen();
int[] size = mControlWrapper.getVideoSize();
int width = size[0];
int height = size[1];
if (width > height) {
if (mControlWrapper.isFullScreen()) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
handlePlayerStateChanged(VideoView.PLAYER_FULL_SCREEN);
} else {
mControlWrapper.startFullScreen();
}
}
}

@ -186,16 +186,10 @@ public class ControlWrapper implements MediaPlayerControl, IVideoController {
int[] size = getVideoSize();
int width = size[0];
int height = size[1];
if (isFullScreen()) {
stopFullScreen();
if (width > height) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
if (width < height) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else {
startFullScreen();
if (width > height) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
}

@ -5,6 +5,7 @@ import android.content.ContentResolver;
import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.content.res.TypedArray;
import android.content.pm.ActivityInfo;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.net.Uri;
@ -732,6 +733,14 @@ public class VideoView<P extends AbstractPlayer> extends FrameLayout
//将播放器视图添加到DecorView中即实现了全屏
decorView.addView(mPlayerContainer);
Activity activity = getActivity();
int[] size = getVideoSize();
int width = size[0];
int height = size[1];
if (width < height) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
setPlayerState(PLAYER_FULL_SCREEN);
}
@ -779,6 +788,14 @@ public class VideoView<P extends AbstractPlayer> extends FrameLayout
decorView.removeView(mPlayerContainer);
this.addView(mPlayerContainer);
Activity activity = getActivity();
int[] size = getVideoSize();
int width = size[0];
int height = size[1];
if (width < height) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
setPlayerState(PLAYER_NORMAL);
}

@ -60,7 +60,7 @@ public class VideoViewConfig {
private boolean mIsEnableLog;
private boolean mPlayOnMobileNetwork = true;
private boolean mEnableOrientation;
private boolean mEnableOrientation = true;
private boolean mEnableAudioFocus = true;
private ProgressManager mProgressManager;
private PlayerFactory mPlayerFactory;

Loading…
Cancel
Save