2012-05-07 3 views
1

일부 독서 시간을 절약 할 수 있습니다 .... 내 WEBVIEW에서 MP4 비디오를 재생하려고 시도 할 때 WEBVIEW BROWSER 내에서 비디오를 재생할 필요가 없습니다. 나는 완전히 그 일을하는 것처럼 네이티브 비디오 플레이어를 안드로이드 용으로 끄는 일부 코드로 정상적으로 처리됩니다. 보다 나은 해결책이 있다면 내 WEBVIEW를 수정하는 것만 큼 확실하게 여기는 것보다 더 나은 해결책이있는 것입니다.Android WebView에서 동적 mp4 비디오를 재생하는 방법

맨 먼저 Android 나 JAVA 개발자가 아닙니다. 그러나 코드를 제공하고 올바른 방향으로 나를 가리키면 대개 저에게 다가갑니다. 지난 4 년 동안 나는 상당한 회원이있는 사이트를 만들었습니다. www.GoLiVeFitness.com 및 www.GoLiveFitness.com/Mobile. 솔루션은 Asp.Net 솔루션입니다. 기본적으로 사용자가 4,800 개 이상의 무료 운동 동영상을 쉽게 검색 할 수있는 웹 사이트입니다. 우리는 훨씬 축소 된 버전이지만 훨씬 깨끗한 응용 프로그램의 모바일 버전을 만들었습니다. 모바일 웹 사이트에 스마트 폰 브라우저를 가리 키도록 사용자에게 계속 알려주지 않고 안드로이드 WebView를 사용하여 내장 된 html5 브라우저에 웹 사이트를로드하기로 결정했습니다 (이 말을 제대로하지 않으면 용서해주십시오).

나는 webview를 완료하고 사이트를 완벽하게로드합니다. 나는 Droid Charge에 배치 할 수 있었고 사이트는 webview를 통해 완벽하게로드되었습니다. 여기에 문제가 있습니다 .... 저장 프로 시저를 포함한 모든 유형의 T-SQL에서 쿼리 및 가져 오는 동적 비디오는 웹보기에서 재생되지 않습니다. 재생 버튼을 클릭하면 재생 버튼이 시작될 수도 있지만 결코 재생되지 않는 것처럼 보입니다. 나는 매우 빨리 내가 ​​그런 식으로 처리하기에 충분한 코드가 내 webview에 없다고 결정했다. 다시 말하지만, 몇 개의 비디오를 하드 코딩해도 작동하지 않습니다. 이 사이트는 4,800 개가 넘는 비디오를 가지고 있습니다. 사용자는 예를 들어 다리를 입력하고 130 개의 다리 연습 문제를 다시 얻을 수 있습니다. 그런 다음 이름 링크를 터치하고 동영상을 재생하여 하나를 선택할 수 있습니다. **** 그래서 내 질문은 WebView 브라우저에서 mp4 형식의 비디오를 재생할 수있게하는 방법입니다. 나는 여기서 작동 할 수도있는 해결책을 보았으나 코드를 작동시키기에 충분하지 않습니다. 내가 원하는 것은 누군가가 WebView와 함께 코드를 수정하는 것을 도울 수 있다는 것입니다. 시도했을 때 나는 많은, 많은, 많은 오류를 받았습니다. 따라서 WebView 브라우저에서 실행되는 WebView 코드를 먼저 붙여 넣은 다음 다른 사람이 작동하도록 변경해야하는 내용을 알려주기를 희망하는 솔루션 코드를 붙여 넣습니다. 주의 : 도움이된다면 올바른 코드를 보여줘야 할 것입니다. 다시 한 번, 나는 이것에 아주 새롭다.

내 GoLiveFitnessActivity.java 파일의 WebView 코드에있는 코드 ---- package golivefitness.mob; How to play a video in a webview with android?

public class InredisChromeClient extends WebChromeClient implements   OnCompletionListener, OnErrorListener { 
private InterfazWebInredis interfazWeb; // Use Your WebView instance instead 

private VideoView mCustomVideoView; 

private LinearLayout mContentView; 
private FrameLayout mCustomViewContainer; 
private WebChromeClient.CustomViewCallback mCustomViewCallback; 
private LinearLayout mErrorConsoleContainer; 
static final FrameLayout.LayoutParams COVER_SCREEN_GRAVITY_CENTER = new FrameLayout.LayoutParams(
     ViewGroup.LayoutParams.FILL_PARENT, 
     ViewGroup.LayoutParams.FILL_PARENT, Gravity.CENTER); 

public InredisChromeClient(InterfazWebInredis iwi) { 
    super(); 
    this.interfazWeb = iwi; 
} 

public void onShowCustomView(View view, CustomViewCallback callback) { 
    // super.onShowCustomView(view, callback); 
    if (view instanceof FrameLayout) { 
     mCustomViewContainer = (FrameLayout) view; 
     mCustomViewCallback = callback; 
     mContentView = (LinearLayout) interfazWeb.findViewById(R.id.mainContainer); 
     if (mCustomViewContainer.getFocusedChild() instanceof VideoView) { 
      mCustomVideoView = (VideoView) mCustomViewContainer.getFocusedChild(); 
      // frame.removeView(video); 
      mContentView.setVisibility(View.GONE); 
      mCustomViewContainer.setVisibility(View.VISIBLE); 
      interfazWeb.setContentView(mCustomViewContainer); 
      mCustomVideoView.setOnCompletionListener(this); 
      mCustomVideoView.setOnErrorListener(this); 
      mCustomVideoView.start(); 
     } 
    } 
} 

public void onHideCustomView() { 
    if (mCustomVideoView == null) 
     return; 
    // Hide the custom view. 
    mCustomVideoView.setVisibility(View.GONE); 
    // Remove the custom view from its container. 
    mCustomViewContainer.removeView(mCustomVideoView); 
    mCustomVideoView = null; 
    mCustomViewContainer.setVisibility(View.GONE); 
    mCustomViewCallback.onCustomViewHidden(); 
    // Show the content view. 
    mContentView.setVisibility(View.VISIBLE); 
} 

@Override 
public void onCompletion(MediaPlayer mp) { 
    mp.stop(); 
    mCustomViewContainer.setVisibility(View.GONE); 
    onHideCustomView(); 
    interfazWeb.setContentView(mContentView); 
} 

@Override 
public boolean onError(MediaPlayer mp, int what, int extra) { 
    interfazWeb.setContentView(R.layout.main); 
    return true; 
} 
} 
+0

장치 재고 브라우저로 모바일 사이트를 탐색하면 비디오가 재생됩니까? – FoamyGuy

+2

http://meta.stackexchange.com/a/129787/142802 –

+0

동영상은 브라우저에서 브라우저를 사용하여 golivefitness.com/mobile로 이동하면 내 드로이드 충전 및 내 친구 드로이드에서 놀랍습니다. 로그인 및 옙 ... 모든 비디오가 재생됩니다. 당신이 원하면 시험해 볼 수 있습니다. 나는 그것이 webview에서 같은 방식으로 작동하지만 외관상으로는 알지 못했다. 그러나 브라우저에서 네이티브 비디오 플레이어가 시작되었으며 우리는 완전히 괜찮습니다. – user1380537

답변

0

이 후 아직 확실하지만, 당신이를 시작하기 전에 이런 식으로 뭔가를 할 수 없음 내 문제가 해결 될 수 있습니다 내가 스택 오버 플로우에서 복사

import android.app.Activity; 
import android.drm.DrmManagerClient.OnErrorListener; 
import android.media.MediaPlayer; 
import android.media.MediaPlayer.OnCompletionListener; 
import android.os.Bundle; 
import android.view.Gravity; 
import android.view.KeyEvent; 
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.LinearLayout; 
import android.widget.VideoView; 

public class GoLiveFitnessActivity extends Activity { 

private WebView mWebView; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 


    WebView mWebView = (WebView) findViewById(R.id.webview); 
    mWebView.getSettings().setJavaScriptEnabled(true); 
    mWebView.loadUrl("http://www.golivefitness.com/mobile"); 
    mWebView.setWebViewClient(new HelloWebViewClient()); 
} 

    private class HelloWebViewClient extends WebViewClient { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) 
     { 
      view.loadUrl(url); 
      return true; 
     } 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { 
      mWebView.goBack(); 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 
} 

솔루션 비디오 (내 비디오는 'res/raw'폴더에 저장 됨) :

비디오 뷰 초기화 코드 :

VideoView vd = (VideoView)view.findViewById(R.id.video); 
vd.setVideoURI(Uri.parse("android.resource:/PACKAGE_NAME/" + getVideo(context, "videoName"))); 
vd.start(); 

코드는 동적 영상을 얻을 수 있습니다 :

public static int getVideo(Context context, String name) 
{ 
    Assert.assertNotNull(context); 
    Assert.assertNotNull(name); 

    return context.getResources().getIdentifier(name, "raw", context.getPackageName()); 
} 

위의 코드는 기본적으로 당신이 당신의 setVideoURI 전화로 문자열 이름을 전달 할 수 있습니다. 코드의 두 번째 청크가 관련 비디오를 재생하기 위해 관련 안드로이드 ID를 반환합니다 (코드 내 어디에서나 호출 할 수 있습니다).

희망이 도움이됩니다.

관련 문제