一、Simulcast的來源
Simulcast一詞源自「simultaneous」和「broadcast」的組合,指的是在同一時間將單個流廣播到多個不同的接收方。Simulcast最初是由WebRTC標準的定義方案中提出的,在網路中將視頻和音頻流與其他用戶共享時,可以減少網路延遲並提高質量。
隨著時間的推移,Simulcast在直播流媒體應用中也變得越來越普遍。它是在直播中實現同時直播到多個設備的有效方案。
二、Simulcast與Multicast
與Simulcast類似的一個術語是Multicast。它們都可用於將流廣播到許多不同的接收方。然而,兩者之間有些許不同。Multicast依賴於網路中間設備路由器將數據包從源中轉發到許多接收方。相比之下,Simulcast流直接從源流向接收方,並在接收方端利用媒體協議進行同步播放。
另外,Multicast的使用必須在網路基礎設施中進行配置,並且僅在支持Multicast的網路中實現多組播會話,因此,Multicast的使用門檻要高於Simulcast。
三、Simulate的選取
(1)Scalability
Simulcast是可擴展的,可以輕鬆地添加或刪除接收方。對於大型WebRTC應用程序和直播中,Simulcast可以確保可以實現高質量的多路視頻流傳輸,使得用戶可以同時連接,但不會導致伺服器負荷或網路延遲增加。
// Simulcast Scalability Code 示例
pc.addTransceiver('video', {
direction: 'sendrecv',
sendEncodings: [{
rid: 'r0',
active: true,
maxBitrate: 900000,
}, {
rid: 'r1',
active: true,
maxBitrate: 500000,
scaleResolutionDownBy: 2.0,
}, {
rid: 'r2',
active: true,
maxBitrate: 300000,
scaleResolutionDownBy: 4.0,
}]
});
(2)Bandwidth Efficiency
Simulcast可以幫助節省帶寬,避免多次因為流量過大而造成的視頻幀的丟失。由於可以提供多種比特率的視頻流,因此可以根據用戶所需帶寬大小來發送適當的視頻內容,從而提高視頻的傳輸率。
// Simulcast Bandwidth Saving Code 示範
const pc = new RTCPeerConnection();
const sender = pc.addTrack(videoTrack, stream);
sender.setParameters({
encodings: [{
rid: "h",
maxBitrate: 900000,
// 高解析度
}, {
rid: "m",
maxBitrate: 300000,
scaleResolutionDownBy: 2.0, // 降低1/2解析度
}, {
rid: "l",
maxBitrate: 100000,
scaleResolutionDownBy: 4.0, // 降低1/4解析度
},
]
});
(3)Adaptive Quality
Simulcast可以根據用戶的設備和網路條件,自動調整傳送的解析度、視頻質量。理論上,Simulcast可以提供更高的視頻質量,尤其在較低的帶寬條件下,通過降低解析度從而提高紋理和色彩的細節。
// Simulcast適應性代碼示例
let room = new OpenVidu.Room();
let camera: OpenVidu.Camera = OpenVidu.Camera.getDevices[0];
let publisher: OpenVidu.Publisher = room.publishCamera({
camera: camera,
videoElement: 'myVideoElement',
publishProperties: {
resolution: '640x480'
}
});
publisher.setResolution('320x240');
四、Simulcast的優缺點
優點:
- 可伸縮性,可以輕鬆實現高質量、多流傳輸。
- 帶寬效率,節約帶寬消耗並減少視頻幀丟失。
- 自適應質量,可以調整傳輸解析度,適應設備和網路條件。
- 易於實現,使用門檻較低。
缺點:
- 需要相對較高的帶寬和處理能力。
- 在低端設備上,會對電池壽命、CPU和帶寬產生不利影響。
原創文章,作者:WPGYS,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/335030.html