在线音频传输概述
现代音乐和音频网站采用多种协议来实现高效的在线音频传输。每种协议都有其特定的应用场景、优缺点和技术特点。
主要应用场景
- 音乐流媒体:Spotify、Apple Music、网易云音乐
- 语音通话:Zoom、微信语音、Discord
- 直播平台:Twitch、斗鱼直播
- 在线广播:喜马拉雅、Podcast
- 游戏语音:TeamSpeak、Discord游戏
HTTP渐进式下载
原理说明
HTTP渐进式下载是最基础的在线音频传输方式,客户端直接从HTTP服务器下载音频文件,边下载边播放,无需等待完整下载。
工作流程
- 客户端发送HTTP GET请求
- 服务器返回音频文件(Content-Length或Chunked)
- 浏览器/播放器开始下载并缓存
- 当缓存足够播放时开始解码播放
- 继续下载直到完成或用户停止
优缺点分析
| 优点 | 缺点 |
|---|---|
| 实现简单 | 无法适应网络波动 |
| 兼容性好 | 不支持直播 |
| 无需专用服务器 | 无法快进到未下载部分 |
| 支持断点续传 | 首屏加载时间长 |
HLS - HTTP实时流媒体协议
协议概述
HLS (HTTP Live Streaming) 是苹果公司开发的自适应流媒体协议,将大文件分割成多个小文件片段,支持多码率自适应。
HLS核心组件
- Playlist (.m3u8):索引文件,列出所有分片
- Segment (.ts):媒体分片,通常10秒一段
- Master Playlist:主索引,包含多个码率版本
m3u8 Playlist示例
#EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:10 #EXT-X-MEDIA-SEQUENCE:0 #EXTINF:10.0, segment0.ts #EXTINF:10.0, segment1.ts #EXTINF:9.5, segment2.ts #EXT-X-ENDLIST
HLS关键特性
| 特性 | 说明 |
|---|---|
| 自适应码率 | 根据网络自动切换质量 |
| HTTPS支持 | 支持加密传输 |
| 支持DRM | 可集成FairPlay保护 |
| 低延迟HLS | LL-HLS减少到2秒延迟 |
DASH - 动态自适应流媒体
协议概述
DASH (Dynamic Adaptive Streaming over HTTP) 是国际标准组织ISO制定的开放标准,与HLS类似但更加灵活,广泛应用于YouTube、Netflix等平台。
DASH vs HLS对比
| 特性 | DASH | HLS |
|---|---|---|
| 标准组织 | ISO/IEC | Apple |
| 索引格式 | XML (MPD) | Playlist (.m3u8) |
| DRM支持 | 通用加密 (CENC) | FairPlay |
| 浏览器支持 | MSE原生支持 | 需特殊支持 |
MPD文件示例 - 点播
<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011"
profiles="urn:mpeg:dash:profile:isoff-on-demand:2011"
type="static"
mediaPresentationDuration="PT4M30.000S"
minBufferTime="PT2.000S">
<Period id="main-content" start="PT0.000S">
<AdaptationSet id="audio-1" group="2"
contentType="audio"
lang="zh-CN"
mimeType="audio/mp4">
<Representation id="audio-128kbps" bandwidth="128000"
audioSamplingRate="48000" numChannels="2">
<BaseURL>audio/</BaseURL>
<SegmentList duration="4000" timescale="1000">
<Initialization sourceURL="audio-init.mp4"/>
<SegmentURL media="audio-seg1.m4s" duration="4000"/>
<SegmentURL media="audio-seg2.m4s" duration="4000"/>
</SegmentList>
</Representation>
<Representation id="audio-256kbps" bandwidth="256000"
audioSamplingRate="48000" numChannels="2">
<BaseURL>audio/</BaseURL>
<SegmentList duration="4000" timescale="1000">
<Initialization sourceURL="audio-hq-init.mp4"/>
<SegmentURL media="audio-hq-seg1.m4s" duration="4000"/>
</SegmentList>
</Representation>
</AdaptationSet>
</Period>
</MPD>
MPD字段说明
| 字段 | 说明 | 示例值 |
|---|---|---|
| profiles | 支持的DASH profile | urn:mpeg:dash:profile:isoff-on-demand:2011 |
| type | 类型:static/live | static |
| mediaPresentationDuration | 总时长 | PT4M30.000S |
| AdaptationSet | 自适应集 | contentType="audio" |
| Representation | 码率版本 | bandwidth等属性 |
直播场景MPD示例
<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011"
profiles="urn:mpeg:dash:profile:isoff-live:2011"
type="live"
availabilityStartTime="2024-01-15T10:00:00.000Z"
minBufferTime="PT4.000S"
minUpdatePeriod="PT1.000S">
<Period id="live-stream" start="PT0.000S">
<AdaptationSet id="audio-live" group="2"
contentType="audio"
mimeType="audio/mp4">
<Representation id="live-audio" bandwidth="128000"
audioSamplingRate="48000" numChannels="2">
<BaseURL>live/</BaseURL>
<SegmentTemplate media="audio-seg-$Time$.m4s"
initialization="audio-init.mp4"
timescale="48000">
<SegmentTimeline>
<S t="0" d="96000" r="10"/>
</SegmentTimeline>
</SegmentTemplate>
</Representation>
</AdaptationSet>
</Period>
</MPD>
RTMP - 实时消息传输协议
协议概述
RTMP (Real-Time Messaging Protocol) 是Adobe开发的实时传输协议,最初用于Flash播放器,曾是直播领域的主流协议。
RTMP工作模式
- RTMP:默认端口1935,基于TCP
- RTMPT:HTTP封装,穿透防火墙
- RTMPS:基于TLS/SSL加密
- RTMPE:Adobe加密版本
RTMP URL格式
rtmp://[server]:[port]/[app]/[stream_name] 示例: rtmp://live.example.com:1935/live/stream_key rtmps://live.example.com:443/live/stream_key
RTMP现状说明
- Adobe已停止Flash支持,RTMP逐渐被淘汰
- 现在主要用于推流端(OBS→服务器)
- 播放端通常需要转码为HLS/DASH
WebRTC - 网页实时通信
协议概述
WebRTC (Web Real-Time Communication) 是W3C制定的开放标准,支持浏览器之间进行点对点实时音视频通信,无需插件。
WebRTC核心组件
- MediaStream:获取摄像头/麦克风流
- RTCPeerConnection:建立P2P连接
- RTCDataChannel:传输任意数据
WebRTC支持的编解码器
| 类型 | 必选 | 可选 |
|---|---|---|
| 视频 | VP8 | VP9, H.264, AV1 |
| 音频 | Opus | G.711, G.722, AAC |
WebRTC应用场景
- 视频会议:Zoom网页版、Google Meet
- 语音通话:Discord、Web WhatsApp
- 直播互动:弹幕语音、连麦
- 在线教育:实时授课、问答
Smooth Streaming - 微软平滑流媒体
协议概述
Smooth Streaming是微软开发的自适应流媒体协议,基于IIS Media Services,主要在Microsoft平台使用。
Smooth Streaming特点
- 片段格式:使用.mp4分片
- 索引文件:.ismc (Manifest)
- Fragment:moof+mdat原子
Smooth Streaming现状
- 主要在Windows/Silverlight生态使用
- 逐渐被HLS/DASH取代
- 现在主要通过MSE/EME支持
协议对比总结
| 协议 | 类型 | 延迟 | 适用场景 | 浏览器支持 |
|---|---|---|---|---|
| HTTP Progressive | 点播 | 无延迟 | 简单音频播放 | 原生支持 |
| HLS | 点播/直播 | 10-30秒 | Apple生态、视频 | 原生或hls.js |
| DASH | 点播/直播 | 10-30秒 | YouTube、Netflix | MSE原生 |
| RTMP | 直播推流 | 2-5秒 | OBS推流、直播 | 需转码 |
| WebRTC | 实时通信 | < 500ms | 视频通话、互动直播 | 原生支持 |
选择建议
- 音乐点播:HTTP Progressive 或 HLS
- 音乐直播:HLS/DASH + 低延迟模式
- 语音通话:WebRTC
- 互动直播:WebRTC + HLS回放
- OBS推流:RTMP推流,转码HLS播放
实际架构示例
关键技术组件
- 存储层:OSS/S3存储原始音频文件
- 转码层:FFmpeg集群,多码率转码
- 分片服务:HLS/DASH分片生成
- CDN分发:全球节点,边缘缓存
- 播放器:hls.js、dash.js,自适应播放
- DRM保护:Widevine/FairPlay/PlayReady