Playing MP4 video in WebView using HTML5 in Android

To play MP4 videos in Android WebView using HTML5, you need to enable JavaScript, DOM storage, and configure proper video handling. This requires both Android configuration and HTML5 video implementation.

Android WebView Configuration

First, configure your WebView settings to support HTML5 video playback:

// Enable JavaScript and DOM storage
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webSettings.setAllowFileAccess(true);
webSettings.setAllowContentAccess(true);
webSettings.setMediaPlaybackRequiresUserGesture(false);

// Enable hardware acceleration
webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);

HTML5 Video Implementation

Create an HTML page with HTML5 video element to play MP4 files:

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        video {
            width: 100%;
            height: auto;
        }
    </style>
</head>
<body>
    <video id="myVideo" controls>
        <source src="file:///android_asset/video.mp4" type="video/mp4">
        Your browser does not support the video tag.
    </video>
    
    <script>
        const video = document.getElementById('myVideo');
        
        video.addEventListener('loadstart', function() {
            console.log('Video loading started');
        });
        
        video.addEventListener('canplay', function() {
            console.log('Video can start playing');
        });
        
        video.addEventListener('error', function(e) {
            console.log('Video error:', e);
        });
    </script>
</body>
</html>

Android Manifest Permissions

Add necessary permissions in your AndroidManifest.xml:

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

<application
    android:hardwareAccelerated="true"
    android:usesCleartextTraffic="true">
    
    <activity android:name=".MainActivity"
        android:configChanges="orientation|screenSize" />
        
</application>

Loading Video in WebView

Load the HTML content in your WebView:

// Load HTML string
String htmlContent = "your HTML content here";
webView.loadDataWithBaseURL("file:///android_asset/", htmlContent, "text/html", "UTF-8", null);

// Or load from assets
webView.loadUrl("file:///android_asset/video_player.html");

// For external URLs
webView.loadUrl("https://example.com/video.html");

Video Source Options

Source Type Path Format Use Case
Assets folder file:///android_asset/video.mp4 Bundled with app
External storage file:///storage/emulated/0/video.mp4 User downloads
Online URL https://example.com/video.mp4 Streaming content

Common Issues and Solutions

Handle common video playback issues:

// Check video support
function checkVideoSupport() {
    const video = document.createElement('video');
    const canPlay = video.canPlayType('video/mp4');
    
    if (canPlay === 'probably' || canPlay === 'maybe') {
        console.log('MP4 supported');
        return true;
    } else {
        console.log('MP4 not supported');
        return false;
    }
}

// Retry loading on error
video.addEventListener('error', function() {
    console.log('Retrying video load...');
    setTimeout(() => {
        video.load();
    }, 2000);
});

Conclusion

Playing MP4 videos in Android WebView requires proper WebView configuration, HTML5 video implementation, and appropriate permissions. Use assets folder for bundled videos or external URLs for streaming content.

Updated on: 2026-03-15T23:18:59+05:30

1K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements