2013-04-15 2 views
1

я видел экземпляры этого вопроса просили раньше, но я либо не мог заставить их работать или не понял их ..Как я могу вставлять HTML5 видео в WebView

Я удостоверился, чтобы установить мой WebView в WebChromeClient и включить аппаратное ускорение в файле манифеста. Я отправляю скомпилированное приложение на Samsung Galaxy Tab GT-P1000. В результате видеоэлемент загружается, но файл не воспроизводится. Файл html работает на Chrome на EXIT.

У меня нет большого опыта работы с ADT, поэтому, если бы вы могли попытаться быть максимально подробными с вашими ответами, это было бы здорово!

Вот мой HTML код ..

<!DOCTYPE html> 
<html> 
    <head> 
     <title></title> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <script type="text/javascript"></script> 
    </head> 
    <body> 
     <div id="video"> 
      <video id="vid" height="240" width="360" preload controls> 
       <source src="ljmuvideo.mp4" type="video/mp4"> 
     </video> 
     </div> 
     <script> 
      var video = document.getElementById('vid'); 
      video.addEventListener('click',function(){ 
      video.play(); 
      },false); 
     </script> 
    </body> 
</html> 

Вот мой MainActivity.java

package com.ljmu.sltwebview; 

import android.os.Bundle; 
import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.view.Menu; 
import android.view.WindowManager; 
import android.webkit.WebChromeClient; 
import android.webkit.WebSettings; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 

public class MainActivity extends Activity { 

    @SuppressLint("SetJavaScriptEnabled") @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     WebView mywebview = (WebView) findViewById(R.id.webview); 
     mywebview.loadUrl("file:///android_asset/html5vid.html"); 
     mywebview.getSettings().setUseWideViewPort(true); 
     WebSettings webSettings = mywebview.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 
     webSettings.setBuiltInZoomControls(true); 
     mywebview.setWebChromeClient(new WebChromeClient()); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 

Вот мой файл манифеста

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.ljmu.sltwebview" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="17" /> 

    <uses-permission android:name="android.permission.INTERNET" /> 

    <application 
     android:allowBackup="true" 
     android:hardwareAccelerated="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.ljmu.sltwebview.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 
+0

это работает, если вы загружаете из не локального хранилища URL-адресов, - по крайней мере, поможет сузить, если проблема связана с настройкой веб-просмотра для видео или с местными активами. Думаю, я должен попробовать настроить этот [https://gist.github.com/Offbeatmammal/3718414], чтобы использовать локальный актив – Offbeatmammal

+0

в порядке, я в тупике. не может заставить его играть, когда актив находится в папке с активами. прочитайте несколько комментариев о сжатии, являющемся проблемой, но не можете найти простой способ обойти это. предположим, что вам, возможно, придется копировать видео на SD-карту, прежде чем играть – Offbeatmammal

+0

Спасибо, что посмотрели на это для меня, какой будет явный путь, который я должен был бы использовать, чтобы указать на SD-карту? –

ответ

1

Как это не даст вам воспроизведите фильм из папки «Активы», вам нужно будет скопировать видео (и для удобства других активов) на SD-карту.

У этого сообщения есть отличный образец для этого How to copy files from 'assets' folder to sdcard?, хотя вам нужно будет добавить код для создания выходного каталога (также из комментариев там). Вы также можете проверить, существуют ли файлы и не копировать их, когда вам не нужно

Как только вы переместили HTML-страницу, вы можете ссылаться на нее в webview через файл: /// sdcard/{myapp} /default.html, а затем пути к активам будут относиться к документу

+0

Спасибо, я попробую это и вернусь к вам. –

+0

Я пробовал это, и он не работал. Я также попытался разместить видео на удаленном сервере и изменить URL-адрес в html-файле, и это тоже не сработало. –

+0

Вы включили аппаратное ускорение в манифесте? для веб-просмотра для воспроизведения видео, которое, как представляется, является ключевым - см. образец в gist.github.com/Offbeatmammal/3718414 – Offbeatmammal

Смежные вопросы