【问题标题】:play webview RTMP stream in android在android中播放webview RTMP流
【发布时间】:2014-03-06 20:43:49
【问题描述】:

我是android开发新手,所以不要苛刻

我正在创建一个包含 webview 的 android 应用程序。网页视图有很多直播链接。

在阅读了各种帖子后,我了解到在 webview 本身中播放视频确实很困难和复杂(正如我所尝试的那样),因为 webview 没有/不支持许多视频流功能

我的问题是:当用户在 WEB 视图中选择特定链接时,我如何打开 MXPLAYER 并播放流?

我只是在我自己的设备上测试它,所以我想保持它特定于 mx 播放器,因为我已经安装了它

我尝试了以下方法:

public class WebPageLoader extends Activity {

final Activity activity = this;
WebView webView;
private String pknamepro;
String homePage = "";
String specificWebURL = "";

public WebPageLoader(){
    pknamepro = "com.mxtech.videoplayer.pro";
}

private void startMx(String url)
{
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setComponent(new ComponentName("com.mxtech.videoplayer.pro", "com.mxtech.videoplayer.pro.ActivityScreen"));
    intent.setData(Uri.parse(url));
    intent.putExtra("secure_uri", true);

        startActivity(intent);
        return;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.webpageloader);

    webView = (WebView) findViewById(R.id.webview);


    webView.getSettings().setSupportZoom(false);
    webView.getSettings().setBuiltInZoomControls(false);
    webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
    webView.setScrollbarFadingEnabled(true);
    webView.getSettings().setLoadsImagesAutomatically(true);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setDatabaseEnabled(true);
    webView.getSettings().setDomStorageEnabled(true);
    webView.getSettings().setAppCacheEnabled(true);
    webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

    webView.setWebChromeClient(new WebChromeClient() {
        public void onProgressChanged(WebView view, int progress)
        {
            activity.setTitle("Loading...");
            activity.setProgress(progress * 100);

            if(progress == 100)
                activity.setTitle(R.string.app_name);
        }
    });

    webView.setWebViewClient(new WebViewClient() {
        @Override
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
        {
            Toast.makeText(getApplicationContext(), "Internet connection down" + description, Toast.LENGTH_SHORT).show(); 
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url)
        {
          if (url.contains("rtmp")|| url.contains(specificWebURL) || url.startsWith("rtmpe")|| url.startsWith("udp")) {

              startMx(url);
              return true;
          }

            view.loadUrl(url);
            return true;
        }
    });

    webView.loadUrl(homePage);
}

protected void onSaveInstanceState(Bundle outState)
{
    super.onSaveInstanceState(outState);

    // Save the state of the WebView
    webView.saveState(outState);
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState)
{
    super.onRestoreInstanceState(savedInstanceState);

    // Restore the state of the WebView
    webView.restoreState(savedInstanceState);
}

public void onBackPressed() {

    if(webView.canGoBack() == true){
        webView.goBack();
    }else{
         webView.goBack();
    }
}

如您所见,我已通过检查 url 进行了尝试,并尝试对 url 进行硬编码,但均无济于事。

似乎它没有执行上述任何检查并尝试在 webview 中播放视频,因为每当我点击任何链接时,都会打开一个新页面,显示“加载播放器错误:没有可播放的源找到”而不是在我的设备上打开 mxplayer。

【问题讨论】:

    标签: android webview video-player


    【解决方案1】:

    如果其他人和我有同样的问题,下面是我的解决方案,对我有用。

            Intent myIntent;
            PackageManager pm = getPackageManager();
            try{
                myIntent = pm.getLaunchIntentForPackage("com.mxtech.videoplayer.pro");
                myIntent.setComponent(new ComponentName("com.mxtech.videoplayer.pro", "com.mxtech.videoplayer.ActivityScreen"));
                myIntent.setDataAndType(Uri.parse(url), "application/x-mpegURL");
                myIntent.putExtra("secure_uri", true);
                myIntent.putExtra(EXTRA_DECODE_MODE, (byte)2);
                if (null != myIntent)
                   this.startActivity(myIntent);
            }
            catch (ActivityNotFoundException e)
            {
    
                Toast.makeText(getApplicationContext(),
                        " stream not working ",
                        Toast.LENGTH_LONG).show();
            }
    

    【讨论】:

      猜你喜欢
      • 2012-07-04
      • 1970-01-01
      • 2023-04-02
      • 2014-07-11
      • 1970-01-01
      • 1970-01-01
      • 2021-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多