android上如何实现模糊的滤镜效果?

主播端根据demo,已经实现了主播录制视频的模糊效果。
现在想在观众端实现模糊效果,根据收到的视频画面,观众可以处理这个画面,做模糊处理,查了下文档,android上没有在拉流的地方处理视频数据的接口,请问如何实现这个场景呢,有demo或者hook的方式处理吗?

请问你参考的是哪个 Demo?集成了 Faceunity SDK 的那个 Demo 吗?

1、如果主播端是通过自采集的方式实现模糊效果,那么实际上传给观众端的数据就是已经有模糊效果的,那么观众端就没有必要再去做模糊处理了啊?或者你们是有什么其它需求吗?
2、如果主播端是通过自渲染的方式实现模糊效果,那么观众端同理,可以参照主播端的处理方式,在渲染时对视频数据做模糊处理。

主播端实现的是根据你们文档中提供能demo,地址如下


demo自定义了一个glSurfaceView,然后把摄像头采集到到数据经过glSurfaceView处理,传给sdk,sdk再推流。

这样实现到结果是所有观众看到的画面都是模糊的,现在需求是观众可以选择模糊与不模糊。所以需要在拉流端处理这些图像数据。

而sdk中,拉流实现方式如下
SurfaceView mRemoteView = RtcEngine.CreateRendererView(this);
// 设置远端视图。
mRtcEngine.setupRemoteVideo(new VideoCanvas(mRemoteView, VideoCanvas.RENDER_MODE_HIDDEN, uid));

这里mRemoteView是接到数据的地方,现在问题是如果用demo中的方法,mRemoteView并不会执行里面的刷新方法,这里的mRemoteView并不是glView所以,有什么其他方式可以拿到sdk拉流的图像数据吗?

可以通过原始数据接口 onRenderVideoFrame 获取远端用户发送的视频帧,然后在视频渲染时做相应处理即可。详情请参考:
https://docs.agora.io/cn/Interactive%20Broadcast/raw_data_video_android?platform=Android

文档中描述“完成后处理后,你可以在该回调中,传入处理后的视频数据将其发送回 SDK。”
请问,发送回SDK用的是哪个接口?
pushExternalVideoFrame是这个吗?

观众端对视频做模糊处理,有两种方式:
1、第一种就是直接修改 onRenderVideoFrame 回调的缓冲区的内容即可。但是这种方法比较麻烦,需要对视频处理方面的知识有一定了解。


https://docs.agora.io/cn/Video/API%20Reference/cpp/structagora_1_1media_1_1_i_video_frame_observer_1_1_video_frame.html

2、第二种方法就是直接采用自渲染的方式,

这里就不要用 setupRemoteVideo 方法来实现渲染了,自己去处理和渲染远端用户视频:
https://docs.agora.io/cn/Video/custom_video_android?platform=Android#自定义视频渲染器

打算采用第二种方法
谢谢

嗯,不客气,有问题再联系