package com.wpc.library.videocomponents;
|
|
import android.annotation.SuppressLint;
|
import android.graphics.Bitmap;
|
import android.media.MediaPlayer;
|
import android.os.Bundle;
|
import android.support.v4.app.Fragment;
|
import android.text.TextUtils;
|
import android.util.Log;
|
import android.view.LayoutInflater;
|
import android.view.View;
|
import android.view.ViewGroup;
|
import android.webkit.JavascriptInterface;
|
import android.webkit.WebSettings;
|
import android.webkit.WebView;
|
import android.webkit.WebViewClient;
|
|
public class VideoUrlFragment extends Fragment {
|
|
private MediaPlayer mMediaPlayer;
|
|
private WebView mWebView;
|
|
private Runnable mVideoUrlShower = new Runnable() {
|
|
@Override public void run() {
|
mWebView.loadUrl("javascript:window.local_obj.showVideoUrl(document.getElementsByTagName('video')[0].src);");
|
}
|
};
|
|
private class AdvertisementSkiper implements Runnable {
|
|
private long currentTime;
|
|
public AdvertisementSkiper(long currentTime) {
|
super();
|
this.currentTime = currentTime;
|
}
|
|
@Override public void run() {
|
mWebView.loadUrl("javascript:document.getElementsByTagName('video')[0].play();"
|
+ "document.getElementsByTagName('video')[0].defaultMuted=true;"
|
+ "document.getElementsByTagName('video')[0].currentTime=" + currentTime);
|
}
|
}
|
|
@Override
|
public void onCreate(Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
mMediaPlayer = new MediaPlayer();
|
}
|
|
@SuppressLint("SetJavaScriptEnabled")
|
@Override
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
Bundle savedInstanceState) {
|
mWebView = new WebView(getActivity());
|
WebSettings setting = mWebView.getSettings();
|
setting.setJavaScriptEnabled(true);
|
setting.setJavaScriptCanOpenWindowsAutomatically(true);
|
setting.setAllowFileAccess(true);
|
mWebView.addJavascriptInterface(new InJavaScriptLocalObj(), "local_obj");
|
mWebView.setWebViewClient(new MyWebViewClient());
|
mWebView.loadUrl(getArguments().getString("url"));
|
return mWebView;
|
}
|
|
@Override
|
public void onDestroy() {
|
super.onDestroy();
|
mMediaPlayer.reset();
|
mMediaPlayer.release();
|
}
|
|
private final class MyWebViewClient extends WebViewClient {
|
public boolean shouldOverrideUrlLoading(WebView view, String url) {
|
view.loadUrl(url);
|
return true;
|
}
|
|
public void onPageStarted(WebView view, String url, Bitmap favicon) {
|
super.onPageStarted(view, url, favicon);
|
Log.d("WebView", "onPageStarted");
|
}
|
|
public void onPageFinished(WebView view, String url) {
|
super.onPageFinished(view, url);
|
Log.d("WebView", "onPageFinished ");
|
mWebView.removeCallbacks(mVideoUrlShower);
|
mWebView.postDelayed(mVideoUrlShower, 3000);
|
}
|
}
|
|
private int count = 0;// 循环解析的次数
|
|
final class InJavaScriptLocalObj {
|
|
@JavascriptInterface
|
public void showVideoUrl(String videoUrl) {
|
if (TextUtils.isEmpty(videoUrl)) {
|
mWebView.postDelayed(mVideoUrlShower, 1000);
|
} else {
|
long time = getVideoDuration(videoUrl) / 1000;
|
if (time < 120) {
|
count++;
|
if (count < 20) {
|
mWebView.post(new AdvertisementSkiper(time));
|
mWebView.postDelayed(mVideoUrlShower, 1000);
|
} else {
|
// 解析失败
|
}
|
} else {
|
Log.d("WebView", "真实视频的地址:" + videoUrl);
|
}
|
}
|
}
|
}
|
|
private long getVideoDuration(String videoUrl) {
|
try {
|
mMediaPlayer.reset();
|
mMediaPlayer.setDataSource(videoUrl);
|
mMediaPlayer.prepare();
|
long time = mMediaPlayer.getDuration();
|
Log.d("WebView", "视频时长:" + time);
|
return time;
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return 0;
|
}
|
}
|