我成功地播放从HTML5内容的web视图中的Android流媒体的Youtube视频,但现在的问题是,视频播放仅第一次。之后, VideoView
唯一无二的视频文件的结束。
我试图清除缓存的建议here但没有运气。
可能是什么这个问题可能的解决方案?
请尝试以下code运行视频,这对使用stackoverflow.com
给出了一些建议被 的WebView web视图=(web视图)findViewById(R.id.product_details_webview);
WebSettings webSettings = webView.getSettings();
webSettings.setPluginState(WebSettings.PluginState.ON);
webSettings.setJavaScriptEnabled(真正的);
webSettings.setUseWideViewPort(真正的);
webSettings.setLoadWithOverviewMode(真正的);
webView.setWebChromeClient(新chromeClient());
webView.setWebViewClient(新WebViewClient(){
});
webView.loadUrl(URL);
公共类chromeClient扩展WebChromeClient实现OnCompletionListener,
OnErrorListener {
私人的WebView WV;
私人VideoView mVideoView;
私人的LinearLayout mContentView;
私人的FrameLayout mCustomViewContainer;
私人WebChromeClient.CustomViewCallback mCustomViewCallback;
FrameLayout.LayoutParams COVER_SCREEN_GRAVITY_CENTER =新
FrameLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT,Gravity.CENTER);
@覆盖
公共无效onShowCustomView(查看视图,CustomViewCallback回调){
如果(查看的instanceof的FrameLayout){
WV =(web视图)findViewById(R.id.product_details_webview);
mCustomViewContainer =(的FrameLayout)视图;
mCustomViewCallback =回调;
mContentView =(的LinearLayout)findViewById(R.id.linearlayout1);
如果(mCustomViewContainer.getFocusedChild()的instanceof VideoView){
mVideoView =(VideoView)mCustomViewContainer.getFocusedChild();
// frame.removeView(视频)
mContentView.setVisibility(View.GONE);
mCustomViewContainer.setVisibility(View.VISIBLE);
的setContentView(mCustomViewContainer);
mVideoView.setOnCompletionListener(本);
mVideoView.setOnErrorListener(本);
mVideoView.start();
}
}
}
公共无效onHideCustomView(){
如果(mVideoView == NULL){
返回;
}其他{
//隐藏的自定义视图。
mVideoView.setVisibility(View.GONE);
//将其从容器中的自定义视图。
mCustomViewContainer.removeView(mVideoView);
mVideoView = NULL;
mCustomViewContainer.setVisibility(View.GONE);
mCustomViewCallback.onCustomViewHidden();
//显示的内容视图。
mContentView.setVisibility(View.VISIBLE);
}
}
公共无效onCompletion(MediaPlayer的MP){
mp.stop();
mCustomViewContainer.setVisibility(View.GONE);
onHideCustomView();
的setContentView(mContentView);
}
公共布尔的onError(MediaPlayer的为arg0,诠释ARG1,ARG2 INT){
的setContentView(mContentView);
返回true;
}
}
解决方案
添加在你的Chrome浏览器的客户端:
@覆盖于prepared(MediaPlayer的MP)公共无效{
customViewCallback.onCustomViewHidden();
}
在这里customViewCallback =回调;
I am succeeded to play streamed Youtube video from HTML5 content in Webview in Android but now problem is that video plays only first time. After that VideoView
only goes to end of the video file.
I tried clearing cache as suggested here but no luck.
What could be the possible solution for this problem?
Please try following code to run Video, this has been using some suggestions given on stackoverflow.com
WebView webView = (WebView) findViewById(R.id.product_details_webview);
WebSettings webSettings = webView.getSettings();
webSettings.setPluginState(WebSettings.PluginState.ON);
webSettings.setJavaScriptEnabled(true);
webSettings.setUseWideViewPort(true);
webSettings.setLoadWithOverviewMode(true);
webView.setWebChromeClient(new chromeClient());
webView.setWebViewClient(new WebViewClient(){
});
webView.loadUrl(url);
public class chromeClient extends WebChromeClient implements OnCompletionListener,
OnErrorListener{
private WebView wv;
private VideoView mVideoView;
private LinearLayout mContentView;
private FrameLayout mCustomViewContainer;
private WebChromeClient.CustomViewCallback mCustomViewCallback;
FrameLayout.LayoutParams COVER_SCREEN_GRAVITY_CENTER = new
FrameLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER);
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
if (view instanceof FrameLayout) {
wv = (WebView)findViewById(R.id.product_details_webview);
mCustomViewContainer = (FrameLayout) view;
mCustomViewCallback = callback;
mContentView = (LinearLayout)findViewById(R.id.linearlayout1);
if (mCustomViewContainer.getFocusedChild() instanceof VideoView) {
mVideoView = (VideoView) mCustomViewContainer.getFocusedChild();
// frame.removeView(video);
mContentView.setVisibility(View.GONE);
mCustomViewContainer.setVisibility(View.VISIBLE);
setContentView(mCustomViewContainer);
mVideoView.setOnCompletionListener(this);
mVideoView.setOnErrorListener(this);
mVideoView.start();
}
}
}
public void onHideCustomView() {
if (mVideoView == null){
return;
}else{
// Hide the custom view.
mVideoView.setVisibility(View.GONE);
// Remove the custom view from its container.
mCustomViewContainer.removeView(mVideoView);
mVideoView = null;
mCustomViewContainer.setVisibility(View.GONE);
mCustomViewCallback.onCustomViewHidden();
// Show the content view.
mContentView.setVisibility(View.VISIBLE);
}
}
public void onCompletion(MediaPlayer mp) {
mp.stop();
mCustomViewContainer.setVisibility(View.GONE);
onHideCustomView();
setContentView(mContentView);
}
public boolean onError(MediaPlayer arg0, int arg1, int arg2) {
setContentView(mContentView);
return true;
}
}
解决方案
Add in your chrome client :
@Override public void onPrepared(MediaPlayer mp) {
customViewCallback.onCustomViewHidden();
}
where customViewCallback = callback;