package com.funshion.video.parser;
|
|
import android.content.pm.ActivityInfo;
|
import android.os.Build;
|
import android.os.Bundle;
|
import android.util.Log;
|
import android.view.LayoutInflater;
|
import android.view.View;
|
import android.view.ViewGroup;
|
import android.webkit.ConsoleMessage;
|
import android.webkit.JavascriptInterface;
|
import android.webkit.WebChromeClient;
|
import android.webkit.WebResourceRequest;
|
import android.webkit.WebSettings;
|
import android.webkit.WebView;
|
import android.webkit.WebViewClient;
|
import android.widget.FrameLayout;
|
|
import com.androidquery.AQuery;
|
import com.shuyu.gsyvideoplayer.GSYVideoManager;
|
import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer;
|
import com.weikou.beibeivideo.R;
|
import com.weikou.beibeivideo.util.downutil.StringUtils;
|
|
import androidx.annotation.NonNull;
|
import androidx.annotation.Nullable;
|
import androidx.fragment.app.Fragment;
|
|
/**
|
* 视频播放路径解析
|
*/
|
public class FunshionWebPlayerFragment extends Fragment {
|
|
final int MAX_PARSE_COUNT = 4;
|
private String TAG = "FunshionWebPlayerFragment";
|
private WebView webView;
|
private String url;
|
private String playUrl = null;
|
int parseCount = 0;
|
|
|
private String title;
|
|
|
private AQuery mAQuery;
|
private StandardGSYVideoPlayer videoPlayer;
|
|
public FunshionWebPlayerFragment(String title, String url) {
|
this.url = url;
|
this.title = title;
|
}
|
|
private void initWebSetting() {
|
WebSettings webSetting = webView.getSettings();
|
webSetting.setJavaScriptEnabled(true);
|
webSetting.setTextZoom(100);
|
webSetting.setBlockNetworkImage(false);
|
webSetting.setJavaScriptEnabled(true);
|
webSetting.setJavaScriptCanOpenWindowsAutomatically(true);
|
webSetting.setAllowFileAccess(true);
|
webSetting.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
|
webSetting.setSupportZoom(false);
|
webSetting.setBuiltInZoomControls(true);
|
webSetting.setUseWideViewPort(true);
|
webSetting.setSupportMultipleWindows(true);
|
webSetting.setLoadWithOverviewMode(true);
|
webSetting.setAppCacheEnabled(true);
|
webSetting.setDatabaseEnabled(true);
|
webSetting.setDomStorageEnabled(true);
|
webSetting.setGeolocationEnabled(true);
|
webSetting.setAppCacheMaxSize(Long.MAX_VALUE);
|
webSetting.setPluginState(WebSettings.PluginState.ON_DEMAND);
|
webSetting.setRenderPriority(WebSettings.RenderPriority.HIGH);
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
webSetting.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
|
}
|
}
|
|
|
private void initView() {
|
WebSettings settings = webView.getSettings();
|
settings.setJavaScriptEnabled(true);
|
settings.setJavaScriptCanOpenWindowsAutomatically(true);
|
settings.setPluginState(WebSettings.PluginState.ON);
|
// settings.setPluginsEnabled(true);
|
settings.setAllowFileAccess(true);
|
settings.setLoadWithOverviewMode(true);
|
settings.setUserAgentString("Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Mobile Safari/537.36");
|
|
webView.setWebViewClient(new WebViewClient() {
|
@Override
|
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
|
String url = request.getUrl().toString();
|
Log.i(TAG, request.getUrl().toString());
|
return super.shouldOverrideUrlLoading(view, request);
|
}
|
|
@Override
|
public void onPageFinished(WebView view, String url) {
|
super.onPageFinished(view, url);
|
startParse();
|
}
|
|
@Override
|
public boolean shouldOverrideUrlLoading(WebView view, String url) {
|
Log.i(TAG, url);
|
return super.shouldOverrideUrlLoading(view, url);
|
}
|
});
|
|
webView.setWebChromeClient(new WebChromeClient() {
|
@Override
|
public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
|
Log.i(TAG, consoleMessage.lineNumber() + ":" + consoleMessage.message());
|
return super.onConsoleMessage(consoleMessage);
|
}
|
});
|
|
webView.addJavascriptInterface(new VideoJavascriptInter(new IParseResult() {
|
@Override
|
public void onSuccess(String url) {
|
Log.i(TAG, "开始播放:" + url);
|
videoPlayer.post(new Runnable() {
|
@Override
|
public void run() {
|
videoPlayer.setUp(url, true, title);
|
videoPlayer.getTitleTextView().setVisibility(View.VISIBLE);
|
videoPlayer.startPlayLogic();
|
mAQuery.id(R.id.fl_loading).visibility(View.GONE);
|
}
|
});
|
|
}
|
}), "__video");
|
|
initWebSetting();
|
}
|
|
private void initPlayer() {
|
|
videoPlayer.getBackButton().setVisibility(View.INVISIBLE);
|
videoPlayer.getBackButton().setImageResource(R.drawable.icon_player_back);
|
|
//设置返回按键功能
|
videoPlayer.getBackButton().setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
getActivity().onBackPressed();
|
videoPlayer.getBackButton().setVisibility(View.INVISIBLE);
|
}
|
});
|
|
|
videoPlayer.getFullscreenButton().setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
if (getActivity().getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
|
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
videoPlayer.getBackButton().setVisibility(View.VISIBLE);
|
} else {
|
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
videoPlayer.getBackButton().setVisibility(View.INVISIBLE);
|
}
|
}
|
});
|
}
|
|
@Override
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
}
|
|
private void startParse() {
|
if (parseCount > MAX_PARSE_COUNT) {
|
return;
|
}
|
if (!StringUtils.isNullOrEmpty(playUrl)) {
|
return;
|
}
|
webView.postDelayed(new Runnable() {
|
@Override
|
public void run() {
|
webView.loadUrl("javascript:var ___= document.getElementsByTagName('video')[0].getAttribute('src');__video.src(___)");
|
startParse();
|
}
|
}, (int) (Math.pow(parseCount, 2) * 1000));
|
parseCount++;
|
|
}
|
|
@Nullable
|
@Override
|
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
View root = LayoutInflater.from(getContext()).inflate(R.layout.fragment_funshion_native_player, null);
|
videoPlayer = root.findViewById(R.id.videoPlayer);
|
mAQuery = new AQuery(root);
|
webView = new WebView(getContext());
|
initView();
|
webView.loadUrl(url);
|
((FrameLayout) mAQuery.id(R.id.fl_container).getView()).addView(webView);
|
initPlayer();
|
return root;
|
}
|
|
public void onBackPressed() {
|
//先返回正常状态
|
if (getActivity().getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
|
videoPlayer.getFullscreenButton().performClick();
|
return;
|
}
|
//释放所有
|
videoPlayer.setVideoAllCallBack(null);
|
}
|
|
@Override
|
public void onResume() {
|
super.onResume();
|
videoPlayer.onVideoResume();
|
}
|
|
@Override
|
public void onPause() {
|
super.onPause();
|
videoPlayer.onVideoPause();
|
}
|
|
@Override
|
public void onDestroy() {
|
super.onDestroy();
|
webView.destroy();
|
GSYVideoManager.releaseAllVideos();
|
|
}
|
|
|
class VideoJavascriptInter {
|
private IParseResult resultListener;
|
|
public VideoJavascriptInter(IParseResult result) {
|
this.resultListener = result;
|
}
|
|
@JavascriptInterface
|
public void src(String url) {
|
if (!StringUtils.isNullOrEmpty(url) && StringUtils.isNullOrEmpty(playUrl)) {
|
playUrl = url;
|
if (resultListener != null) {
|
resultListener.onSuccess(playUrl);
|
}
|
}
|
}
|
|
}
|
|
interface IParseResult {
|
public void onSuccess(String url);
|
}
|
|
|
}
|