-
Notifications
You must be signed in to change notification settings - Fork 209
WaterMark
buliaoyin edited this page Aug 29, 2017
·
14 revisions
SDK支持为视频添加水印效果,包含,静态图片水印、时间水印和动态水印。
水印效果在预览和播放端都可生效。
水印功能在推流过程中可动态修改。
SDK支持图片水印的路径配置,以及直接设置Bitmap对象的方式。
有两种方式设置:
方式一: 指定sdcard目录下的文件,需要指定前缀file://
, 例如mLogoPath = "file:///sdcard/test.png";
方式二: 指定assets目录下面的文件,需要指定前缀assets://
,例如mLogoPath = "assets://test.png";
通过KSYStreamer的接口showWaterMarkLogo和hideWaterMarkLogo来显示和隐藏水印
注意,v4.0开启水印后,在切后台的case中,需要开发者在Activity的onPause回调中hide水印,onResume中再show出来。
接口说明:
/**
* Show watermark logo both on preview and stream.
*
* @param bitmap logo bitmap, should not be recycled by caller
* @param x x position for left top of logo relative to the video, between 0~1.0.
* @param y y position for left top of logo relative to the video, between 0~1.0.
* @param w width of logo relative to the video, between 0~1.0, if set to 0,
* width would be calculated by h and logo image radio.
* @param h height of logo relative to the video, between 0~1.0, if set to 0,
* height would be calculated by w and logo image radio.
* @param alpha alpha value,between 0~1.0
*/
public void showWaterMarkLogo(Bitmap bitmap, float x, float y, float w, float h, float alpha);
/**
* 设置并显示logo水印
*
* @param path logo图片文件的路径
* @param x logo的显示位置,0-1之间,相对于视频
* @param y logo的显示位置,0-1之间,相对于视频
* @param w logo的显示宽度,0-1之间,相对于视频,为0时会根据h及logo图片的比例自适应
* @param h logo的显示高度,0-1之间,相对于视频,为0时会根据w及logo图片的比例自适应
* @param alpha logo的透明度,0-1之间
*/
void showWaterMarkLogo(String path, float x, float y, float w, float h, float alpha);
/**
* 隐藏logo水印
*/
void hideWaterMarkLogo();
如果宽或高设置为0,SDK内部会自行根据logo的原始比例进行计算
通过KSYStreamer的接口showWaterMarkTime和hideWaterMarkTime来显示和隐藏时间水印
接口说明:
/**
* 在推流视频中显示时间水印
*
* @param x 时间戳的显示位置,0-1之间,相对于视频
* @param y 时间戳的显示位置,0-1之间,相对于视频
* @param w 时间戳的显示宽度,0-1之间,相对于视频,高度会自适应
* @param color 时间戳的颜色
* @param alpha 时间戳的显示透明度,0-1之间
*/
void showWaterMarkTime(float x, float y, float w, int color, float alpha);
/**
* 隐藏推流视频中的时间水印
*/
void hideWaterMarkTime();
代码示例:
mStreamer.showWaterMarkLogo(mLogoPath, 0.08f, 0.06f, 0.27f, 0.15f, 0.8f);
mStreamer.showWaterMarkTime(0.02f, 0.015f, 0.4f, Color.RED, 1.0f);
SDK从v4.3.1开始在demo中加入了支持动态水印的示例代码,可以支持gif, webp格式的动态图片水印。
在Demo中,第二次开启水印即可看到动态水印效果。
注意:软编兼容模式下,不支持动态水印。
Demo中的 AnimatedImageCapture 类使用fresco库的pipeline方法,将动图解码后转化为texture输出。 使用时,将该采集模块的输出端连接到预览和编码mixer的空闲index上,然后开始解码即可。
代码使用示例如下:
- 初始化
// 在Application的onCreate中初始化Fresco库
Fresco.initialize(this);
// 创建AnimatedImageCapture
mAnimatedImageCapture = new AnimatedImageCapture(mStreamer.getGLRender());
- 开启动态水印,参数设置方法与图片水印相同
// show animated watermark logo, support gif/webp, not valid in SOFTWARE_COMPAT mode
private void showAnimatedWaterMark(String url, float x, float y, float w, float h, float a) {
// 连接到空闲的预览、编码mixer上
mAnimatedImageCapture.getSrcPin().connect(mStreamer.getImgTexPreviewMixer().getSinkPin(3));
mAnimatedImageCapture.getSrcPin().connect(mStreamer.getImgTexMixer().getSinkPin(3));
// 配置水印显示位置及大小
mStreamer.getImgTexPreviewMixer().setRenderRect(3, x, y, w, h, a);
mStreamer.getImgTexMixer().setRenderRect(3, x, y, w, h, a);
// 开始显示
mAnimatedImageCapture.start(this, url);
}
- 关闭动态水印
private void hideAnimatedWaterMark() {
mAnimatedImageCapture.stop();
mAnimatedImageCapture.getSrcPin().disconnect(false);
}