@@ -23,6 +23,7 @@ KSY Streamer Android SDK是金山云推出的 Android 平台上使用的软件
23
23
* 混音功能 (new) 可支持本地mp3,aac等格式
24
24
* 前置镜像功能 (new)
25
25
* 手动指定自动对焦测光区域 (new)
26
+ * 软编模式下可添加图片及时间水印 (new)
26
27
27
28
##使用方法
28
29
### 配置项目
@@ -55,6 +56,9 @@ KSY Streamer Android SDK是金山云推出的 Android 平台上使用的软件
55
56
<uses-feature android : name =" android.hardware.camera.autofocus" />
56
57
57
58
```
59
+ ## proguard文件:
60
+ 需要保护 com.ksy.recordlib下的所有类:
61
+ -keep class com.ksy.recordlib.** { * ;}
58
62
##代码示例
59
63
. 布局文件
60
64
``` xml
@@ -188,27 +192,58 @@ mStreamer.stop();
188
192
mStreamer.setInitDoneCallbackEnable(true);
189
193
```
190
194
195
+ . 相机YUV数据回调,可以通过过下面的接口增加相机预览数据的回掉,具体的
196
+
197
+ ```
198
+ ksyStreamer.setOnPreviewFrameListener(listener);
199
+ ```
200
+ listener为OnPreviewFrameListener,*** 对于软编,如果想处理推出去的流数据,可以直接修改data数组,修改后的data数组会切仅会作用于软编推出去的流。***
201
+ ```
202
+ /**
203
+ * @param NV21格式的YUV数据,对于软编,如果对data进行处理,将作用到推出去的流
204
+ * @param width 预览的宽度(未旋转)
205
+ * @param height 预览的高度(未旋转)
206
+ * @param isRecording 是否正在推流
207
+ */
208
+ void onPreviewFrame(byte[] data, int width, int height,boolean isRecording);
209
+ ```
210
+
191
211
. 自定义滤镜
192
212
193
- 对于硬编,可以使用自定义OpenGL方式的滤镜,自定义的滤镜必须为KSYImageFilter的子类,自定义的滤镜需要继承KSYImageFilter并通过形如setBeautyFilter的方式设置,该接口支持推流中的动态调用:
213
+ 对于硬编,可以使用自定义OpenGL方式的滤镜,自定义的滤镜必须为KSYImageFilter的子类,自定义的滤镜需要继承KSYImageFilter并通过形如setBeautyFilter的方式设置,该接口支持推流中的动态调用,例如 :
194
214
```
195
- mStreamer.setInitDoneCallbackEnable(new KSYImageFilter());
215
+ mStreamer.setBeautyFilter(new KSYImageFilter());
216
+
217
+ ```
218
+ 这个接口有几种重载,具体如下:
219
+ 另外,对于硬编可以选择分别指定编码和预览的滤镜实例,或者让SDK通过反射使用无参构造方法自己构造。
220
+ ```
221
+ /**
222
+ 使用内置滤镜,int为内置美颜种类可以设置为FILTER_BEAUTY_DISABLE(不使用美颜)、FILTER_BEAUTY_DENOISE、FILTER_BEAUTY、FILTER_SKINWHITEN、FILTER_BEAUTY_PLUS或FILTER_BEAUTY_PLUS,其中软编只可以设置为FILTER_BEAUTY_DISABLE(不使用美颜)和FILTER_BEAUTY_DENOISE。
223
+ **/
224
+ void setBeautyFilter(int beautyFilter);
225
+ //编码和预览使用SDK通过反射使用无参构造方法自己构造的滤镜实例。
226
+ void setBeautyFilter(KSYImageFilter filter);
227
+ /**
228
+ 分别指定编码和预览的滤镜实例,SDK将不会使用反射重新构造。(!)注意对于硬编码,使用此方法需要分别传入编码和预览的滤镜实例,usage为RecorderConstants::FILTER_USAGE_PREVIEW,FILTER_USAGE_ENCODE ;
229
+ **/
230
+ void setBeautyFilter(KSYImageFilter filter, int usage);
196
231
```
197
232
198
233
KSYImageFilter为分离出来用于OpenGL绘制的框架,主要方便您实现自定义Vertex和Fragment Shader的滤镜,下面为主要方法和变量说明。
199
234
** 注意:自定义的滤镜必须有public的无参构造器,并且调用KSYImageFilter(String vertexShader, String fragmentShader) 进行初始化**
200
235
201
236
``` java
202
237
203
- // 构造方法,此处需要传入定点和片元着色器
238
+ // 构造方法,此处需要传入顶点和片元着色器
204
239
public KSYImageFilter(String vertexShader, String fragmentShader) ;
205
240
206
241
// 注意:默认必须有public的无参构造器,必须在无参构造器里显式的调用上面的构造方法,初始化着色器
207
242
public KSYImageFilter() {
208
243
super (vertexShader,fragmentShader);
209
244
}
210
245
211
- // 默认的定点着色器
246
+ // 默认的顶点着色器
212
247
protected static final String NO_FILTER_VERTEX_SHADER ;
213
248
214
249
// 默认的片元着色器
@@ -219,6 +254,9 @@ protected int mTexWidth;
219
254
220
255
// 输入纹理高度
221
256
protected int mTexHeight;
257
+
258
+ // 是否完成初始化
259
+ protected boolean mIsInitialized;
222
260
223
261
// 编译VertextShader和FragmentShader之前回调
224
262
public void onInit() ;
@@ -240,12 +278,15 @@ protected int getUniformLocation(java.lang.String) ;
240
278
241
279
// 设置Uniform变量,location为uniform在shader中的位置指针
242
280
protected void set* (int location , ... ) ;
281
+
282
+ 添加runable,会在onDraw时候的GLUSEPROGRAM 之后调用。
283
+ protected void runOnDraw(final Runnable runnable) ;
243
284
```
244
285
245
286
fragment的shader传入参数
246
287
247
288
```
248
- //定点着色器处理后的纹理采样坐标
289
+ //顶点着色器处理后的纹理采样坐标
249
290
varying vec2 vTextureCoord;
250
291
//Camera 预览的纹理(YUV格式)
251
292
uniform samplerExternalOES sTexture;
@@ -297,10 +338,18 @@ loop /*是否单曲循环*/
297
338
mStreamer. startMixMusic(" /sdcard/test.mp3" , mListener,true );
298
339
299
340
public interface OnProgressListener {
300
- /* 音乐播放进度,实时返回已经播放的时长(毫秒)*/
301
- void onMusicProgress (long currTime );
341
+ int BGM_ERROR_NONE = 0 ;
342
+ int BGM_ERROR_UNKNOWN = 1 ;
343
+ int BGM_ERROR_NOT_SUPPORTED = 2 ;
344
+ int BGM_ERROR_IO = 3 ;
345
+ int BGM_ERROR_MALFORMED = 4 ;
346
+
347
+ /* 音乐播放进度,实时返回已经播放的时长(毫秒)以及音乐总时长(毫秒)*/
348
+ void onMusicProgress (long currTime , long duration );
302
349
/* 播放结束回调*/
303
350
void onMusicStopped ();
351
+ /* 播放出错回调, err为如上所定义的错误号*/
352
+ void onMusicError (int err );
304
353
}
305
354
```
306
355
@@ -317,6 +366,50 @@ builder.setManualFocus(true);
317
366
mStreamer.setDisplayPreview(* extends com.ksy.recordlib.service.view.CameraGLSurfaceView);
318
367
```
319
368
369
+ . 添加图片及时间戳水印
370
+ 显示、隐藏图片水印时调用如下接口:
371
+ ``` java
372
+ /**
373
+ * 设置并显示logo水印
374
+ * @param path logo图片文件的路径
375
+ * @param x logo的显示位置,相对于视频
376
+ * @param y logo的显示位置,相对于视频
377
+ * @param w logo的显示宽度
378
+ * @param h logo的显示高度
379
+ * @param alpha logo的透明度,0-1之间
380
+ */
381
+ void showWaterMarkLogo(String path, int x, int y, int w, int h, float alpha);
382
+
383
+ /**
384
+ * 隐藏logo水印
385
+ */
386
+ void hideWaterMarkLogo();
387
+ ```
388
+
389
+ 显示、隐藏时间戳水印时调用如下接口:
390
+ ``` java
391
+ /**
392
+ * 在推流视频中显示时间水印
393
+ * @param x 时间显示位置,相对于视频
394
+ * @param y 时间显示位置,相对于视频
395
+ * @param fontColor 显示时间的字体颜色
396
+ * @param fontSize 显示时间的字体大小
397
+ * @param alpha 显示时间的透明度
398
+ */
399
+ void showWaterMarkTime(int x, int y, int fontColor, float fontSize, float alpha);
400
+
401
+ /**
402
+ * 隐藏推流视频中的时间水印
403
+ */
404
+ void hideWaterMarkTime();
405
+ ```
406
+
407
+ 例如:
408
+ ``` java
409
+ mStreamer. showWaterMarkLogo(mLogoPath, 30 , 40 , 96 , 96 , 0.8f );
410
+ mStreamer. showWaterMarkTime(10 , 10 , Color . RED , 16 , 1.0f );
411
+ ```
412
+
320
413
. 注意事项
321
414
采集的状态依赖于Activity的生命周期,所以必须在Activity的生命周期中也调用SDK相应的接口,例如:onPause, onResume。
322
415
``` java
@@ -342,7 +435,19 @@ public class CameraActivity extends Activity {
342
435
}
343
436
```
344
437
预览区域默认全屏,暂不支持自定义分辨率。
345
- Demo下载地址[ http://ksy.vcloud.sdk.ks3-cn-beijing.ksyun.com/Android/streamer/streamer_20160420.apk ] ( http://ksy.vcloud.sdk.ks3-cn-beijing.ksyun.com/Android/streamer/streamer_20160420.apk )
438
+
439
+ . 接口变更
440
+ 下面的接口成员被标记为Deprecated,将在不久后去掉
441
+
442
+ ### KSYStreamer::updateUrl();
443
+ 使用` KSYStreamerConfig::setUrl(); ` 代替
444
+
445
+ ### KSYStreamer::setEnableCameraMirror();
446
+ 使用` KSYStreamerConfig::setFrontCameraMirror(); ` 代替
447
+
448
+ ### KSYStreamerConfig::mAudioChannels改成final暂时不用设置
449
+
450
+
346
451
如有其它需求可以联系[ 我们] ( http://www.ksyun.com/ )
347
452
##反馈与建议
348
453
- 主页:[ 金山云] ( http://www.ksyun.com/ )
0 commit comments