一、流媒体概述

流媒体(Streaming Media)是一种通过网络实时传输音视频内容的技术,用户无需下载完整文件即可开始播放,将一连串的多媒体数据压缩后,经过互联网分段发送数据,在互联网上即时传输影音,以供用户观赏。

核心特点:

  1. 实时性:边下载边播放
  2. 按需传输:只传输用户观看的部分
  3. 支持直播和点播
  4. 自适应码率:根据网络状况动态调整质量

二、流媒体源类型

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:采集与编码
  1. 采集:摄像头/麦克风/屏幕捕获原始数据
  2. 编码
    • 视频编码:H.264/AVC、H.265/HEVC、AV1、VP9
    • 音频编码:AAC、MP3、Opus
  3. 编码参数:码率、分辨率、帧率、GOP大小
阶段2:封装与推流
  1. 封装格式:FLV、TS、MP4、FMP4
  2. 推流协议
    • RTMP推流到服务器
    • SRT推流(长距离传输)
    • WebRTC推流(低延迟)
阶段3:服务器处理
输入流 → 转码集群 → 切片/封装 → 输出多协议流
  1. 转码:多码率适配(1080p、720p、480p等)
  2. 切片
    • HLS:.ts文件 + .m3u8
    • DASH:.m4s文件 + .mpd
  3. 封装转换:RTMP转HLS/DASH
阶段4:分发网络
  1. CDN分发:边缘节点缓存内容
  2. 协议转换:根据客户端需求提供不同协议
阶段5:客户端播放
  1. 协议选择:根据平台选择最佳协议
  2. 自适应码率:根据带宽动态切换质量
  3. 解码渲染:硬件/软件解码,视频渲染

五、流媒体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为主

十、实践建议

选择协议的建议:

  1. Web端直播:HLS(兼容性) + WebRTC(低延迟互动)
  2. 移动端:HLS(iOS/Android都支持)
  3. 专业直播推流:RTMP + SRT备份
  4. 监控系统:RTSP/RTP + 转HLS供Web查看
  5. 点播系统:DASH(功能丰富)或HLS(简单)

开发工具链:

  • 推流工具:OBS Studio、FFmpeg
  • 测试工具:VLC、ffplay、streamlink
  • 分析工具:Wireshark、浏览器开发者工具

服务端方案:

  • 开源:Nginx-rtmp、SRS、Janus(WebRTC)
  • 云服务:AWS MediaLive、Azure Media Services、阿里云视频云
Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐