记一次懒推流功能的设计
深拷贝
http://www.nowcoder.com/practice/70ca77b52d424ced8ebb348cd77c1dc5
暂时定名为lazy push,功能详情是在音视频会议时,除了主动发送一条低码率音视频流外,将高清流做成懒推送+订阅端的响应式订阅,这样能够明显降低带宽压力。
例如:
1. 原本低码率设计为100bps,上行14kb/s左右,以及一条高清码率,最低清的为400kps,大概在50kb/s,通常默认是2mbps,也就是上行240kb/s左右,上下行加在一起有250kb/s的常态速率(360网络查看器可以获取速度)
2. 懒推流后,常速率仅14kb/s
3. 对于下行带宽没太大影响,因为默认需要订阅所有的低码流,点击低码流后通过切换流至高清流。
实现方法:
1. 高清流订阅者数据集:
export const UserHighresSubscribers = new MongoObservable.Collection<UserHighresSubscriber>( "user-highres-subscribers" ); export interface UserHighresSubscriber { _id: string; userId: string; subers: Array<{ userId: string; connection: string, instanceId:string }>; }subers:connection是给websocket的uuid,为了在断开连接时,同时去掉这个订阅者,不然下线的用户会一直存在,instanceId是为了在服务重启或断开的时候去掉所有通过这台服务器订阅的用户,
前端实现:
1. 推流端: