2014-05-01 16 views
5

non sono in grado di riprodurre video su visualizzazione Web Android.Non è possibile riprodurre video in Web View

Ho mantenuto il file html e video nella mia cartella delle risorse.

ogni volta che carico il file html, mi dà l'errore

05-01 12:31:16.092: E/MediaResourceGetter(17241): Unable to read file: file:///android_asset/MediaBook2%20(2)/2B952499A0E681.mp4 

e ogni volta che si preme il pulsante di riproduzione ottengo il seguente errore

05-01 12:31:23.680: E/chromium(17241): [ERROR:webmediaplayer_android.cc(328)] Not implemented reached in virtual void content::WebMediaPlayerAndroid::setRate(double) 
05-01 12:31:23.710: E/MediaPlayer(17241): error (1, -2147483648) 
05-01 12:31:23.710: E/MediaPlayer(17241): Error (1,-2147483648) 

sono in grado di caricare qualsiasi video a distanza ed eseguire, ma il problema è quando carico il video locale dalla cartella delle risorse Codice per caricare i file e configurare la visualizzazione web

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

    // Remove title bar 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 

    setContentView(R.layout.activity_webview); 
    mContentView = (LinearLayout) findViewById(R.id.linearlayout); 
    // Keep the webview setup ready 
    setupWebView(); 


} 

public void setupWebView() 
{ 
    webView = (WebView) findViewById(R.id.webView); 
    // progressBar = (ProgressBar) findViewById(R.id.progressBarForWebView); 

    WebSettings webViewSettings = webView.getSettings(); 
    webViewSettings.setJavaScriptEnabled(true); 
    webViewSettings.setJavaScriptCanOpenWindowsAutomatically(true); 
    webViewSettings.setPluginState(PluginState.ON); 
    webView.getSettings().setAllowFileAccess(true); 
    webView.setSoundEffectsEnabled(true); 
    webView.setWebViewClient(new SLCWebViewClient()); 
    webView.setWebChromeClient(new WebChromeClient()); 
    loadContentsInWebView(); 

} 
public void loadContentsInWebView() 
    { 

     String localURL = "file:///android_asset/MediaBook2 (2)/SampleForVideo.html"; 
     logger.debug("WebView URL: {}", localURL); 
     try { 
      webView.loadUrl(localURL); 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
      logger.error("Error while loading url", e); 
     } 
    } 
    private class SLCWebViewClient extends WebViewClient 
{ 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) 
    { 
     view.setWebChromeClient(new WebChromeClient() 
     { 

      private View mCustomView; 

      @Override 
      public void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback) 
      { 
       // if a view already exists then immediately terminate the new one 
       if (mCustomView != null) { 
        callback.onCustomViewHidden(); 
        return; 
       } 

       // Add the custom view to its container. 
       mCustomViewContainer.addView(view, COVER_SCREEN_GRAVITY_CENTER); 
       mCustomView = view; 
       mCustomViewCallback = callback; 

       // hide main browser view 
       mContentView.setVisibility(View.GONE); 

       // Finally show the custom view container. 
       mCustomViewContainer.setVisibility(View.VISIBLE); 
       mCustomViewContainer.bringToFront(); 
      } 

     }); 

     webView.loadUrl(url); 

     return true; 
    } 

il campione per il codice video.html

<!DOCTYPE html> 
<html> 
<title>Testing for Video</title> 
<body> 

<video width="320" height="240" controls> 
    <source src="2B952499A0E681.mp4"> 
</video> 

</body> 
</html> 

codice per il file di layout

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

<FrameLayout 
     android:id="@+id/fullscreen_custom_content" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="#FF000000"/> 

<LinearLayout 
     android:id="@+id/linearlayout" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 

<WebView 
     android:id="@+id/webView" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 

cheers, Saurav

risposta

2

Il protocollo file:///android_asset è un elemento specifico di WebView. Cioè: altri componenti di sistema non possono leggere quegli URL.

Il MediaResourceGetter non utilizza lo stack di rete di WebView e pertanto non "capisce" il protocollo file:///android_asset.

Nella tua altra domanda hai menzionato che usi un server http locale - prova a servire il .mp4 da quello.

+0

Grazie marcin per la risposta. Ho provato a servire anche dal mio NanoHTTPD Server, non ha funzionato. È correlato ad alcuni problemi di autorizzazione? Http: //stackoverflow.com/questions/14194890/playing-local-video-in-webview-on-android – saurav

+0

@saurav - la domanda che i collegamenti sembrano essere relativi all'utilizzo del file: ///schema. Stavo proponendo di pubblicare il video da http://127.0.0.1 –

+0

@ marcin- l'ho fatto servendo il mio file da asset come questo http: http: //www.InputStream = ApplicationManager.getInstance().getAssets() \t \t \t \t \t .open ("MediaBook2 (2) /SampleForVideo.html"); \t \t \t // restituire la risposta come un flusso insieme con il tipo MIME \t \t \t risposta = new NanoHTTPD.Response (Status.OK, mimeTypeFromExtension, httpInputStream); – saurav

2

Grazie a Marcin per la sua risposta.

Potrei eseguire i file html caricando il video. Il mio problema era che stavo usando/MediaBook2 (2) /SampleForVideo.html. Ma il '/' dovrebbe essere rimosso durante il caricamento da risorse. Ho diviso la corda ritagliando il '/' e ha funzionato.

Ma quello era solo uno scenario esemplificativo su cui stavo lavorando per chiarire la mia comprensione.

Ho una struttura di cartelle molto più grande e ora quando il file .mp4 viene caricato.

Il lettore multimediale viene visualizzato ma il lettore non sta riproducendo alcun file.

Problemi correlati