视频截图
更新时间: 2024/03/15 17:26:12
在音视频通话场景中,部分用户希望可以通过视频截图功能截取实时视频流画面,以便后续的存档分析、事件备忘、证据留存等等。NERTC SDK 提供视频截图功能,本文档为您介绍如何通过 takeLocalSnapshot
和 takeRemoteSnapshot
方法进行实时截图。
功能介绍
NERTC SDK 支持针对实时视频流进行截图,包括本地主流和辅流画面、远端主流和辅流画面。
视频截图适用于在线教育以及主播直播等场景中,具体场景说明如下。
- 在线课堂场景中,学生对课件或板书内容进行截图,截图作为笔记保存;
- 互动直播场景中,可以通过截图对直播画面进行内容安全审核。
注意事项
- 视频截图功能只截取实时视频流数据,截图中不包含画布水印信息,但可以包含编码水印信息。
- 截图相关接口调用时机如下,如果在其他时机调用截图相关接口,会报 30005 错误码,表示当前不支持该操作。
实现方法
API 调用时序
sequenceDiagram
participant App
participant NERtcSDK
Note over App, NERtcSDK: 加入房间前截图
App->>NERtcSDK: startPreview
Note left of App: 本地视频截图
App->>NERtcSDK: takeLocalSnapshot
NERtcSDK-->>App: NERtcTakeSnapshotCallback
Note over App, NERtcSDK: 加入房间后截图
App->>NERtcSDK: enableLocalVideo/startScreenCapture
Note left of App: 本地视频截图
App->>NERtcSDK: takeLocalSnapshot
NERtcSDK-->>App: NERtcTakeSnapshotCallback
NERtcSDK-->> App: onNERtcEngineUserVideoDidStartWithUserID/onNERtcEngineUserSubStreamDidStartWithUserID
Note left of App: 远端视频截图
App->>NERtcSDK: takeRemoteSnapshot
NERtcSDK-->> App: NERtcTakeSnapshotCallback
配置步骤
- 根据需求调用截图相关接口,实现视频流截图。
-
本地视频主流截图:
- 加入房间前,在调用
startPreview(kNERtcStreamChannelTypeMainStream)
方法开启视频预览后,调用takeLocalSnapshot
方法,并设置NERtcStreamChannelType
为kNERtcStreamChannelTypeMainStream
截取本地主流画面。
- V5.3.1 及之后版本支持加入房间前,对本地视频进行截图。
- V5.3 之前版本只支持加入房间后,对本地视频进行截图。
- 加入房间后,调用
enableLocalVideo(kNERtcStreamChannelTypeMainStream)
开启本地摄像头采集后,调用takeLocalSnapshot
方法,并设置NERtcStreamChannelType
为kNERtcStreamChannelTypeMainStream
截取本地主流画面。
- 加入房间前,在调用
-
本地视频辅流截图:
- 加入房间前,在调用
startPreview(kNERtcStreamChannelTypeSubStream)
方法开启视频预览后,调用takeLocalSnapshot
方法,并设置NERtcStreamChannelType
为kNERtcStreamChannelTypeSubStream
截取本地辅流画面。
- V5.3.1 及之后版本支持加入房间前,对本地视频进行截图。
- V5.3 之前版本只支持加入房间后,对本地视频进行截图。
-
加入房间后,在调用
enableLocalVideo(kNERtcStreamChannelTypeSubStream)
开启本地摄像头采集后,调用takeLocalSnapshot
方法,并设置NERtcStreamChannelType
为kNERtcStreamChannelTypeSubStream
截取本地辅流画面。 -
加入房间后,在调用
startScreenCapture
方法启用屏幕共享后,调用takeLocalSnapshot
方法,并设置NERtcStreamChannelType
为kNERtcStreamChannelTypeSubStream
截取本地辅流画面。
- 加入房间前,在调用
-
远端视频主/辅流截图:
在分别收到
onNERtcEngineUserVideoDidStartWithUserID
与onNERtcEngineUserSubStreamDidStartWithUserID
回调后,调用takeRemoteSnapshot
方法截取远端视频流画面,截图时可以通过NERtcStreamChannelType
指定截取的视频流是主流还是辅流。
-
通过回调的方式获取截图文件。
截图画面数据以 UIImage 形式通过
NERtcTakeSnapshotCallback
回调返回。
示例代码
//本地画面截图
[[NERtcEngine sharedEngine] takeLocalSnapshot:streamType callback:^(int errorCode, UIImage * _Nullable image) {
if (image) {
[NTESPhotoAlbumHelper saveImage:image];
}
}];
//远端画面截图
[[NERtcEngine sharedEngine] takeRemoteSnapshot:(NERtcStreamChannelType)streamType forUserID:user.userID callback:^(int errorCode, UIImage * _Nullable image) {
if (image) {
[NTESPhotoAlbumHelper saveImage:image];
}
}];
API 参考
方法 | 功能描述 |
---|---|
enableLocalVideo |
开启或关闭本地视频采集。 |
takeLocalSnapshot |
截取本地视频流画面 |
takeRemoteSnapshot |
截取远端视频流画面 |
NERtcTakeSnapshotCallback |
截图结果 block 回调 |