繁体   English   中英

在Android中播放Facebook视频?

[英]Playing facebook video in Android?

有没有办法在Android中以自动播放的方式播放Facebook视频?

我厌倦了使用WebView,但似乎html5 mobile不允许自动播放视频。

    WebSettings webSettings = mainWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setMediaPlaybackRequiresUserGesture(false);
    mainWebView.setWebChromeClient(new WebChromeClient());
    mainWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
    mainWebView.loadUrl("https://www.facebook.com/video/embed?video_id=10154623311598812");

这是可在Android中使用的漂亮的Video Player库:
https://github.com/brianwernick/ExoMedia

请查看其演示代码以了解如何集成它。

请注意,它不使用HTML5

定义一个布局,例如activity_video_player:

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:EMVideoView="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent">

<com.devbrackets.android.exomedia.EMVideoView
    android:id="@+id/video_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    EMVideoView:defaultControlsEnabled="true"/>
</FrameLayout>

Activity说像这样的VideoPlayerActivity

public class VideoPlayerActivity extends AppCompatActivity implements MediaPlayer.OnPreparedListener
{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_video_player);
    .
    .
    String videoUrl = "url";
    mVideoView.setOnPreparedListener(this);
    mVideoView.setVideoURI(Uri.parse(videoUrl));
    }

@Override
    public void onPrepared(MediaPlayer mp) {
        mVideoView.start();
    }

}

而已。 让魔术发生。

首先,使用Webview获取VideoID和VideoData(src),然后将VideoData传递给VideoPlayer并进行播放。

  webView.setWebViewClient(new WebViewClient()
    {

        @Override
        public void onPageFinished(WebView view, String url)
        {

            //query_string = "" + url;
            //showtoast("URL loaded :"+url);
            // view.loadUrl("javascript:(function() { document.getElementsByTagName('video')[0].play(); })()");
        }

        @Override
        public void onLoadResource(WebView view, String url)
        {
            //  query_string=""+url;

            webView.loadUrl("javascript:function PlayVideo(src,id)" +
                    "{"
                    +"FBDownloader.processVideo(src,id);"
                     +"var video=document.getElementById(id);"
                    +"video.play();"
                     +"}" +
                    "(function prepareVideo() " +
                    "{ "
                    + "var el = document.querySelectorAll('div[data-sigil]');"
                    +"var ID;"
                    +"var SRC;"
                    + "for(var i=0;i<el.length; i++)"
                    + "{"
                    + "var sigil = el[i].dataset.sigil;"
                    + "if(sigil.indexOf('inlineVideo') > -1)" +
                    "{"
                    + "delete el[i].dataset.sigil;"
                    + "console.log(i);"
                    + "var jsonData = JSON.parse(el[i].dataset.store);"
                    +"ID=jsonData['videoID'];"
                    +"SRC=jsonData['src'];"

                   // +"document.getElementById(\"'+jsonData['videoID']+'\")[0].play();"
                //   +"var video = document.getElementById(\"'+jsonData['videoID']+'\");"
                  //  +"video.play();"
                   // +"FBDownloader.processVideo(ID,SRC);"
                 + "el[i].setAttribute('onClick','PlayVideo(\\\"'+jsonData['src']+'\\\",\\\"'+jsonData['videoID']+'\\\");');"//'document.getElementsByTagName('video')[0].play(); ');"
              //    +"'FBDownloader.processVideo(\"'+jsonData['src']+'\",\"'+jsonData['videoID']+'\");');"
                    //   + "el[i].setAttribute('onClick', 'FBDownloader.processVideo(\"'+jsonData['src']+'\",\"'+jsonData['videoID']+'\");');"
                    + "}"
                    + "}"

                    + "})()");
            //*/

        }
    });


  @JavascriptInterface
   public void processVideo(final String vidData, final String vidID)
  {

    this.vidData=vidData;
    this.vidID=vidID;

     //PLAY VIDEO HERE
    videoView.play(vidId);

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM