📖 Introduction au multimédia HTML5
HTML5 a révolutionné le multimédia sur le web en introduisant des balises natives pour l'audio, la vidéo, le dessin vectoriel et la graphique interactive.
❌ Avant HTML5
<!-- Utilisation de plugins (Flash, Silverlight) -->
<object type="application/x-shockwave-flash">
<param name="movie" value="video.flv">
</object>
Nécessitait des plugins externes
✅ Avec HTML5
<!-- Balises natives HTML5 -->
<video src="video.mp4" controls></video>
Intégré nativement dans le navigateur
Sans plugin
Fonctionne nativement dans le navigateur
Responsive
S'adapte à tous les écrans
Interactif
Canvas permet des animations temps réel
Contrôle JavaScript
API complète pour la manipulation
🎵 1. L'élément <audio>
La balise <audio> permet d'intégrer des fichiers audio nativement dans une page web.
📝 Syntaxe de base
<audio controls>
<source src="musique.mp3" type="audio/mpeg">
<source src="musique.ogg" type="audio/ogg">
Votre navigateur ne supporte pas l'élément audio.
</audio>
📌 Attributs de <audio>
controls
Affiche les contrôles de lecture (play/pause, volume, progression)
autoplay
Démarre la lecture automatiquement
loop
Répète l'audio en boucle
muted
Démarre en mode muet
preload
Précharge l'audio (none, metadata, auto)
🎵 Formats audio supportés
MP3
type="audio/mpeg"
OGG
type="audio/ogg"
WAV
type="audio/wav"
📝 Exemple : Lecture avec JavaScript
<audio id="monAudio" src="musique.mp3"></audio>
<button onclick="document.getElementById('monAudio').play()">Lire</button>
<button onclick="document.getElementById('monAudio').pause()">Pause</button>
🎬 2. L'élément <video>
La balise <video> permet d'intégrer des vidéos nativement, sans plugins tiers.
📝 Syntaxe de base
<video width="640" height="360" controls>
<source src="video.mp4" type="video/mp4">
<source src="video.webm" type="video/webm">
<track src="sous-titres.vtt" kind="subtitles" srclang="fr" label="Français">
Votre navigateur ne supporte pas la balise vidéo.
</video>
📌 Attributs de <video>
controls
Affiche les contrôles de lecture
width / height
Dimensions de la vidéo
autoplay
Lecture automatique (souvent bloqué)
loop
Lecture en boucle
muted
Vidéo muette (nécessaire pour autoplay)
poster
Image d'aperçu avant lecture
preload
Préchargement (none, metadata, auto)
🎬 Formats vidéo supportés
MP4 (H.264)
type="video/mp4"
WebM
type="video/webm"
OGV
type="video/ogg"
📝 Exemple : Vidéo avec affiche (poster)
<video width="100%" controls poster="https://via.placeholder.com/640x360/2c3e66/white?text=Aperçu">
<source src="https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerBlazes.mp4" type="video/mp4">
</video>
📝 Exemple : Contrôle JavaScript de la vidéo
<video id="maVideo" width="100%">
<source src="video.mp4" type="video/mp4">
</video>
<div>
<button onclick="document.getElementById('maVideo').play()">Play</button>
<button onclick="document.getElementById('maVideo').pause()">Pause</button>
<button onclick="document.getElementById('maVideo').volume += 0.1">Volume +</button>
<button onclick="document.getElementById('maVideo').volume -= 0.1">Volume -</button>
<button onclick="document.getElementById('maVideo').currentTime += 10">+10s</button>
</div>
💡 Cliquez sur "Lire la vidéo" pour voir les contrôles JavaScript en action !
🎨 3. L'élément <canvas>
La balise <canvas> permet de dessiner des graphiques 2D dynamiques via JavaScript. Idéal pour les animations, jeux et visualisations de données.
📝 Syntaxe de base
🎨 Exemples de dessins canvas
📐 1. Rectangle
ctx.fillStyle = '#3498db';
ctx.fillRect(10, 10, 100, 60);
⚪ 2. Cercle
ctx.beginPath();
ctx.arc(100, 50, 40, 0, 2 * Math.PI);
ctx.fillStyle = '#e74c3c';
ctx.fill();
📈 3. Dégradé
const gradient = ctx.createLinearGradient(0,0,200,0);
gradient.addColorStop(0, '#3498db');
gradient.addColorStop(1, '#e74c3c');
ctx.fillStyle = gradient;
ctx.fillRect(0, 0, 200, 80);
✏️ 4. Texte
ctx.font = 'bold 20px Arial';
ctx.fillStyle = '#2c3e66';
ctx.fillText('Canvas', 50, 50);
📝 Exemple : Horloge canvas animée
<canvas id="clock" width="200" height="200"></canvas>
<script>
function drawClock() {
const ctx = document.getElementById('clock').getContext('2d');
const now = new Date();
// Dessiner le cadran, les aiguilles...
requestAnimationFrame(drawClock);
}
drawClock();
</script>
📚 API Canvas principales
Formes
fillRect(), strokeRect(), beginPath(), arc(), fill(), stroke()Couleurs
fillStyle, strokeStyle, createLinearGradient(), createRadialGradient()Texte
fillText(), strokeText(), font, textAlignImages
drawImage(), getImageData(), putImageData()Transformations
translate(), rotate(), scale(), save(), restore()Animations
requestAnimationFrame(), clearRect()🖼️ 4. SVG intégré (Scalable Vector Graphics)
SVG est un format d'image vectoriel qui permet de créer des graphiques scalables (qui ne perdent pas en qualité) directement dans le HTML.
📝 Syntaxe SVG de base
<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg">
<!-- Cercle -->
<circle cx="100" cy="100" r="50" fill="#3498db" stroke="#2c3e66" stroke-width="3"/>
<!-- Rectangle -->
<rect x="50" y="50" width="100" height="100" fill="#e74c3c" opacity="0.5"/>
<!-- Ligne -->
<line x1="20" y1="180" x2="180" y2="20" stroke="#27ae60" stroke-width="2"/>
</svg>
🎨 Exemples SVG
🔵 Cercle
<circle cx="50" cy="50" r="40" fill="#3498db"/>
📦 Rectangle arrondi
<rect x="10" y="10" width="80" height="80" rx="15" fill="#e74c3c"/>
⭐ Étoile
<polygon points="50,10 61,35 90,40..." fill="#f1c40f"/>
🌈 Dégradé
<linearGradient id="grad">
<stop offset="0%" stop-color="#3498db"/>
<stop offset="100%" stop-color="#e74c3c"/>
</linearGradient>
📝 Exemple : SVG animé avec CSS
<style>
.pulse { animation: pulse 2s infinite; }
@keyframes pulse {
0% { transform: scale(1); }
50% { transform: scale(1.2); }
100% { transform: scale(1); }
}
</style>
<svg width="100" height="100">
<circle class="pulse" cx="50" cy="50" r="30" fill="#3498db" transform-origin="50px 50px"/>
</svg>
📝 Exemple complet : Lecteur multimédia personnalisé
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Lecteur multimédia HTML5</title>
<style>
.player { max-width: 800px; margin: 0 auto; background: #f8f9fa; border-radius: 12px; padding: 20px; }
.controls { display: flex; gap: 10px; margin-top: 15px; flex-wrap: wrap; }
button { background: #2c3e66; color: white; border: none; padding: 8px 16px; border-radius: 6px; cursor: pointer; }
.progress-bar { width: 100%; height: 8px; background: #ddd; border-radius: 4px; margin: 15px 0; }
.progress { width: 0%; height: 100%; background: #3498db; border-radius: 4px; transition: width 0.3s; }
</style>
</head>
<body>
<div class="player">
<h2>Lecteur vidéo personnalisé</h2>
<video id="video" width="100%" poster="apercu.jpg">
<source src="video.mp4" type="video/mp4">
</video>
<div class="progress-bar">
<div id="progress" class="progress"></div>
</div>
<div class="controls">
<button onclick="video.play()">▶ Play</button>
<button onclick="video.pause()">⏸ Pause</button>
<button onclick="video.volume += 0.1">🔊 Volume +</button>
<button onclick="video.volume -= 0.1">🔈 Volume -</button>
</div>
</div>
<script>
const video = document.getElementById('video');
video.addEventListener('timeupdate', () => {
const percent = (video.currentTime / video.duration) * 100;
document.getElementById('progress').style.width = percent + '%';
});
</script>
</body>
</html>
📝 Résumé du chapitre
| Élément | Description | Utilisation principale |
|---|---|---|
<audio> |
Audio natif | Musique, podcasts, sons |
<video> |
Vidéo native | Films, tutoriels, clips |
<canvas> |
Graphiques bitmap dynamiques | Animations, jeux, visualisation |
<svg> |
Graphiques vectoriels | Icônes, logos, graphiques scalables |
📌 Quiz de vérification
Question 1 : Quelle balise utilise-t-on pour intégrer une vidéo en HTML5 ?
📖 Voir la réponse
<video>
Question 2 : Quelle est la différence principale entre Canvas et SVG ?
📖 Voir la réponse
Canvas est bitmap (pixels) idéal pour animations complexes ; SVG est vectoriel idéal pour des graphiques scalables (logo, icônes).
Question 3 : Quels attributs peut-on utiliser sur la balise <audio> ?
📖 Voir la réponse
controls, autoplay, loop, muted, preload
Question 4 : Comment accède-t-on au contexte de dessin 2D d'un canvas ?
📖 Voir la réponse
const ctx = canvas.getContext('2d');
Question 5 : Quel format vidéo est supporté par tous les navigateurs ?
📖 Voir la réponse
MP4 (H.264) avec type="video/mp4"