2011-11-22 89 views
0

我已經購買了Foscam安全攝像頭,並且能夠在我的MacBook上看到JPEG流式傳輸。 但是,當我使用chrome在手機瀏覽器中打開相同的鏈接時,它開始下載不確定的內容,並在通知菜單中顯示不成功的下載。無法在android web視圖中播放html5流式視頻

如果我在Android Firefox瀏覽器上打開相同的鏈接,則可以看到視頻。

我必須創建一個android應用程序來顯示視頻流,就像它可以在筆記本電腦瀏覽器上一樣。

以下是我使用的代碼:

package org.securitycamera; 


import android.app.Activity; 
import android.media.MediaPlayer; 
import android.media.MediaPlayer.OnCompletionListener; 
import android.media.MediaPlayer.OnErrorListener; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.webkit.WebChromeClient; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.widget.FrameLayout; 
import android.widget.VideoView; 

public class SecuritycameraActivity extends Activity { 
    WebView webView; 
    FrameLayout frameLayout; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     LayoutInflater inflator = getLayoutInflater(); 
     View inflatedView = inflator.inflate(R.layout.main, null); 

     if (!(inflatedView instanceof FrameLayout)) 
     { 
      throw new RuntimeException("inflated view not FrameLayout"); 
     } 
     else 
     { 
      frameLayout = (FrameLayout)inflatedView; 
     } 

     setContentView(frameLayout); 

     webView = (WebView) findViewById(R.id.wv); 
     webView.getSettings().setJavaScriptEnabled(true); 
     webView.getSettings().setPluginState(android.webkit.WebSettings.PluginState.ON); 
     webView.setWebChromeClient(new MyWebChromeClient());   


     try 
     { 
      // webView.loadUrl("http://192.168.1.6/videostream.cgi?user=admin&pwd="); 
      webView.loadUrl("http://broken-links.com/tests/video/"); 
     } 
     catch(Exception e) 
     { 
      throw new RuntimeException(); 
     } 

    } 

    private class MyWebChromeClient extends WebChromeClient implements MediaPlayer.OnCompletionListener, MediaPlayer.OnErrorListener, MediaPlayer.OnPreparedListener { 
     VideoView videoView; 
     WebChromeClient.CustomViewCallback customViewCallback; 

     public void onProgressChanged(WebView view, int newProgress) 
     { 
      if (newProgress == 100) 
      { 
       view.loadUrl("javascript:playVideo()"); 
      } 

     } 

     public void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback) 
     { 
      if (view instanceof FrameLayout){ 
       FrameLayout frame = (FrameLayout) view; 
       if (frame.getFocusedChild() instanceof VideoView){ 
        VideoView video = (VideoView) frame.getFocusedChild(); 
        frame.removeView(video); 
        setContentView(video); 
        video.setOnCompletionListener(new OnCompletionListener() { 

         @Override 
         public void onCompletion(MediaPlayer mp) { 
          //Log.i(DVNGActivity.TAG, "LoadData_QRURL --> onCompletion..."); 
          mp.stop(); 
          setContentView(R.layout.main); 
         } 
        }); 
        video.setOnErrorListener(new OnErrorListener() { 

         @Override 
         public boolean onError(MediaPlayer mp, int what, int extra) { 
         // Log.i(DVNGActivity.TAG, "LoadData_QRURL --> onError"); 
          return false; 
         } 
        }); 
        video.start(); 
       } 
      } 

     } 

     public void onPrepared(MediaPlayer mp) 
     { 
     } 

     public void onCompletion(MediaPlayer mp) 
     { 
      // this is needed to release the MediaPlayer and its resources so it can 
      // be used again later 
      videoView.stopPlayback(); 

      // now remove the video and tell the callback to hide the custom view 
      frameLayout.removeView(videoView); 
      customViewCallback.onCustomViewHidden(); 

      finish(); 
     } 

     public boolean onError(MediaPlayer mp, int what, int extra) 
     { 
      return false; // we did not handle the error - onCompletion will be called 
     } 
    } 
} 

我跟着這個How to Play HTML5 video and YouTube Video within Android WebView?,如果不是播放視頻例子中我發揮我的安全攝像機的視頻即

webView.loadUrl("http://192.168.1.6/videostream.cgi?user=admin&pwd="); 

我得到一個白色的屏幕。

回答

0

此示例https://gist.github.com/3718414有一個Android webview包裝和HTML5視頻 - 它不像引用URL那麼簡單(如果你想在webView中使用視頻),但在ICS和以上並不困難(確保啓用硬件加速似乎很關鍵)