流媒体概述
流媒体技术是通过网络实时传输音视频内容的技术,具有实时性、按需传输、支持直播/点播和自适应码率等特点。主要流媒体源包括直播源、点播源和混合源。常见协议有基于TCP/HTTP的HLS、DASH,实时传输协议RTMP、SRT,以及WebRTC等。流媒体传输流程包括采集编码、封装推流、服务器处理、分发网络和客户端播放。现代浏览器通过HTML5和JavaScript库支持多种流媒体格式。当前趋势聚焦低延迟
·
一、流媒体概述
流媒体(Streaming Media)是一种通过网络实时传输音视频内容的技术,用户无需下载完整文件即可开始播放,将一连串的多媒体数据压缩后,经过互联网分段发送数据,在互联网上即时传输影音,以供用户观赏。
核心特点:
- 实时性:边下载边播放
- 按需传输:只传输用户观看的部分
- 支持直播和点播
- 自适应码率:根据网络状况动态调整质量
二、流媒体源类型
1. 直播源(Live)
- 实时采集:摄像头、麦克风、屏幕捕捉
- 实时转码:将原始信号转换为流媒体格式
- 典型应用:赛事直播、会议直播、游戏直播
2. 点播源(VOD)
- 预录制文件:MP4、MKV、AVI等格式
- 存储在服务器或CDN
- 典型应用:电影、电视剧、教育视频
3. 混合源
- 时移电视:直播+点播特性
- 网络摄像头:24/7持续流
三、流媒体协议全集
1. 基于TCP/HTTP的协议
HLS(HTTP Live Streaming)
- 开发者:苹果公司
- 端口:80/443
- 特点:
- 将视频切分为小TS文件(通常2-10秒)
- 使用M3U8索引文件
- 支持自适应码率
- 高兼容性,防火墙友好
DASH(Dynamic Adaptive Streaming over HTTP)
- 标准:MPEG-DASH(ISO/IEC 23009-1)
- 特点:
- 国际标准,厂商中立
- 使用MPD(Media Presentation Description)文件
- 支持多种编码格式
- 自适应码率切换更平滑
CMAF(Common Media Application Format)
- 目的:统一HLS和DASH的分段格式
- 特点:减少存储和编码冗余
2. 实时传输协议
RTMP(Real-Time Messaging Protocol)
- 端口:1935(默认),443(RTMPS)
- 特点:
- 低延迟(1-3秒)
- 基于TCP,稳定但可能在高延迟
- 主要用于推流
- Adobe Flash时代主流,现仍用于直播推流
SRT(Secure Reliable Transport)
- 特点:
- 开源的传输协议
- 对抗网络抖动和丢包
- 端到端加密
- 适合不可靠网络环境
RIST(Reliable Internet Stream Transport)
- 特点:专业级可靠传输,兼容现有广播设备
3. Web实时通信协议
WebRTC(Web Real-Time Communication)
- 延迟:<500ms
- 特点:
- 浏览器原生支持
- P2P连接,支持服务器转发(SFU/MCU)
- 使用UDP,低延迟
- 内置音视频编码(VP8/VP9/H.264、Opus)
WHIP(WebRTC HTTP Ingest Protocol)
- 目的:标准化WebRTC推流
- 特点:使用HTTP/HTTPS信令建立WebRTC连接
WHEP(WebRTC HTTP Egress Protocol)
- 目的:标准化WebRTC拉流
4. 传统协议
RTSP/RTP/RTCP
- RTSP(Real Time Streaming Protocol):控制协议,端口554
- RTP(Real-time Transport Protocol):数据传输
- RTCP(RTP Control Protocol):质量控制
- 特点:常用于IP摄像头、监控系统
HDS(HTTP Dynamic Streaming)
- 开发者:Adobe
- 现状:已淘汰
四、流媒体传输全流程
设备端 → 服务端 → 前端的完整过程
[采集端] → [编码] → [封装] → [传输协议] → [服务器] → [转码/切片] → [分发] → [客户端] → [解码播放]
详细步骤:
阶段1:采集与编码
- 采集:摄像头/麦克风/屏幕捕获原始数据
- 编码:
- 视频编码:H.264/AVC、H.265/HEVC、AV1、VP9
- 音频编码:AAC、MP3、Opus
- 编码参数:码率、分辨率、帧率、GOP大小
阶段2:封装与推流
- 封装格式:FLV、TS、MP4、FMP4
- 推流协议:
- RTMP推流到服务器
- SRT推流(长距离传输)
- WebRTC推流(低延迟)
阶段3:服务器处理
输入流 → 转码集群 → 切片/封装 → 输出多协议流
- 转码:多码率适配(1080p、720p、480p等)
- 切片:
- HLS:.ts文件 + .m3u8
- DASH:.m4s文件 + .mpd
- 封装转换:RTMP转HLS/DASH
阶段4:分发网络
- CDN分发:边缘节点缓存内容
- 协议转换:根据客户端需求提供不同协议
阶段5:客户端播放
- 协议选择:根据平台选择最佳协议
- 自适应码率:根据带宽动态切换质量
- 解码渲染:硬件/软件解码,视频渲染
五、流媒体URL格式
1. HLS URL
http(s)://domain.com/path/stream.m3u8
https://cdn.example.com/live/event/index.m3u8
2. DASH URL
http(s)://domain.com/path/stream.mpd
https://cdn.example.com/vod/movie/manifest.mpd
3. RTMP URL
rtmp://server:1935/app/streamkey
rtmps://server:443/app/streamkey
4. WebRTC URL
webrtc://server/stream
# 实际多使用信令服务器协商,而非直接URL
5. RTSP URL
rtsp://username:password@server:554/path
rtsp://192.168.1.100:554/stream1
六、推流 vs 拉流
推流(Pushing Stream)
- 方向:客户端主动发送数据到服务器
- 使用场景:直播主播端、摄像头监控上传
- 常用协议:
- RTMP(主流推流协议)
- SRT(高质量远距离推流)
- RTSP(摄像头推流)
- WebRTC/WHIP(浏览器推流)
拉流(Pulling Stream)
- 方向:客户端从服务器请求获取数据
- 使用场景:观众观看、点播回放
- 常用协议:
- HLS(浏览器、移动端主流)
- DASH(智能电视、跨平台)
- WebRTC/WHEP(低延迟观看)
- RTMP(较少用于拉流)
七、Web浏览器支持的流媒体格式
1. 原生支持(无需插件)
通过<video>标签支持
- MP4:H.264/AAC封装,通用性最好
- WebM:VP8/VP9 + Opus/Vorbis,开源格式
- Ogg:Theora + Vorbis
通过MSE(Media Source Extensions)支持
// 示例:通过MSE播放HLS/DASH
var video = document.getElementById('video');
var mediaSource = new MediaSource();
video.src = URL.createObjectURL(mediaSource);
- 支持格式:
- HLS(需要hls.js库)
- DASH(需要dash.js库)
- fMP4(Fragmented MP4)
原生HLS支持
- Safari:原生支持HLS
- Chrome/Edge:部分支持,但有限制
- Firefox:需通过MSE
2. 需要JavaScript库
| 协议 | 推荐库 | 兼容性 |
|---|---|---|
| HLS | hls.js | Chrome, Firefox, Edge |
| DASH | dash.js | 所有现代浏览器 |
| FLV | flv.js | 通过HTTP-FLV |
| WebRTC | 原生API + 信令服务器 | 所有现代浏览器 |
| RTMP | 不再支持(Flash淘汰) | 无 |
3. 浏览器支持矩阵
| 浏览器 | HLS(原生) | MSE | WebRTC | DASH |
|---|---|---|---|---|
| Chrome | 部分支持 | ✅ | ✅ | 需JS |
| Safari | ✅ | ✅ | ✅ | 需JS |
| Firefox | 否 | ✅ | ✅ | 需JS |
| Edge | 部分支持 | ✅ | ✅ | 需JS |
八、现代流媒体架构示例
直播架构
[主播端]
↓ RTMP/SRT推流
[边缘服务器]
↓ 转码/切片
[源站服务器]
↓ HLS/DASH输出
[CDN网络]
↓ 分发到边缘节点
[观众端]
↓ HTTP拉流播放
WebRTC直播架构
[主播浏览器] --WHIP--> [SFU服务器] <--WHEP-- [观众浏览器]
(WebRTC) (选择性转发) (WebRTC)
九、关键技术和趋势
1. 低延迟技术
- LL-HLS(Low Latency HLS):苹果,延迟2-3秒
- LL-DASH:类似低延迟优化
- WebRTC:<500ms延迟
2. 自适应码率算法
- BOLA:基于Lyapunov优化
- MPC:模型预测控制
- Pensieve:基于机器学习
3. 新兴编码标准
- AV1:开源,高效压缩
- VVC(H.266):下一代高效编码
- LCEVC:低复杂度增强视频编码
4. 云游戏/实时交互
- 低延迟要求:<100ms
- 协议:WebRTC为主
十、实践建议
选择协议的建议:
- Web端直播:HLS(兼容性) + WebRTC(低延迟互动)
- 移动端:HLS(iOS/Android都支持)
- 专业直播推流:RTMP + SRT备份
- 监控系统:RTSP/RTP + 转HLS供Web查看
- 点播系统:DASH(功能丰富)或HLS(简单)
开发工具链:
- 推流工具:OBS Studio、FFmpeg
- 测试工具:VLC、ffplay、streamlink
- 分析工具:Wireshark、浏览器开发者工具
服务端方案:
- 开源:Nginx-rtmp、SRS、Janus(WebRTC)
- 云服务:AWS MediaLive、Azure Media Services、阿里云视频云
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)