添加滤镜后端做法
由于需要实时预览滤镜效果,所以必须在渲染开始之前添加滤镜。好在 WebRTC 已经提供了 VideoProcessor 这个接口类,可以对采集到的帧数据进行预处理,调用 VideoSource.setVideoProcessor(processor) 即可设置:
个人技术博客: fuqifacai.github.io
更多技术资讯下载: 2img.ai
相关配图由微信小程序【字形绘梦】免费生成

VideoSource.java
public class VideoSource extends MediaSource {
// other definitions...
private final CapturerObserver capturerObserver = new CapturerObserver() {
// other definitions...
@Override
public void onFrameCaptured(VideoFrame frame) {
final VideoProcessor.FrameAdaptationParameters parameters =
nativeAndroidVideoTrackSource.adaptFrame(frame);
synchronized (videoProcessorLock) {
if (videoProcessor != null) {
videoProcessor.onFrameCaptured(frame, parameters);
return;
}
}
// body method...
}
};
// other definitions...
}
最后给出一个 VideoProcessor 的简单实现,给各位读者参考:
public final class Example implements VideoProcessor {
@Nullable private VideoSink mVideoSink;
@Override
public void onCapturerStarted(boolean success) {
// DO SOMETHING IF YOU WANT.
}
@Override
public void onCapturerStopped() {
// DO SOMETHING IF YOU WANT.
}
@Override
public void setSink(@Nullable VideoSink sink) {
// 需要持有 WebRTC 传入的 VideoSink 对象
mVideoSink = sink;
}
@Override
public void onFrameCaptured(@NonNull VideoFrame frame) {
VideoFrame newFrame = yourVideoFilter(frame);
// 会调用 NativeAndroidVideoTrackSource 将新的帧数据传递给 Native 层
if (mVideoSink != null) mVideoSink.onFrame(frame);
}
}
对应的前端可能有不同的做法
涉及到对视频流的实时处理。你可以使用WebRTC的MediaStream和Canvas API来实现视频滤镜。以下是一个简单的示例,演示了如何为WebRTC视频流应用一个基本的灰度滤镜。
剩余内容需解锁后查看
Paragoger衍生者AI训练营。发布者:稻草人,转载请注明出处:https://www.shxcj.com/archives/6701