功能需求
在接收视频的时候,对于所占屏幕较大的采用高清流,所占屏幕较小的采用低清流。
实现
首先需要了解一下,这个视频是如何显示的,之前我是以为在这屏幕中,我需要把所有的memberlist
的成员都渲染出来,对于渲染的那个userid
就不能清楚的理解,后来我知道了,在这个屏幕的渲染中只会渲染两个成员,除了本身之外渲染memberlist
的第一个成员。
这样的话,需要完成的点就比较清晰了。在之前已经有一个默认的把两个视频流都接收为低清流的函数。它是遍历了memberlist
然后进行处理,那么我可以在memberlist
里面多加一个boolean
参数:isBigStream
,当这个boolean
值为true
的时候我接收高清流,值为false
的时候接收低清流。那么这个函数我就可以修改成(在之前的基础上修改,因为把对象弄错了,memberlist
是一个容器,它是一个map
,我们定义的isBigStream
参数是对象上的):
1 | _updateReceiveStream = ()=>{ |
第一个问题解决了,那么就是第二个问题我如何设置这个参数值,在这里面我了解到在渲染的时候有两个函数,VideoBig
组件和``Videosmall组件,它们分别的去渲染大窗口和小窗口,那么我需要在渲染大窗口的时候把这个
userid传到函数里面,然后调用这个函数,把这个
userid的
isBigStream参数设置为
true`就可以了。所以是这样调用
VideoBig.js
中:
1 | TalkService.setUserBigStreamStatus(userId); |
那么在封装的sdk
中,我就需要写这样的一个函数setUserBigStreamStatus
,是这样:
1 | setUserBigStreamStatus = (userId) => { |
但是也出现了一个问题,因为我渲染的是memberlist
里面的除了自己的第一个成员,要是我这个渲染的成员离开了视频,那我是不是要把这个离开的成员的userid
对应的isBigStream
参数重新设置为false
,然后把现在渲染的userid
的isBigStream
参数值设置为true
,因此我又加了两个变量,存储之前渲染的userid
和现在要渲染的userid
,然后在VideoBig.js
中调用函数的时候我们把这个参数进行重新赋值和isBigStream
参数的设置,基本上是这样:
1 | //添加部分 |
至此我们修改的任务就完成了,虽然不是自己一个人完成的,但是自己一个人确定的具体的思路还是正确的,争取早日自己独立完成功能点的开发。