воспроизвести RTMP-поток веб-просмотра в Android

Я новичок в разработке для Android, так что не судите строго

Я создаю приложение для Android, содержащее веб-просмотр. Веб-просмотр имеет много ссылок на прямую трансляцию.

После прочтения различных сообщений я понимаю, что действительно сложно и сложно (как я пытался) воспроизвести видео в самом веб-просмотре, поскольку в веб-просмотре нет/поддерживается множество функций для потоковой передачи видео.

Мой вопрос: КАК ОТКРЫТЬ MXPLAYER И ВОСПРОИЗВЕДИТЬ ПОТОК, КОГДА ПОЛЬЗОВАТЕЛЬ ВЫБИРАЕТ КОНКРЕТНУЮ ССЫЛКУ В ВЕБ-ПРОСМОТР?

Я просто тестирую это на своем собственном устройстве, поэтому хочу, чтобы оно было специфичным для mx player, поскольку оно у меня уже установлено.

Я пробовал следующее:

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-адрес, но ни один из них не работает.

Кажется, что он не выполняет ни одну из вышеперечисленных проверок и пытается воспроизвести видео в веб-просмотре самостоятельно, потому что всякий раз, когда я нажимаю на любую из ссылок, открывается новая страница с сообщением «Ошибка загрузки проигрывателя: не найдены воспроизводимые источники» открытия mxplayer на моем устройстве.


person Mr Sury    schedule 06.03.2014    source источник


Ответы (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();
        }
person Mr Sury    schedule 07.03.2014