Воспроизведение mp4-видео в webview с помощью html5 в android

Я пытаюсь воспроизвести mp4-видео в webView с помощью HTML5 в Android, но, к сожалению, он не работает, так может кто-нибудь мне помочь, как я могу это сделать?

Вот мой код HTML с именем new2.html

<video width="365" height="200" src="/sdcard/Download/video.mp4" controls autobuffer></video>


<!--<!DOCTYPE html>
<html>
<body>

<video width="320" height="240" controls autoplay>
  <source src="/sdcard/Download/video.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>

</body>
</html>-->

Файл Java:

public class WebActivity extends Activity {
     WebView wv;  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
         setContentView(R.layout.web_activity);  

         wv = (WebView) findViewById(R.id.webview);  
         wv.loadUrl("file:///android_asset/new2.html");
         wv.getSettings().setAllowFileAccess(true);
         wv.getSettings().setJavaScriptEnabled(true);
         wv.getSettings().setPluginsEnabled(true);
        // webview.loadUrl("file:///android_asset/new.html");
    }

}

Файл XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <WebView
        android:id="@+id/webview" 
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>


</LinearLayout>

Ответ 1

Вам нужно вызвать свой файл через локальный файл хоста://localhost/- иначе ваш телефон не узнает, что вы просите разрешения. Используя ваш браузер без локального хостинга, вы отскакиваете от спутника и не можете вернуть его в ре-арену.

Вы получаете элементы управления для отображения, потому что они поступают из общедоступной html-папки, но ваш источник (видео) не делает.

Ответ 2

Из этого блога в нем говорится, что есть два шага:

  • Создайте новый класс, который расширяет ContentProvider и переопределяет по существу 1 метод openFile. Метод onCreate может быть пустым, возвращая true, а остальное может просто переместить UnsupportedOperationException.
  • Добавить запись поставщика в AndroidManifest.xml.

Эта страница показывает, как это сделать, а также следующее:

Шаг 1: объявите свой контент-провайдер в AndroidManifest.xml:

<provider android:name="MyDataContentProvider"
    android:authorities="com.techjini" />
                         ^^^^^^^^^^^ change this

Шаг 2:

Создайте ContentProvider и выполните openFile. Все, что вам нужно сделать, это получить реальный путь от uri, открыть его и вернуть дескриптор

URI uri = URI.create("file:///data/data/com.techjini/files/myImage.jpeg");
                              ^^^^^your path to your file    
File file = new File(uri);
ParcelFileDescriptor parcel =
    ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
return parcel;

Вы можете узнать, где хранится ваше изображение, используя:

System.out.println(getFilesDir().getAbsolutePath());

Теперь вы можете загрузить файл:

myWebView.loadUrl("content://com.techjini/myImage.jpeg");
                             ^^^^^^^^^^^change to same as in manifest

надеюсь, что это поможет.

Ответ 3

Что произойдет, если вы измените "/sdcard/Download/video.mp4" на "файл:///sdcard/Download/video.mp4"? Я имею в виду часть html:

<video width="365" height="200" src="file:///sdcard/Download/video.mp4" controls autobuffer></video>

Я не смог открыть html-страницу в пользовательском веб-приложении. Однако я заметил, что без добавления файла:///видео не будет воспроизводиться в моем браузере Android. (В моем случае, добавив "файл:///", потребовалось некоторое время, прежде чем загрузка начнется.)

Ответ 4

<video width="365" height="200" src="video.mp4" controls autobuffer></video>

а video.mp4 должен находиться в папке с вашими ресурсами, в том же месте, где вы помещаете свой new2.html