Skip to content

Commit 250a3c6

Browse files
author
zengxuhong
committed
bump version to 3.1.0.5
1 parent 76bd425 commit 250a3c6

18 files changed

+661
-37
lines changed

README.md

Lines changed: 113 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ KSY Streamer Android SDK是金山云推出的 Android 平台上使用的软件
2323
* 混音功能 (new) 可支持本地mp3,aac等格式
2424
* 前置镜像功能 (new)
2525
* 手动指定自动对焦测光区域 (new)
26+
* 软编模式下可添加图片及时间水印 (new)
2627

2728
##使用方法
2829
### 配置项目
@@ -55,6 +56,9 @@ KSY Streamer Android SDK是金山云推出的 Android 平台上使用的软件
5556
<uses-feature android:name="android.hardware.camera.autofocus" />
5657

5758
```
59+
## proguard文件:
60+
需要保护 com.ksy.recordlib下的所有类:
61+
-keep class com.ksy.recordlib.** { *;}
5862
##代码示例
5963
. 布局文件
6064
```xml
@@ -188,27 +192,58 @@ mStreamer.stop();
188192
mStreamer.setInitDoneCallbackEnable(true);
189193
```
190194

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+
191211
. 自定义滤镜
192212

193-
对于硬编,可以使用自定义OpenGL方式的滤镜,自定义的滤镜必须为KSYImageFilter的子类,自定义的滤镜需要继承KSYImageFilter并通过形如setBeautyFilter的方式设置,该接口支持推流中的动态调用:
213+
对于硬编,可以使用自定义OpenGL方式的滤镜,自定义的滤镜必须为KSYImageFilter的子类,自定义的滤镜需要继承KSYImageFilter并通过形如setBeautyFilter的方式设置,该接口支持推流中的动态调用,例如
194214
```
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);
196231
```
197232

198233
KSYImageFilter为分离出来用于OpenGL绘制的框架,主要方便您实现自定义Vertex和Fragment Shader的滤镜,下面为主要方法和变量说明。
199234
**注意:自定义的滤镜必须有public的无参构造器,并且调用KSYImageFilter(String vertexShader, String fragmentShader) 进行初始化**
200235

201236
```java
202237

203-
//构造方法,此处需要传入定点和片元着色器
238+
//构造方法,此处需要传入顶点和片元着色器
204239
public KSYImageFilter(String vertexShader, String fragmentShader) ;
205240

206241
//注意:默认必须有public的无参构造器,必须在无参构造器里显式的调用上面的构造方法,初始化着色器
207242
public KSYImageFilter() {
208243
super(vertexShader,fragmentShader);
209244
}
210245

211-
//默认的定点着色器
246+
//默认的顶点着色器
212247
protected static final String NO_FILTER_VERTEX_SHADER ;
213248

214249
//默认的片元着色器
@@ -219,6 +254,9 @@ protected int mTexWidth;
219254

220255
//输入纹理高度
221256
protected int mTexHeight;
257+
258+
//是否完成初始化
259+
protected boolean mIsInitialized;
222260

223261
//编译VertextShader和FragmentShader之前回调
224262
public void onInit() ;
@@ -240,12 +278,15 @@ protected int getUniformLocation(java.lang.String) ;
240278

241279
//设置Uniform变量,location为uniform在shader中的位置指针
242280
protected void set* (int location , ...) ;
281+
282+
添加runable,会在onDraw时候的GLUSEPROGRAM之后调用。
283+
protected void runOnDraw(final Runnable runnable) ;
243284
```
244285

245286
fragment的shader传入参数
246287

247288
```
248-
//定点着色器处理后的纹理采样坐标
289+
//顶点着色器处理后的纹理采样坐标
249290
varying vec2 vTextureCoord;
250291
//Camera 预览的纹理(YUV格式)
251292
uniform samplerExternalOES sTexture;
@@ -297,10 +338,18 @@ loop /*是否单曲循环*/
297338
mStreamer.startMixMusic("/sdcard/test.mp3", mListener,true);
298339

299340
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);
302349
/*播放结束回调*/
303350
void onMusicStopped();
351+
/*播放出错回调, err为如上所定义的错误号*/
352+
void onMusicError(int err);
304353
}
305354
```
306355

@@ -317,6 +366,50 @@ builder.setManualFocus(true);
317366
mStreamer.setDisplayPreview(* extends com.ksy.recordlib.service.view.CameraGLSurfaceView);
318367
```
319368

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+
320413
. 注意事项
321414
采集的状态依赖于Activity的生命周期,所以必须在Activity的生命周期中也调用SDK相应的接口,例如:onPause, onResume。
322415
```java
@@ -342,7 +435,19 @@ public class CameraActivity extends Activity {
342435
}
343436
```
344437
预览区域默认全屏,暂不支持自定义分辨率。
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+
346451
如有其它需求可以联系[我们](http://www.ksyun.com/)
347452
##反馈与建议
348453
- 主页:[金山云](http://www.ksyun.com/)

0 commit comments

Comments
 (0)