基础概念与实现方式
HTML本身无法直接从服务器获取数据,需结合其他技术(如JavaScript、后端接口)实现视频数据的动态加载,核心流程为:前端发送请求 → 服务器返回视频数据 → 前端接收并渲染。
<video>
直接通过src
属性指定视频URL
视频资源固定、无需动态加载
<video src="https://example.com/video.mp4" controls></video>
动态请求视频数据(动态方式)
需通过JavaScript向服务器发送请求,获取视频地址或二进制数据,再赋值给<video>
元素。
步骤分解:
- 后端提供接口:如
/api/getVideo?id=123
,返回视频URL或二进制数据。 - 前端发起请求:
fetch('/api/getVideo?id=123') .then(response => response.blob()) // 或`.json()`获取URL .then(data => { const videoUrl = URL.createObjectURL(data); // 转换为本地URL const video = document.querySelector('video'); video.src = videoUrl; });
- 渲染视频:将获取的数据绑定到
<video>
流媒体协议与高级方案
HLS/DASH流媒体
协议 | 说明 | 优势 |
---|---|---|
HLS (HTTP Live Streaming) | 将视频分片为.ts 文件,通过.m3u8 索引文件管理 |
兼容浏览器(Safari/iOS)、支持自适应码率 |
DASH (Dynamic Adaptive Streaming) | 基于MPEG-DASH标准,分片为.mp4 |
更通用,但浏览器支持有限 |
实现步骤:
- 后端生成
.m3u8
和分片文件。 - 前端直接引用
.m3u8
链接:<video src="https://example.com/stream.m3u8" controls></video>
WebRTC实时传输
适用于实时视频(如直播、视频会议),需配合信令服务器和STUN/TURN服务。
Access-Control-Allow-Origin
头.mp4
(H.264编码),提供多种格式备选preload="none"
延迟加载,或<source>
标签指定备选格式完整示例代码(动态获取MP4)
<video id="myVideo" controls></video> <script> fetch('/api/getVideo?id=123') .then(response => response.blob()) .then(blob => { const url = URL.createObjectURL(blob); document.getElementById('myVideo').src = url; }) .catch(err => console.error(err)); </script>
相关问题与解答
问题1:如何实现视频的自动播放?
解答:
需满足以下条件:
- 添加
autoplay
属性:<video autoplay>
。 - 静音以避免浏览器阻止(部分浏览器要求):
<video autoplay muted>
。 - 禁用用户交互前的自动播放(如iOS):需监听
touchstart
事件后启动播放。
问题2:如何处理不同浏览器的视频格式兼容?
解答:
<video>
<source src="video.mp4" type="video/mp4">
<source src="video.webm" type="video/webm">
抱歉,您的浏览器不支持视频播放。
</video>