在线音频传输概述

现代音乐和音频网站采用多种协议来实现高效的在线音频传输。每种协议都有其特定的应用场景、优缺点和技术特点。

主要应用场景

  • 音乐流媒体:Spotify、Apple Music、网易云音乐
  • 语音通话:Zoom、微信语音、Discord
  • 直播平台:Twitch、斗鱼直播
  • 在线广播:喜马拉雅、Podcast
  • 游戏语音:TeamSpeak、Discord游戏

HTTP渐进式下载

原理说明

HTTP渐进式下载是最基础的在线音频传输方式,客户端直接从HTTP服务器下载音频文件,边下载边播放,无需等待完整下载。

工作流程

  1. 客户端发送HTTP GET请求
  2. 服务器返回音频文件(Content-Length或Chunked)
  3. 浏览器/播放器开始下载并缓存
  4. 当缓存足够播放时开始解码播放
  5. 继续下载直到完成或用户停止

优缺点分析

优点 缺点
实现简单 无法适应网络波动
兼容性好 不支持直播
无需专用服务器 无法快进到未下载部分
支持断点续传 首屏加载时间长

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
返回顶部