Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用webview在离线的基于html5的Android应用程序中播放mp4视频?_Android_Html_Video_Webview_Mp4 - Fatal编程技术网

如何使用webview在离线的基于html5的Android应用程序中播放mp4视频?

如何使用webview在离线的基于html5的Android应用程序中播放mp4视频?,android,html,video,webview,mp4,Android,Html,Video,Webview,Mp4,我正在构建一个Android应用程序,它可以离线显示几个html页面,每个页面可能包含一个或两个小型嵌入式mp4视频。最初的html文件用于构建运行没有任何问题的iPhone应用程序。当用户导航到一个新页面时,视频文件应该在没有任何用户交互的情况下开始播放。小型嵌入式视频应自动启动并无限循环。我在Linux Mint 17.2上使用Android Studio 1.3.2,经过反复试验,并仔细尝试我在这里找到的一些建议,我成功地构建了一个应用程序(Android 4.4.2),如下所示: 在An

我正在构建一个Android应用程序,它可以离线显示几个html页面,每个页面可能包含一个或两个小型嵌入式mp4视频。最初的html文件用于构建运行没有任何问题的iPhone应用程序。当用户导航到一个新页面时,视频文件应该在没有任何用户交互的情况下开始播放。小型嵌入式视频应自动启动并无限循环。我在Linux Mint 17.2上使用Android Studio 1.3.2,经过反复试验,并仔细尝试我在这里找到的一些建议,我成功地构建了一个应用程序(Android 4.4.2),如下所示:

在AndroidManifest.xml中,我添加了硬件加速,并允许访问internet:

android:hardwareAccelerated="true"
<uses-permission android:name="android.permission.INTERNET" />
在MainActivity.java中,我添加了WebChromeClient并启用了JavaScript。我防止用户在使用SetMediaPlaybackRequireservesture选项自动播放视频之前必须先触摸:

private WebView mWebView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mWebView = (WebView) findViewById(R.id.activity_main_webview);
    mWebView.setWebChromeClient(new WebChromeClient());

    WebSettings webSettings = mWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setMediaPlaybackRequiresUserGesture(false);

    mWebView.loadUrl("file:///android_asset/www/index.html");
}
在index.html文件中,我有以下几次尝试嵌入电影文件。在我复制到不同文件夹的所有三种情况下,电影都是相同的mp4文件:

<body>
1) Intern mp4, resides in assets/www
  <video id="vid2" width="100%" autoplay loop controls>
    <source src="./mov_bbb.mp4">
  </video>

2) extern SDcard
  <video id="video" width="100%" autoplay loop controls>
     <source src="file:///mnt/sdcard/cmr/mov_bbb.mp4">
  </video>

3) online WWW
  <video id="video" width="100%" autoplay loop controls>
    <source src="http://www.w3schools.com/html/mov_bbb.mp4">
  </video>
</body>
2) 视频自动启动,但不循环。此外,我不希望所有电影文件都位于外部SD卡中:

E/MediaPlayer﹕ Should have subtitle controller already set
W/MediaPlayer﹕ info/warning (3, 0)
3) 在线内容:视频自动启动,但不循环。我不希望应用程序依赖于网络。离线访问是应用程序的重要组成部分

I/MediaPlayer﹕ setDataSource(http://www.w3schools.com/html/mov_bbb.mp4)
E/MediaPlayer﹕ Should have subtitle controller already set
W/MediaPlayer﹕ info/warning (3, 0)

是否有任何原因说明在包中嵌入mp4视频,就像处理图像和html文件一样不起作用?是否有一种使用额外脚本的解决方法,也许可以解决我在构建应用程序时遇到的难题?非常感谢您的帮助。

我想您可以将定位保存视频更改为SD卡

E/MediaPlayer﹕ Should have subtitle controller already set
W/MediaPlayer﹕ info/warning (3, 0)
I/MediaPlayer﹕ setDataSource(http://www.w3schools.com/html/mov_bbb.mp4)
E/MediaPlayer﹕ Should have subtitle controller already set
W/MediaPlayer﹕ info/warning (3, 0)