2020-07-09 13:42:31
HTML音视频通过<audio>和<video>标签实现,结合<source>提供多格式兼容,并通过属性与JavaScript优化性能和交互。
一、基础标签用法通过<source>标签提供不同格式文件,浏览器按顺序尝试播放首个支持的格式。
type属性需准确指定MIME类型(如audio/mpeg、video/mp4),避免浏览器下载不兼容文件。
预加载优化:preload="metadata"仅加载元数据(时长、尺寸),减少初始带宽消耗。
预加载控制:
preload="none":不预加载,适用于用户可能不播放的媒体。
preload="metadata"(推荐):快速显示播放器信息,平衡性能与体验。
preload="auto":优先预加载,仅用于用户大概率播放的场景(如首屏视频)。
封面图(Poster):
视频加载前或播放前显示静态图片,提升视觉吸引力。
<video controls poster="preview.jpg">...</video>自动播放限制:
浏览器通常阻止带声音的自动播放,需添加muted属性或通过用户交互触发。
<video autoplay muted loop src="bg.mp4"></video>懒加载(Lazy Loading):
使用Intersection Observer API,当媒体进入视口时再加载。
const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { const video = entry.target; video.src = video.dataset.src; observer.unobserve(video); } });});document.querySelectorAll('video[data-src]').forEach(video => observer.observe(video));媒体文件压缩:
使用工具(如FFmpeg)压缩音视频,平衡质量与体积。
示例命令(FFmpeg压缩MP4):ffmpeg -i input.mp4 -vcodec libx264 -crf 28 -acodec aac output.mp4
自动播放失效:
原因:浏览器阻止无用户交互的自动播放。
解决:添加muted属性或通过按钮触发播放。document.getElementById('playBtn').addEventListener('click', () => { document.querySelector('video').play();});
格式不兼容:
原因:浏览器不支持文件格式或编解码器。
解决:提供多格式(如MP4+WebM),并检查编解码器(H.264/VP8)。
跨域(CORS)错误:
原因:媒体文件来自不同域名且未配置CORS头。
解决:服务器添加Access-Control-Allow-Origin头,或通过代理获取文件。
JavaScript控制播放:
常用API:const video = document.getElementById('myVideo');video.play(); // 播放video.pause(); // 暂停video.volume = 0.5; // 设置音量(0-1)video.currentTime = 10; // 跳转到10秒video.addEventListener('ended', () => console.log('播放结束'));video.addEventListener('error', (e) => console.error('错误:', e.target.error.message));
通过合理使用属性、格式组合和JavaScript交互,可显著提升HTML音视频的兼容性与用户体验。