You're experiencing video playback issues in your desktop PWA (Chrome/Chromium on Linux/KDE) where audio plays but video doesn't display. This is NOT a DRM issue but rather a combination of codec support, hardware acceleration, and PWA-specific limitations.
- Desktop PWAs running in "standalone" mode have different codec support than regular browser tabs
- Linux systems often lack proprietary codecs (H.264, H.265) by default
- PWAs may not have access to system-wide codec installations
- Desktop PWAs may not have access to hardware video decoding
- Software-only video decoding can fail while audio (less intensive) works fine
- GPU acceleration might be disabled in standalone PWA mode
- PWAs have stricter Content Security Policy (CSP) restrictions
- Blob URLs for encrypted video content may face additional security barriers
- Linux distributions often ship without proprietary video codecs
- Common missing codecs: H.264, H.265, proprietary AAC variants
import { detectVideoCodecSupport, generateVideoDiagnosticReport } from '$lib/utils/video-diagnostics.js';
// Check what codecs are supported
const support = await detectVideoCodecSupport();
console.log('Supported codecs:', support.supported);
// Generate full diagnostic report
const report = await generateVideoDiagnosticReport();
console.log('Recommendations:', report.recommendations);Features:
- Detects supported video/audio codecs
- Checks hardware acceleration availability
- Identifies PWA vs browser context
- Provides specific recommendations for your system
PWA-Specific Optimizations:
- Hardware acceleration hints (
transform: translateZ(0)) - Automatic retry mechanism on playback failure
- Comprehensive error reporting with diagnostics
- Fallback download options
Usage:
<EnhancedVideoPlayer
src={videoUrl}
mimeType="video/mp4"
filename="video.mp4"
onError={(e) => console.error('Video error:', e)}
/>Enhanced video handling in chat:
- Automatic retry on video errors
- Better error messages with download fallbacks
- PWA-optimized video attributes
- Hardware acceleration enablement
# Ubuntu/Debian
sudo apt update
sudo apt install ubuntu-restricted-extras
# Or more comprehensive:
sudo apt install ffmpeg gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav
# Fedora
sudo dnf install gstreamer1-plugins-bad-free gstreamer1-plugins-bad-nonfree gstreamer1-plugins-ugly
# Arch Linux
sudo pacman -S gst-plugins-bad gst-plugins-ugly gst-libav# Launch Chrome/Chromium with hardware acceleration flags
google-chrome --enable-features=VaapiVideoDecoder --use-gl=desktop --enable-gpu-rasterization
# Or add to your PWA launcher:
google-chrome --app=https://your-pwa-url.com --enable-features=VaapiVideoDecoderNavigate to chrome://flags/ and enable:
#enable-gpu-rasterization#enable-zero-copy#enable-hardware-overlays
Update your static/manifest.json:
{
"name": "QryptChat - Quantum-Resistant Messaging",
"display": "standalone",
"start_url": "/?source=pwa",
"permissions": ["camera", "microphone"],
"file_handlers": [
{
"action": "/",
"accept": {
"video/*": [".mp4", ".webm", ".ogg"]
}
}
]
}- WebM VP8 - Best PWA support, open source
- WebM VP9 - Good quality, modern browsers
- MP4 H.264 - Widely supported but may need codecs
- WebM AV1 - Future-proof but limited support
- H.265/HEVC (limited Linux support)
- Proprietary formats requiring DRM
- High bitrate 4K videos (software decoding issues)
import { generateVideoDiagnosticReport } from '$lib/utils/video-diagnostics.js';
const report = await generateVideoDiagnosticReport();
console.log('PWA Mode:', report.environment.isPWA);
console.log('Codec Support:', report.codecSupport);
console.log('Hardware Acceleration:', report.hardwareAcceleration);import { testVideoPlayback } from '$lib/utils/video-diagnostics.js';
const formats = [
'https://sample-videos.com/zip/10/mp4/SampleVideo_1280x720_1mb.mp4',
'https://sample-videos.com/zip/10/webm/SampleVideo_1280x720_1mb.webm'
];
for (const url of formats) {
const result = await testVideoPlayback(url);
console.log(`${url}: Video=${result.hasVideo}, Audio=${result.hasAudio}`);
}Look for errors like:
"Format error"- Codec not supported"Network error"- Loading issues"Decode error"- Hardware/software decoding failure
- Open DevTools (F12)
- Go to "Media" tab
- Play a video and check for:
- Decoder information
- Hardware acceleration status
- Error messages
# Check available GStreamer plugins
gst-inspect-1.0 | grep -i video
# Test video playback directly
gst-play-1.0 /path/to/video.mp4
# Check hardware acceleration
vainfo # For Intel/AMD
nvidia-smi # For NVIDIAYour issue is NOT DRM-related because:
- DRM (Digital Rights Management) would block ALL playback, including audio
- DRM requires specific APIs (EME/Widevine) that show different error messages
- Your encrypted files use client-side encryption, not DRM
DRM would be needed for:
- Netflix, Disney+, Amazon Prime content
- Protected streaming services
- Content with
encryptedmedia source extensions
<video
preload="metadata"
playsinline
webkit-playsinline
style="transform: translateZ(0)"
>// Revoke blob URLs when done to free memory
const mediaUrl = URL.createObjectURL(blob);
// ... use mediaUrl
URL.revokeObjectURL(mediaUrl);// Load video metadata first, then full video on user interaction
video.preload = 'metadata';
video.addEventListener('canplay', () => {
// Video is ready to play
});- Adaptive Streaming: Implement different quality levels based on connection
- Format Detection: Automatically serve best format for user's system
- Offline Caching: Cache frequently accessed videos for PWA offline use
- Background Processing: Pre-process videos to optimal formats
| Format | Chrome PWA | Firefox PWA | Safari PWA | Linux Support |
|---|---|---|---|---|
| WebM VP8 | ✅ | ✅ | ❌ | ✅ |
| WebM VP9 | ✅ | ✅ | ❌ | ✅ |
| MP4 H.264 | ✅ | |||
| WebM AV1 | ✅ | ✅ | ❌ | ✅ |
*Requires system codecs installation
Your video playback issue is primarily due to missing video codecs on Linux and PWA-specific limitations. The solutions provided include:
- Immediate fixes: Install system codecs and enable hardware acceleration
- Code improvements: Enhanced video player with diagnostics and retry logic
- Format optimization: Use WebM formats for better Linux/PWA compatibility
- Debugging tools: Comprehensive diagnostics to identify specific issues
The enhanced video player and diagnostics utility will help identify the exact cause of playback failures and provide users with actionable solutions.