添加滤镜后端做法
由于需要实时预览滤镜效果,所以必须在渲染开始之前添加滤镜。好在 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
 
                