视频截图

更新时间: 2024/03/15 17:26:12

在音视频通话场景中,部分用户希望可以通过视频截图功能截取实时视频流画面,以便后续的存档分析、事件备忘、证据留存等等。NERTC SDK 提供视频截图功能,本文档为您介绍如何通过 takeLocalSnapshottakeRemoteSnapshot 方法进行实时截图。

功能介绍

NERTC SDK 支持针对实时视频流进行截图,包括本地主流和辅流画面、远端主流和辅流画面。
视频截图适用于在线教育以及主播直播等场景中,具体场景说明如下:

  • 在线课堂场景中,学生对课件或板书内容进行截图,截图作为笔记保存。
  • 互动直播场景中,可以通过截图对直播画面进行内容安全审核。

注意事项

  • 视频截图功能只截取实时视频流数据,截图中不包含画布水印信息,但可以包含编码水印信息。
  • 截图相关接口调用时机如下,如果在其他时机调用截图相关接口,会报错 ERR_INVALID_OPERATION,表示当前不支持该操作。

实现方法

API 调用时序

sequenceDiagram
    participant App
    participant NERtcSDK
    Note over App, NERtcSDK: 加入房间前截图
    
    App->>NERtcSDK: startVideoPreview
    Note left of App: 本地视频截图
    App->>NERtcSDK: takeLocalSnapshot
    NERtcSDK-->>App: onTakeSnapshotResult

    Note over App, NERtcSDK: 加入房间后截图
    
    App->>NERtcSDK: enableLocalVideo/startScreenCapture
    Note left of App: 本地视频截图
    App->>NERtcSDK: takeLocalSnapshot
    NERtcSDK-->>App: onTakeSnapshotResult
    NERtcSDK-->> App: onUserVideoStart/onUserSubStreamVideoStart
    Note left of App: 远端视频截图
    App->>NERtcSDK: takeRemoteSnapshot
    NERtcSDK-->> App: onTakeSnapshotResult

配置步骤

  1. 根据需求调用截图相关接口,实现视频流截图。
  1. 通过回调的方式获取截图文件。

    截图画面数据以 Bitmap 形式通过 NERtcTakeSnapshotCallback 类的 onTakeSnapshotResult 回调返回。

示例项目源码

网易云信提供 视频截图的示例项目源码 SnapshotWatermark,您可以参考该源码实现视频截图。

示例代码

//本地截图
NERtcEx.getInstance().takeLocalSnapshot(NERtcVideoStreamType.kNERtcVideoStreamTypeMain,
        new NERtcTakeSnapshotCallback() {
            @Override
            public void onTakeSnapshotResult(int errorCode, Bitmap image) {
                if(image == null) {
                    showToast("本地主流截图失败!");
                } else {
                    showToast("本地主流截图成功!");
                    saveBitmapToJpeg(user.userId,NERtcVideoStreamType.kNERtcVideoStreamTypeMain,image);
                }
            }
        });
        
//远端截图
NERtcEx.getInstance().takeRemoteSnapshot(user.userId, NERtcVideoStreamType.kNERtcVideoStreamTypeMain,
        new NERtcTakeSnapshotCallback() {
    @Override
    public void onTakeSnapshotResult(int errorCode, Bitmap image) {
        if(image == null) {
            showToast("远端主流截图失败 uid: " + user.userId);
        } else {
            showToast("远端主流截图成功 uid: " + user.userId);
            saveBitmapToJpeg(user.userId,NERtcVideoStreamType.kNERtcVideoStreamTypeMain,image);
        }
    }
});        

API 参考

方法 功能描述
enableLocalVideo 开启或关闭本地视频采集。
takeLocalSnapshot 截取本地视频流画面
takeRemoteSnapshot 截取远端视频流画面
onTakeSnapshotResult 截图结果回调
此文档是否对你有帮助?
有帮助
去反馈
  • 功能介绍
  • 注意事项
  • 实现方法
  • API 调用时序
  • 配置步骤
  • 示例项目源码
  • 示例代码
  • API 参考