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 |
|---|---|---|---|---|
| 2000-2010 | 6BF52A52-394A-11D3-B153-00C04F79FAA6 |
WMP 7, 9, 10, 11, 12 | ✅ Actuel | 🎯 Utiliser pour toutes nouvelles implémentations |
| 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
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
| Cours précédent: Référence de la balise multimédia |
Sommaire de : Tutoriel multimédia complet |
Cours suivant: Référence MIME |