logo oujood
🔍

Référence Complète de Windows Media Player - Guide Technique

Guide technique pour l'intégration web d'ActiveX

OUJOOD.COM

Windows Media Player - Guide Technique


Tutoriel de cours multimédia - Mis à jour 2024

Public cible : Développeurs web, intégrateurs multimédia
Prérequis : Connaissances de base en HTML, JavaScript et ActiveX
Contexte : Maintenance et développement d'applications legacy utilisant Windows Media Player

Windows Media Player est disponible en plusieurs versions avec des identifiants de classe (CLSID) différents. Ce guide technique présente les CLSID, paramètres de configuration, et exemples d'implémentation pour chaque version, ainsi que les alternatives modernes recommandées.


Évolution des Identifiants de Classe (CLSID)

🔄 Migration des CLSID

Période CLSID Versions Statut Recommandation
1999 22D6F312-B0F6-11D0-94AB-0080C74C7E95 WMP 6.4 ⚠️ Legacy ⚡ Compatible mais fonctionnalités limitées
1998 05589FA1-C356-11CE-BF01-00AA0055595A WMP 6 ❌ Obsolète 🚫 Éviter - Support limité

📋 Pourquoi l'ID de classe a-t-il changé ?

L'ID de classe recommandé pour Windows Media Player 7 et ultérieur est :
clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6

💡 Rétrocompatibilité : L'ancien CLSID 22D6F312-B0F6-11D0-94AB-0080C74C7E95 fonctionne encore grâce à la compatibilité ascendante, mais vous ne pourrez pas accéder aux nouvelles fonctionnalités introduites après WMP 6.4.

Versions Supportées

🎯 Windows Media Player 12

CLSID : 6BF52A52-394A-11D3-B153-00C04F79FAA6

Système : Windows 7, 8, 10

Statut : Version actuelle

✅ Windows Media Player 11

CLSID : 6BF52A52-394A-11D3-B153-00C04F79FAA6

Système : Windows XP, Vista

Statut : Supporté

✅ Windows Media Player 10

CLSID : 6BF52A52-394A-11D3-B153-00C04F79FAA6 (identique à WMP7)

Système : Windows XP

✅ Windows Media Player 9

CLSID : 6BF52A52-394A-11D3-B153-00C04F79FAA6 (identique à WMP7)

Système : Windows 98, ME, 2000, XP

✅ Windows Media Player 7

CLSID : 6BF52A52-394A-11D3-B153-00C04F79FAA6

Système : Windows 98, ME, 2000

Note : Introduction du nouveau CLSID

⚠️ Windows Media Player 6.4

CLSID : 22D6F312-B0F6-11D0-94AB-0080C74C7E95

Système : Windows 98, NT 4.0

Statut : Legacy - compatibilité limitée


Configuration - Windows Media Player 6.4

CLSID : 22D6F312-B0F6-11D0-94AB-0080C74C7E95

Cette version propose 57 paramètres configurables organisés par catégories.

Paramètre Valeur par défaut Type Catégorie Description
AudioStream true Boolean 🎵 Audio Active le flux audio
Volume -200 Integer 🎵 Audio Volume en millibels (-10000 à 0)
Mute false Boolean 🎵 Audio Mode silencieux
Balance false Integer 🎵 Audio Balance stéréo (-100 à +100)
AutoSize true Boolean 🎬 Vidéo Ajustement automatique de la taille
DisplaySize false Integer 🎬 Vidéo Taille d'affichage (0=50%, 1=100%, 2=200%)
VideoBorderWidth false Integer 🎬 Vidéo Largeur de la bordure vidéo
VideoBorderColor false Color 🎬 Vidéo Couleur de la bordure vidéo
VideoBorder3D false Boolean 🎬 Vidéo Effet de bordure 3D
WindowlessVideo false Boolean 🎬 Vidéo Rendu vidéo sans fenêtre
AllowChangeDisplaySize true Boolean 🎬 Vidéo Permet le changement de taille d'affichage
TransparentAtStart false Boolean 🎬 Vidéo Transparence au démarrage
ShowControls true Boolean 🎛️ Contrôles Affiche les contrôles de lecture
ShowAudioControls true Boolean 🎛️ Contrôles Affiche les contrôles audio
ShowPositionControls true Boolean 🎛️ Contrôles Affiche les contrôles de position
ShowTracker true Boolean 🎛️ Contrôles Affiche la barre de progression
EnableContextMenu true Boolean 🎛️ Contrôles Active le menu contextuel
EnablePositionControls true Boolean 🎛️ Contrôles Active les contrôles de position
EnableFullScreenControls false Boolean 🎛️ Contrôles Active les contrôles en plein écran
EnableTracker true Boolean 🎛️ Contrôles Active la barre de progression
ClickToPlay true Boolean 🎛️ Contrôles Lecture au clic
ShowDisplay false Boolean 🎛️ Contrôles Affiche les informations
ShowGotoBar false Boolean 🎛️ Contrôles Affiche la barre de navigation
ShowStatusBar false Boolean 🎛️ Contrôles Affiche la barre d'état
AutoStart true Boolean ▶️ Lecture Démarrage automatique
AutoRewind false Boolean ▶️ Lecture Rembobinage automatique
PlayCount 1 Integer ▶️ Lecture Nombre de lectures
Rate 1 Float ▶️ Lecture Vitesse de lecture (0.5 à 2.0)
CurrentPosition true Float ▶️ Lecture Position actuelle en secondes
PreviewMode false Boolean ▶️ Lecture Mode aperçu
SelectionStart true Float ▶️ Lecture Début de sélection (secondes)
SelectionEnd true Float ▶️ Lecture Fin de sélection (secondes)
SendPlayStateChangeEvents true Boolean ⚡ Événements Envoie les événements de changement d'état
SendErrorEvents true Boolean ⚡ Événements Envoie les événements d'erreur
SendWarningEvents true Boolean ⚡ Événements Envoie les événements d'avertissement
SendOpenStateChangeEvents true Boolean ⚡ Événements Envoie les événements d'ouverture
SendKeyboardEvents false Boolean ⚡ Événements Envoie les événements clavier
SendMouseClickEvents false Boolean ⚡ Événements Envoie les événements de clic souris
SendMouseMoveEvents false Boolean ⚡ Événements Envoie les événements de mouvement souris
DisplayMode false Integer 📺 Affichage Mode d'affichage (0=temps, 1=frames)
DisplayBackColor false Color 📺 Affichage Couleur d'arrière-plan
DisplayForeColor 16777215 Color 📺 Affichage Couleur de premier plan (RGB)
AnimationAtStart true Boolean 📺 Affichage Animation au démarrage
ShowCaptioning false Boolean 📺 Affichage Affiche les sous-titres
CaptioningID "" String 📺 Affichage ID des sous-titres
CursorType false Integer 📺 Affichage Type de curseur
DefaultFrame "" String 📺 Affichage Image par défaut
CurrentMarker false Integer 📺 Affichage Marqueur actuel
Language true String 📺 Affichage Langue d'interface
Filename URL String 🔧 Autres URL du fichier multimédia
BaseURL "" String 🔧 Autres URL de base pour les liens relatifs
BufferingTime 5 Integer 🔧 Autres Temps de mise en mémoire tampon (secondes)
InvokeURLs true Boolean 🔧 Autres Permet l'ouverture d'URLs
AllowScan true Boolean 🔧 Autres Permet l'avance/recul rapide
Enabled true Boolean 🔧 Autres Active le contrôle
SAMILang "" String 🔧 Autres Langue SAMI pour les sous-titres
SAMIStyle "" String 🔧 Autres Style SAMI pour les sous-titres
SAMIFileName "" String 🔧 Autres Fichier SAMI de sous-titres

Configuration - Windows Media Player 6 (Version Legacy)

⚠️ Version obsolète

CLSID : 05589FA1-C356-11CE-BF01-00AA0055595A

Statut : Support limité - Non recommandé pour nouveaux projets

Cette version propose 25 paramètres avec des différences notables par rapport à WMP 6.4.

Paramètre Valeur par défaut Type Différence vs 6.4 Description
AutoStart false Boolean ❗ Différent (6.4: true) Démarrage automatique désactivé par défaut
AutoRewind true Boolean ❗ Différent (6.4: false) Rembobinage automatique activé
ShowPositionControls False Boolean ❗ Différent (6.4: true) Contrôles de position masqués
ShowDisplay True Boolean ❗ Différent (6.4: false) Affichage d'informations activé
CurrentPosition false Float ❗ Différent (6.4: true) Position actuelle non affichée
Appearance false Integer 🆕 Spécifique à v6 Style d'apparence du contrôle
AllowChangeDisplayMode true Boolean 🆕 Spécifique à v6 Permet le changement de mode d'affichage
AllowHideDisplay false Boolean 🆕 Spécifique à v6 Permet de masquer l'affichage
AllowHideControls true Boolean 🆕 Spécifique à v6 Permet de masquer les contrôles
EnableSelectionControls false Boolean 🆕 Spécifique à v6 Active les contrôles de sélection
FullScreenMode false Boolean 🆕 Spécifique à v6 Mode plein écran
MovieWindowSize false Integer 🆕 Spécifique à v6 Taille de la fenêtre vidéo
Balance false Integer ✅ Identique Balance stéréo
DisplayBackColor false Color ✅ Identique Couleur d'arrière-plan
DisplayForeColor 16777215 Color ✅ Identique Couleur de premier plan (blanc)
DisplayMode false Integer ✅ Identique Mode d'affichage
Enabled true Boolean ✅ Identique Active le contrôle
EnableContextMenu true Boolean ✅ Identique Active le menu contextuel
EnablePositionControls true Boolean ✅ Identique Active les contrôles de position
EnableTracker true Boolean ✅ Identique Active la barre de progression
Filename "" String ✅ Identique Nom du fichier à lire
PlayCount 1 Integer ✅ Identique Nombre de lectures
Rate 1 Float ✅ Identique Vitesse de lecture
SelectionStart True Float ✅ Identique Début de sélection
SelectionEnd True Float ✅ Identique Fin de sélection
ShowControls True Boolean ✅ Identique Affiche les contrôles
ShowTracker True Boolean ✅ Identique Affiche la barre de progression
Volume -200 Integer ✅ Identique Volume audio en millibels

Exemples Pratiques d'Intégration

💻 Intégration HTML Basique

Exemple pour WMP 7+ (Recommandé)

Exemple :     📋 Copier le code

	<!-- Windows Media Player 7 et ultérieur -->
<object classid="clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6" 
        width="320" height="240" id="wmpPlayer">
  <param name="URL" value="video.wmv">
  <param name="ShowControls" value="true">
  <param name="AutoStart" value="false">
  <param name="Volume" value="-500">
  <param name="ShowStatusBar" value="true">
  <param name="EnableContextMenu" value="true">
  
  <!-- Fallback pour navigateurs non-IE -->
  <embed src="video.wmv" 
         width="320" height="240" 
         type="application/x-mplayer2"
         showcontrols="true" 
         autostart="false">
</object>

Configuration Avancée avec Sous-titres

Exemple :     📋 Copier le code

<object classid="clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6" 
        width="480" height="360" id="wmpAdvanced">
  <param name="URL" value="presentation.wmv">
  <param name="ShowControls" value="true">
  <param name="ShowStatusBar" value="true">
  <param name="ShowCaptioning" value="true">
  <param name="SAMIFileName" value="subtitles.smi">
  <param name="SAMILang" value="FR">
  <param name="AutoStart" value="false">
  <param name="PlayCount" value="1">
  <param name="Volume" value="-300">
  <param name="Rate" value="1.0">
  <param name="BufferingTime" value="10">
</object>

🔧 Contrôle JavaScript

API JavaScript pour Windows Media Player

Exemple :     📋 Copier le code

// Initialisation du lecteur
function initializePlayer() {
    const player = document.getElementById('wmpPlayer');
    
    // Vérification de la disponibilité
    if (player && player.playState !== undefined) {
        console.log('Windows Media Player détecté');
        setupEventHandlers(player);
    } else {
        console.warn('Windows Media Player non disponible');
        showHTML5Alternative();
    }
}

// Configuration des gestionnaires d'événements
function setupEventHandlers(player) {
    // Événements de changement d'état
    player.attachEvent('PlayStateChange', function(newState) {
        handlePlayStateChange(newState);
    });
    
    // Événements d'erreur
    player.attachEvent('Error', function() {
        console.error('Erreur Windows Media Player:', player.error.errorDescription);
        showErrorMessage(player.error.errorDescription);
    });
}

// Gestion des états de lecture
function handlePlayStateChange(state) {
    const statusElement = document.getElementById('playerStatus');
    
    switch(state) {
        case 0: // Indéfini
            statusElement.textContent = 'État indéfini';
            break;
        case 1: // Arrêté
            statusElement.textContent = '⏹️ Arrêté';
            break;
        case 2: // En pause
            statusElement.textContent = '⏸️ En pause';
            break;
        case 3: // En cours de lecture
            statusElement.textContent = '▶️ Lecture en cours';
            updateProgress();
            break;
        case 6: // Mise en mémoire tampon
            statusElement.textContent = '⏳ Chargement...';
            break;
        case 9: // En transition
            statusElement.textContent = '🔄 Transition...';
            break;
        case 10: // Prêt
            statusElement.textContent = '✅ Prêt';
            break;
    }
}

// Contrôles programmatiques
const PlayerControls = {
    play: function() {
        const player = document.getElementById('wmpPlayer');
        player.controls.play();
    },
    
    pause: function() {
        const player = document.getElementById('wmpPlayer');
        player.controls.pause();
    },
    
    stop: function() {
        const player = document.getElementById('wmpPlayer');
        player.controls.stop();
    },
    
    setVolume: function(volume) {
        const player = document.getElementById('wmpPlayer');
        // Volume: 0 (silencieux) à 100 (maximum)
        player.settings.volume = Math.max(0, Math.min(100, volume));
    },
    
    setPosition: function(seconds) {
        const player = document.getElementById('wmpPlayer');
        player.controls.currentPosition = seconds;
    },
    
    getInfo: function() {
        const player = document.getElementById('wmpPlayer');
        return {
            duration: player.currentMedia.duration,
            position: player.controls.currentPosition,
            volume: player.settings.volume,
            state: player.playState,
            url: player.URL
        };
    }
};

// Mise à jour de la progression
function updateProgress() {
    const player = document.getElementById('wmpPlayer');
    const progressBar = document.getElementById('customProgress');
    
    if (player && progressBar && player.currentMedia) {
        const duration = player.currentMedia.duration;
        const position = player.controls.currentPosition;
        const percentage = (position / duration) * 100;
        
        progressBar.style.width = percentage + '%';
        
        // Mise à jour de l'affichage du temps
        const timeDisplay = document.getElementById('timeDisplay');
        if (timeDisplay) {
            timeDisplay.textContent = formatTime(position) + ' / ' + formatTime(duration);
        }
    }
}

// Formatage du temps
function formatTime(seconds) {
    const minutes = Math.floor(seconds / 60);
    const secs = Math.floor(seconds % 60);
    return minutes + ':' + (secs < 10 ? '0' : '') + secs;
}

// Alternative HTML5
function showHTML5Alternative() {
    const container = document.getElementById('playerContainer');
    const html5Player = `
        <video controls width="320" height="240">
            <source src="video.mp4" type="video/mp4">
            <source src="video.webm" type="video/webm">
            <p>Votre navigateur ne supporte pas la balise video.</p>
        </video>
    `;
    container.innerHTML = html5Player;
}

// Initialisation au chargement de la page
document.addEventListener('DOMContentLoaded', initializePlayer);

🎨 Interface Utilisateur Personnalisée

Contrôles personnalisés avec CSS/JS

Exemple :     📋 Copier le code

<div class="custom-player-container">
  <object classid="clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6" 
          width="480" height="360" id="wmpCustom">
    <param name="URL" value="video.wmv">
    <param name="ShowControls" value="false">
    <param name="AutoStart" value="false">
  </object>
  
  <div class="custom-controls">
    <button onclick="PlayerControls.play()" class="btn-play">▶️</button>
    <button onclick="PlayerControls.pause()" class="btn-pause">⏸️</button>
    <button onclick="PlayerControls.stop()" class="btn-stop">⏹️</button>
    
    <div class="progress-container">
      <div class="progress-bar">
        <div id="customProgress" class="progress"></div>
      </div>
      <span id="timeDisplay">0:00 / 0:00</span>
    </div>
    
    <div class="volume-container">
      <label>🔊</label>
      <input type="range" min="0" max="100" value="70" 
             onchange="PlayerControls.setVolume(this.value)">
    </div>
  </div>
  
  <div id="playerStatus" class="status">Prêt</div>
</div>

Guide de Migration

📈 Stratégie de Migration

🔍 Étape 1 : Audit

  • Identifier les pages utilisant Windows Media Player
  • Recenser les CLSID utilisés
  • Lister les paramètres critiques
  • Tester la compatibilité navigateur

⚡ Étape 2 : Migration Immédiate

  • Remplacer les anciens CLSID par 6BF52A52-394A-11D3-B153-00C04F79FAA6
  • Corriger les paramètres obsolètes
  • Ajouter des fallbacks pour navigateurs non-IE
  • Implémenter la détection de compatibilité

🚀 Étape 3 : Modernisation

  • Développer l'alternative HTML5
  • Convertir les médias vers des formats web (MP4, WebM)
  • Implémenter la détection progressive
  • Tester sur tous les navigateurs cibles

✅ Étape 4 : Validation

  • Tests d'acceptation utilisateur
  • Vérification des performances
  • Validation de l'accessibilité
  • Documentation mise à jour

🔄 Script de Migration Automatique

Exemple :     📋 Copier le code

// Script de migration automatique WMP vers HTML5
class MediaPlayerMigrator {
    constructor() {
        this.isIE = this.detectIE();
        this.hasActiveX = this.detectActiveX();
        this.modernBrowser = this.detectModernBrowser();
    }
    
    // Détection d'Internet Explorer
    detectIE() {
        return navigator.userAgent.indexOf('MSIE') !== -1 || 
               navigator.userAgent.indexOf('Trident') !== -1;
    }
    
    // Détection du support ActiveX
    detectActiveX() {
        try {
            return typeof ActiveXObject !== 'undefined' || 'ActiveXObject' in window;
        } catch(e) {
            return false;
        }
    }
    
    // Détection navigateur moderne
    detectModernBrowser() {
        return !!(document.createElement('video').canPlayType);
    }
    
    // Migration principale
    migratePlayer(containerId) {
        const container = document.getElementById(containerId);
        if (!container) return;
        
        const wmpObject = container.querySelector('object[classid*="394A-11D3"]');
        if (!wmpObject) return;
        
        const config = this.extractWMPConfig(wmpObject);
        
        if (this.shouldUseHTML5()) {
            this.createHTML5Player(container, config);
        } else if (this.shouldUpgradeWMP()) {
            this.upgradeWMPPlayer(wmpObject, config);
        }
    }
    
    // Extraction de la configuration WMP
    extractWMPConfig(wmpObject) {
        const params = wmpObject.querySelectorAll('param');
        const config = {
            url: '',
            autostart: false,
            controls: true,
            width: wmpObject.width || 320,
            height: wmpObject.height || 240
        };
        
        params.forEach(param => {
            const name = param.name.toLowerCase();
            const value = param.value;
            
            switch(name) {
                case 'url':
                case 'filename':
                    config.url = value;
                    break;
                case 'autostart':
                    config.autostart = value.toLowerCase() === 'true';
                    break;
                case 'showcontrols':
                    config.controls = value.toLowerCase() === 'true';
                    break;
            }
        });
        
        return config;
    }
    
    // Décision d'utiliser HTML5
    shouldUseHTML5() {
        return this.modernBrowser && !this.isIE;
    }
    
    // Décision de mettre à jour WMP
    shouldUpgradeWMP() {
        return this.isIE && this.hasActiveX;
    }
    
    // Création du lecteur HTML5
    createHTML5Player(container, config) {
        const videoUrl = this.convertToHTML5Format(config.url);
        
        const html5Player = `
            <video ${config.controls ? 'controls' : ''} 
                   ${config.autostart ? 'autoplay' : ''}
                   width="${config.width}" 
                   height="${config.height}"
                   class="migrated-player">
                <source src="${videoUrl.mp4}" type="video/mp4">
                <source src="${videoUrl.webm}" type="video/webm">
                <p>Votre navigateur ne supporte pas la lecture vidéo HTML5.</p>
            </video>
        `;
        
        container.innerHTML = html5Player;
        this.logMigration('HTML5', config.url);
    }
    
    // Mise à jour du lecteur WMP
    upgradeWMPPlayer(wmpObject, config) {
        // Mettre à jour le CLSID vers la version moderne
        const currentClsid = wmpObject.classid;
        if (currentClsid.indexOf('22D6F312') !== -1) {
            wmpObject.classid = 'clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6';
            this.logMigration('WMP_UPGRADE', config.url);
        }
    }
    
    // Conversion vers formats HTML5
    convertToHTML5Format(wmvUrl) {
        const baseName = wmvUrl.replace(/\.[^/.]+$/, '');
        return {
            mp4: baseName + '.mp4',
            webm: baseName + '.webm'
        };
    }
    
    // Logging des migrations
    logMigration(type, url) {
        console.log(`[MediaPlayerMigrator] ${type} migration completed for: ${url}`);
        
        // Optionnel : envoyer des analytics
        if (typeof gtag !== 'undefined') {
            gtag('event', 'media_migration', {
                'migration_type': type,
                'media_url': url
            });
        }
    }
}

// Utilisation automatique
document.addEventListener('DOMContentLoaded', function() {
    const migrator = new MediaPlayerMigrator();
    
    // Migrer tous les conteneurs de lecteur
    const playerContainers = document.querySelectorAll('[id*="player"], [class*="wmp"]');
    playerContainers.forEach(container => {
        migrator.migratePlayer(container.id || container.className);
    });
});

🌟 Alternative HTML5 Moderne

💡 Pourquoi Migrer vers HTML5 ?

🌐 Compatibilité Universelle

Fonctionne sur tous les navigateurs modernes sans plugin

📱 Responsive

S'adapte automatiquement aux mobiles et tablettes

🔒 Sécurité

Pas de vulnérabilités ActiveX, sandboxé par le navigateur

⚡ Performance

Accélération matérielle native, moins de ressources

🔄 Table de Correspondance WMP → HTML5

Fonctionnalité WMP Paramètre WMP Équivalent HTML5 Exemple
Démarrage automatique AutoStart="true" autoplay <video autoplay>
Contrôles visibles ShowControls="true" controls <video controls>
Lecture en boucle PlayCount="-1" loop <video loop>
Mode silencieux Mute="true" muted <video muted>
Image de prévisualisation DefaultFrame poster <video poster="thumb.jpg">
Sous-titres SAMIFileName <track> <track src="subtitles.vtt">

🛠️ Exemple de Migration Complète

❌ Ancien Code WMP

Exemple :     📋 Copier le code

<object classid="clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6" 
        width="640" height="480">
  <param name="URL" value="presentation.wmv">
  <param name="AutoStart" value="false">
  <param name="ShowControls" value="true">
  <param name="ShowStatusBar" value="true">
  <param name="Volume" value="-300">
  <param name="ShowCaptioning" value="true">
  <param name="SAMIFileName" value="subtitles.smi">
</object>

✅ Nouveau Code HTML5

Exemple :     📋 Copier le code

<video width="640" height="480" controls preload="metadata" 
       poster="presentation-thumbnail.jpg">
  
  <!-- Sources multiples pour compatibilité -->
  <source src="presentation.mp4" type="video/mp4">
  <source src="presentation.webm" type="video/webm">
  <source src="presentation.ogv" type="video/ogg">
  
  <!-- Sous-titres WebVTT -->
  <track src="subtitles-fr.vtt" kind="subtitles" srclang="fr" label="Français" default>
  <track src="subtitles-en.vtt" kind="subtitles" srclang="en" label="English">
  
  <!-- Message de fallback -->
  <p>Votre navigateur ne supporte pas la balise video HTML5.
     <a href="presentation.mp4">Télécharger la vidéo</a></p>
</video>

🎛️ Contrôles JavaScript Avancés

Exemple :     📋 Copier le code

// API HTML5 Video moderne
class HTML5VideoPlayer {
    constructor(videoElement) {
        this.video = videoElement;
        this.setupEventListeners();
    }
    
    setupEventListeners() {
        this.video.addEventListener('loadstart', () => {
            console.log('Chargement démarré');
        });
        
        this.video.addEventListener('canplay', () => {
            console.log('Prêt à jouer');
        });
        
        this.video.addEventListener('timeupdate', () => {
            this.updateProgress();
        });
        
        this.video.addEventListener('ended', () => {
            console.log('Lecture terminée');
        });
        
        this.video.addEventListener('error', (e) => {
            console.error('Erreur vidéo:', e);
        });
    }
    
    // Contrôles programmatiques
    play() {
        return this.video.play().catch(error => {
            console.error('Erreur lecture:', error);
        });
    }
    
    pause() {
        this.video.pause();
    }
    
    setCurrentTime(seconds) {
        this.video.currentTime = seconds;
    }
    
    setVolume(volume) {
        this.video.volume = Math.max(0, Math.min(1, volume / 100));
    }
    
    setPlaybackRate(rate) {
        this.video.playbackRate = rate;
    }
    
    toggleFullscreen() {
        if (this.video.requestFullscreen) {
            this.video.requestFullscreen();
        } else if (this.video.webkitRequestFullscreen) {
            this.video.webkitRequestFullscreen();
        } else if (this.video.msRequestFullscreen) {
            this.video.msRequestFullscreen();
        }
    }
    
    updateProgress() {
        const progress = (this.video.currentTime / this.video.duration) * 100;
        const progressBar = document.getElementById('customProgressBar');
        if (progressBar) {
            progressBar.style.width = progress + '%';
        }
    }
    
    // Informations sur la vidéo
    getVideoInfo() {
        return {
            duration: this.video.duration,
            currentTime: this.video.currentTime,
            volume: this.video.volume * 100,
            paused: this.video.paused,
            ended: this.video.ended,
            buffered: this.getBufferedRanges(),
            readyState: this.video.readyState
        };
    }
    
    getBufferedRanges() {
        const ranges = [];
        for (let i = 0; i < this.video.buffered.length; i++) {
            ranges.push({
                start: this.video.buffered.start(i),
                end: this.video.buffered.end(i)
            });
        }
        return ranges;
    }
}

// Utilisation
document.addEventListener('DOMContentLoaded', function() {
    const videos = document.querySelectorAll('video');
    videos.forEach(video => {
        new HTML5VideoPlayer(video);
    });
});

🔧 Guide de Dépannage

❌ Problèmes Courants et Solutions

🚫 Le lecteur ne s'affiche pas

Causes possibles :

  • ActiveX désactivé dans le navigateur
  • CLSID incorrect ou obsolète
  • Windows Media Player non installé

Solutions :

Exemple :     📋 Copier le code

// Vérification de disponibilité
function checkWMPAvailability() {
    try {
        const wmp = new ActiveXObject("WMPlayer.OCX");
        console.log("Windows Media Player disponible");
        return true;
    } catch(e) {
        console.warn("Windows Media Player non disponible:", e.message);
        return false;
    }
}

🔇 Pas de son

Vérifications :

  • Paramètre Mute = false
  • Paramètre Volume > -10000
  • Codec audio supporté
  • Volume système activé

Exemple :     📋 Copier le code

// Diagnostic audio
function diagnoseAudio(player) {
    console.log("Volume:", player.settings.volume);
    console.log("Mute:", player.settings.mute);
    console.log("Audio codec:", player.currentMedia.getItemInfo("AudioCodec"));
}

⚠️ Erreur de codec

Message : "Impossible de lire le fichier"

Solutions :

  • Installer les codecs manquants
  • Convertir vers un format supporté
  • Utiliser l'alternative HTML5

🌐 Problèmes de compatibilité navigateur

Navigateur Support ActiveX Recommandation
Internet Explorer 11 ✅ Complet Utiliser WMP
Microsoft Edge Legacy ⚠️ Limité HTML5 de préférence
Microsoft Edge Chromium ❌ Aucun HTML5 uniquement
Chrome, Firefox, Safari ❌ Aucun HTML5 uniquement

🛠️ Outils de Diagnostic

Exemple :     📋 Copier le code

// Outil de diagnostic complet
class WMPDiagnostic {
    static runFullDiagnostic() {
        const report = {
            browser: this.getBrowserInfo(),
            activeX: this.checkActiveXSupport(),
            wmp: this.checkWMPInstallation(),
            codecs: this.checkCodecSupport()
        };
        
        console.table(report);
        return report;
    }
    
    static getBrowserInfo() {
        return {
            userAgent: navigator.userAgent,
            vendor: navigator.vendor,
            cookieEnabled: navigator.cookieEnabled
        };
    }
    
    static checkActiveXSupport() {
        try {
            return typeof ActiveXObject !== "undefined";
        } catch(e) {
            return false;
        }
    }
    
    static checkWMPInstallation() {
        try {
            const wmp = new ActiveXObject("WMPlayer.OCX");
            return {
                installed: true,
                version: wmp.versionInfo
            };
        } catch(e) {
            return {
                installed: false,
                error: e.message
            };
        }
    }
    
    static checkCodecSupport() {
        const testFormats = ['wmv', 'avi', 'mp4', 'mov'];
        const support = {};
        
        testFormats.forEach(format => {
            support[format] = this.canPlayFormat(format);
        });
        
        return support;
    }
    
    static canPlayFormat(format) {
        try {
            const wmp = new ActiveXObject("WMPlayer.OCX");
            // Test simplifié - dans un cas réel, vous devriez tester avec un fichier
            return true;
        } catch(e) {
            return false;
        }
    }
}

// Utilisation
WMPDiagnostic.runFullDiagnostic();

📋 Résumé et Recommandations

🎯 Pour les Nouveaux Projets

  • Utilisez HTML5 video exclusivement
  • Formats recommandés : MP4 (H.264) + WebM
  • Sous-titres au format WebVTT
  • Design responsive natif

⚙️ Pour la Maintenance Legacy

  • CLSID moderne : 6BF52A52-394A-11D3-B153-00C04F79FAA6
  • Ajouter des fallbacks HTML5
  • Planifier la migration progressive
  • Documenter les dépendances ActiveX

🔄 Stratégie de Migration

  • Phase 1: Audit et correction des CLSID
  • Phase 2: Implémentation des fallbacks
  • Phase 3: Migration complète HTML5
  • Phase 4: Suppression du code legacy



Par carabde - Mis à jour le 14 août 2025

Article original du 12 mai 2014, enrichi avec les meilleures pratiques modernes et les alternatives HTML5.