4

I was used the below code for playing video in android WebView which contains a , I have placed the the video and the poster image in asset folder.

vWebview = (WebView)findViewById(R.id.VWebview);
vWebview.getSettings().setJavaScriptEnabled(true);
vWebview.getSettings().setPluginsEnabled(true);

ViewContent(raw);   


InputStream fileStream = getResources().openRawResource(R.raw.test); 
int fileLen = fileStream.available();
byte[] fileBuffer = new byte[fileLen]; 
fileStream.read(fileBuffer); 
fileStream.close(); 
String displayText = new String(fileBuffer);
vWebview.loadDataWithBaseURL("fake://not/needed", displayText, "text/html", "utf-8", "");

The html file is like that:

<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Hello World</title>


<body>
<div>

<p>
<video src="file:///android_asset/bigbuck.m4v" poster="file:///android_asset/test.jpg" onclick="this.play();"/>
</p>

</div>
</body>
</html>

It is working fine. the poster image is showing properly, as soon as I am clicking it is giving error:

05-12 10:24:22.207: ERROR/http(2882): Null or empty value for header "Host"
05-12 10:24:22.207: ERROR/webcoreglue(2882): *** Uncaught exception returned from Java call!
05-12 10:24:22.262: ERROR/AndroidRuntime(2882): Uncaught handler: thread WebViewCoreThread exiting due to uncaught exception
05-12 10:24:22.262: ERROR/AndroidRuntime(2882): java.lang.RuntimeException: Null or empty value for header "Host"
05-12 10:24:22.262: ERROR/AndroidRuntime(2882):     at android.net.http.Request.addHeader(Request.java:161)
05-12 10:24:22.262: ERROR/AndroidRuntime(2882):     at android.net.http.Request.<init>(Request.java:126)
05-12 10:24:22.262: ERROR/AndroidRuntime(2882):     at android.net.http.RequestQueue.queueRequest(RequestQueue.java:359)
05-12 10:24:22.262: ERROR/AndroidRuntime(2882):     at android.net.http.RequestQueue.queueRequest(RequestQueue.java:327)
05-12 10:24:22.262: ERROR/AndroidRuntime(2882):     at android.webkit.HTML5VideoViewProxy$PosterDownloader.start(HTML5VideoViewProxy.java:275)
05-12 10:24:22.262: ERROR/AndroidRuntime(2882):     at android.webkit.HTML5VideoViewProxy.loadPoster(HTML5VideoViewProxy.java:490)
05-12 10:24:22.262: ERROR/AndroidRuntime(2882):     at android.webkit.WebViewCore.nativeTouchUp(Native Method)
05-12 10:24:22.262: ERROR/AndroidRuntime(2882):     at android.webkit.WebViewCore.access$3400(WebViewCore.java:48)
05-12 10:24:22.262: ERROR/AndroidRuntime(2882):     at android.webkit.WebViewCore$EventHub$1.handleMessage(WebViewCore.java:1095)
05-12 10:24:22.262: ERROR/AndroidRuntime(2882):     at android.os.Handler.dispatchMessage(Handler.java:99)
05-12 10:24:22.262: ERROR/AndroidRuntime(2882):     at android.os.Looper.loop(Looper.java:123)
05-12 10:24:22.262: ERROR/AndroidRuntime(2882):     at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:612)
05-12 10:24:22.262: ERROR/AndroidRuntime(2882):     at java.lang.Thread.run(Thread.java:1096)
dev_android
  • 8,698
  • 22
  • 91
  • 148

3 Answers3

2

I placed video files in RAW folder and access video file in default.html file by following code:

  video.src ="android.resource://ProjectPackageAame/raw/bigbuck";
  video.type = "video/mp4";      
  video.load(); 
  video.play();

It playes video like i want. Also added following line in AndroidManifest file.

  android:hardwareAccelerated="true"

Try this - where to place local video files for android webview html5 hybrid app

Community
  • 1
  • 1
Dhananjay C
  • 597
  • 9
  • 34
  • The ".mp4" suffix actually needs to be omitted (like in the example), I couldn't use subfolders inside the raw folder and I couldn't use filenames with special characters. – Twilite Jun 23 '14 at 09:26
  • @Twilite , you mean to say- ".mp4" video file is not working ? – Dhananjay C Jun 23 '14 at 11:04
  • Yes @Dhananjay `video.src ="android.resource://ProjectPackageAame/raw/bigbuck";` works, while `video.src ="android.resource://ProjectPackageAame/raw/bigbuck.mp4";` doesn't (Assuming the filename is `bigbuck.mp4`) – Twilite Jun 23 '14 at 11:27
  • 1
    Yeah! Ok , i misunderstood your comment. It gets file extension by its video type. So no need to add file extension at video src. – Dhananjay C Jun 23 '14 at 11:31
1

According to http://html5test.com/compare/browser/android40.html, Android 4.0 supports the video element, but it doesn't support embedding MP4, H.264, or Ogg videos. I have also tried to create a PhoneGap Android app with HTMl5 video, and it wouldn't play the video. The HTML5 is valid, but the Android browser cannot play the videos. Also, your HTML5 video code seems wrong. The W3Schools website has the HTML5 video tag setup like this:

<video width="width" height="height" poster="postersrc.jpg" controls="controls">
    <source src="source.mp4" type="video/mp4" />
    <source src="source.ogg" type="video/ogg" />
    No support for HTML5 video. Sorry!
</video>

It's really confusing how the browser can support the HTML5 video tag without supporting any video types.

gtr123
  • 318
  • 3
  • 5
  • 17
  • Are you loading the above html from a http server or is it local on the device using a file:/// url ? – Maks Oct 04 '12 at 06:03
0

Remove the src atribute from the video tag and make javascript function to play the video.