假如连麦的时候,调用了leavechannel已经退出房间了,但是我还在一直调用pushExternalVideoFrame的函数。是否还会继续发送数据呢?
首先当调用了leavechannel后,资源会释放掉,就不会发送数据流出去了
想要第三方的美颜并且使用连麦的功能
首先如果想用第三方的美颜,比如使用商汤的美颜,有两种方式去实现,第一种是使用自采集的方式,第二种是使用裸数据的方式。
先讲下自采集的方式:自采集是需要调用系统的采集方式,然后在回显的回调接口onDrawFrame的接口中处理美颜,并且一路做回显,一路做传给sdk。
ios 和android的demo
https://github.com/AgoraIO/Agora-Video-Source-Android
https://github.com/AgoraIO/Agora-Video-Source-iOS
https://github.com/AgoraIO/Agora-Media-Source-Windows.git
具体需要看下demo中的做法
第二种就是裸数据的接口,裸数据的接口相当于用sdk去做本地的视频采集,然后暴露出一个接口去供客户去覆写。
裸数据底层是用c++写的,需要封装声明调用。在裸数据接口中有一个onCaptureFrame的接口,你可以将你的数据转换成yuv的数据格式,并且覆盖原来回调的内容。这样美颜的数据就传给了sdk。
windows端使用虚拟摄像头采集,但是sdk占cpu过高的问题
第一点,我们这里的2.0以上的sdk版本都支持虚拟摄像头采集,但是sdk占用问题,可以通过裸数据接口,通过将虚拟摄像头比如直播伴侣在采集后提供的共享内存块来传给裸数据接口去采集,这样采集的cpu占用在5%不到,而且很大一部分消耗在格式转换成yuv的处理。
视频水印无论如何都打不上去
视频水印的问题,android 和 ios 以及windows都需要是在自采集的情况下才需要,在2.2版本或许会提供服务端去加水印版本。
想要加水印并且还有美颜,当你自采集的时候,美颜生成一路纹理id,然后用FBO处理水印+美颜的一路新的纹理ID塞给SDK。
windows想要做估计需要DirectX了去生成新的纹理ID。