视频Android中的web视图只播放一次视图、视频、Android、web

2023-09-13 23:52:29 作者:假装陌生了

我成功地播放从HTML5内容的web视图中的Andr​​oid流媒体的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();
    }
 
css 插入图片实时视图能显示 网页显示不了

在这里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;