@@ -20,26 +20,25 @@ KSY Streamer Android SDK是金山云推出的 Android 平台上使用的软件
20
20
* 闪光灯:开/关
21
21
* 内置美颜选择功能
22
22
* 美颜接口 (new)
23
- * 混音功能 (new) 目前仅支持44100,mono,mp3格式,正在完善中
23
+ * 混音功能 (new) 可支持本地mp3,aac等格式
24
24
* 前置镜像功能 (new)
25
-
25
+ * 手动指定自动对焦测光区域 (new)
26
26
27
27
##使用方法
28
- ### 配置项目
28
+ ### 配置项目
29
29
使用金山云Android直播推流SDK需引入相应的资源,并在项目中添加依赖关系:
30
- - libs/armeabi-v7a/libDenoise_export.so
31
- - libs/armeabi-v7a/libksystreamer.so
32
- - libs/armeabi-v7a/libksyyuv.so
33
- - libs/armeabi-v7a/liblame.so (new)
34
- - libs/armeabi-v7a/libreverb.so (new)
30
+ - libs/armeabi-v7a/libDenoise_export.so
31
+ - libs/armeabi-v7a/libksystreamer.so
32
+ - libs/armeabi-v7a/libksyyuv.so
33
+ - libs/armeabi-v7a/libreverb.so (new)
35
34
- libs/ksylive3.0.jar
36
35
37
- 其中jar包的包名是:
36
+ 其中jar包的包名是:
38
37
- com.ksy.recordlib.service.core
39
38
40
39
###系统权限
41
40
使用本SDK时需要在AndroidManifest.xml里申请相应权限
42
- ```
41
+ ``` xml
43
42
<!-- 使用权限 -->
44
43
<uses-permission android : name =" android.permission.READ_PHONE_STATE" />
45
44
<uses-permission android : name =" android.permission.SYSTEM_ALERT_WINDOW" />
@@ -58,7 +57,7 @@ KSY Streamer Android SDK是金山云推出的 Android 平台上使用的软件
58
57
```
59
58
##代码示例
60
59
. 布局文件
61
- ```
60
+ ``` xml
62
61
<android .opengl.GLSurfaceView
63
62
android:id=" @+id/camera_preview"
64
63
android:layout_width=" match_parent"
@@ -96,11 +95,13 @@ KSYStreamerConfig.Builder builder = new KSYStreamerConfig.Builder();
96
95
| setStartPreviewManual| 设置手动启动预览,除非调用startCameraPreview接口否则不自动预览,默认关闭|
97
96
| setEnableCameraMirror| 设置开启前置摄像头镜像,默认关闭|
98
97
| setBeautyFilter| 设置内置美颜类别(目前软编只支持一种)|
98
+ | setManualFocus| 设置开启手动指定对焦测光区域,默认关闭|
99
99
100
- 其中分辨率等级可以设置为RecorderConstants .VIDEO_RESOLUTION_360P,RecorderConstants.VIDEO_RESOLUTION_480P,RecorderConstants.VIDEO_RESOLUTION_540P或RecorderConstants.VIDEO_RESOLUTION_720P。内置美颜种类可以设置为FILTER_BEAUTY_DISABLE(不使用美颜)、FILTER_BEAUTY_DENOISE、FILTER_BEAUTY、FILTER_SKINWHITEN、FILTER_BEAUTY_PLUS或FILTER_BEAUTY_PLUS,其中软编只可以设置为FILTER_BEAUTY_DISABLE(不使用美颜)和FILTER_BEAUTY_DENOISE。
100
+ 其中分辨率等级可以设置为 RecorderConstants .VIDEO_RESOLUTION_360P,RecorderConstants.VIDEO_RESOLUTION_480P,RecorderConstants.VIDEO_RESOLUTION_540P或RecorderConstants.VIDEO_RESOLUTION_720P。内置美颜种类可以设置为FILTER_BEAUTY_DISABLE(不使用美颜)、FILTER_BEAUTY_DENOISE、FILTER_BEAUTY、FILTER_SKINWHITEN、FILTER_BEAUTY_PLUS或FILTER_BEAUTY_PLUS,其中软编只可以设置为FILTER_BEAUTY_DISABLE(不使用美颜)和FILTER_BEAUTY_DENOISE。
101
101
102
102
. 创建监听器
103
103
在类KSYStreamer中定义了接口onStatusListener,开发者实现并设置给SDK之后,可通过onStatus回调收到相应的信息,其中SDK预定义的状态码如下所示。
104
+
104
105
- SDK预定义的常量
105
106
106
107
@@ -123,8 +124,9 @@ KSYStreamerConfig.Builder builder = new KSYStreamerConfig.Builder();
123
124
124
125
在使用SDK开始推流之后,SDK会发起认证请求,如果鉴权失败会通过回调告知开发者出现** KSYVIDEO_AUTH_FAILED** ,反之则没有。
125
126
如果鉴权失败,则编码的帧数是会有上限,当编码帧率为15FPS时,可推流时间大约是在13分钟至26分钟之间。推流编码的帧数达到上限后会通过回调函数告知开发者出现** KSYVIDEO_ENCODED_FRAMES_THRESHOLD** ,并且会** 停止推流** 。认证相关的设置请参照Demo。
127
+
126
128
- 创建onStatusListener
127
- ```
129
+ ``` java
128
130
public KSYStreamer . onStatusListener mOnStatusListener = new KSYStreamer .onStatusListener() {
129
131
@Override
130
132
public void onStatus (int what , int arg1 , int arg2 )
@@ -146,7 +148,7 @@ public KSYStreamer.onStatusListener mOnStatusListener = new KSYStreamer.onStatus
146
148
```
147
149
148
150
. 实例化并创建KSYStreamer
149
- ```
151
+ ``` java
150
152
mStreamer = new KSYStreamer (mContext);
151
153
mStreamer. setDisplayPreview(mCameraPreview);
152
154
mStremer. setConfig(builder. build());
@@ -187,43 +189,80 @@ mStreamer.stop();
187
189
```
188
190
189
191
. 自定义滤镜
190
- 对于硬编,可以使用自定义OpenGL方式的滤镜,自定义的滤镜必须为[ KSYImageFilter] ( https://github.com/ksvc/KSYStreamer_Android/blob/master/doc/KSYImageFilter.java ) 的子类,通过形如setBeautyFilter的方式设置:
192
+
193
+ 对于硬编,可以使用自定义OpenGL方式的滤镜,自定义的滤镜必须为KSYImageFilter的子类,自定义的滤镜需要继承KSYImageFilter并通过形如setBeautyFilter的方式设置,该接口支持推流中的动态调用:
191
194
```
192
195
mStreamer.setInitDoneCallbackEnable(new KSYImageFilter());
193
196
```
194
197
195
- [ KSYImageFilter] ( https://github.com/ksvc/KSYStreamer_Android/blob/master/doc/KSYImageFilter.java ) 为分离出来用于OpenGL绘制的框架,主要方便您实现自定义Vertex和Fragment Shader的滤镜,下面为主要方法说明。
198
+ KSYImageFilter为分离出来用于OpenGL绘制的框架,主要方便您实现自定义Vertex和Fragment Shader的滤镜,下面为主要方法和变量说明。
199
+ ** 注意:自定义的滤镜必须有public的无参构造器,并且调用KSYImageFilter(String vertexShader, String fragmentShader) 进行初始化**
196
200
197
- ```
198
- //执行OpenGL绘制纹理时调用
199
- public void onDraw(final int textureId, final float[] texMatrix) ;
200
-
201
- //当获得输出纹理大小时回调
202
- public void onInputSizeChanged(final int width, final int height) ;
203
-
204
- //编译VertextShader和FragmentShader之前回调
205
- Ipublic void onInit() ;
201
+ ``` java
202
+
203
+ // 构造方法,此处需要传入定点和片元着色器
204
+ public KSYImageFilter(String vertexShader, String fragmentShader) ;
205
+
206
+ // 注意:默认必须有public的无参构造器,必须在无参构造器里显式的调用上面的构造方法,初始化着色器
207
+ public KSYImageFilter() {
208
+ super (vertexShader,fragmentShader);
209
+ }
210
+
211
+ // 默认的定点着色器
212
+ protected static final String NO_FILTER_VERTEX_SHADER ;
213
+
214
+ // 默认的片元着色器
215
+ protected static final String NO_FILTER_FRAGMENT_SHADER ;
206
216
207
- //编译VertextShader和FragmentShader之后,回调
208
- public void onInitialized();
217
+ // 输入纹理宽度
218
+ protected int mTexWidth;
219
+
220
+ // 输入纹理高度
221
+ protected int mTexHeight;
209
222
210
- //销毁滤镜,主要用来清理texture和GLProgram,释放资源
211
- public final void destroy () ;
223
+ // 编译VertextShader和FragmentShader之前回调
224
+ public void onInit () ;
212
225
226
+ // 编译VertextShader和FragmentShader之后,回调
227
+ public void onInitialized();
213
228
229
+ // 销毁滤镜,主要用来清理texture和GLProgram,释放资源
230
+ public final void destroy() ;
231
+
232
+ // glDrawArrays之前调用
233
+ protected void onDrawArraysAfter() ;
234
+
235
+ // glDrawArrays之后调用
236
+ protected void onDrawArraysPre() ;
237
+
238
+ // 获得uniform在shader中的位置指针
239
+ protected int getUniformLocation(java.lang. String ) ;
240
+
241
+ // 设置Uniform变量,location为uniform在shader中的位置指针
242
+ protected void set* (int location , ... ) ;
243
+ ```
244
+
245
+ fragment的shader传入参数
246
+
247
+ ```
248
+ //定点着色器处理后的纹理采样坐标
249
+ varying vec2 vTextureCoord;
250
+ //Camera 预览的纹理(YUV格式)
251
+ uniform samplerExternalOES sTexture;
214
252
```
215
253
254
+ 具体的,可以参考示例的滤镜[ DEMOFILTER] ( https://github.com/ksvc/KSYStreamer_Android/blob/master/demo/src/com/ksy/recordlib/demo/DEMOFILTER.java ) 。
216
255
217
256
. 混音功能描述如下:
218
257
219
- -在耳机模式(接口自动对Mico采集的音频做了混响处理):调用startMusic播放本地音乐和Mico声音开始混音,调用示例如下:
220
- ```
258
+ - 在耳机模式(接口自动对Mico采集的音频做了混响处理):调用startMusic播放本地音乐和Mico声音开始混音,调用示例如下:
259
+ ``` java
221
260
mStreamer. startMusic(" /sdcard/test.mp3" );
222
261
mStreamer. setHeadsetPlugged(true );
223
262
```
224
263
225
- -在非耳机模式(接口自动对Mico采集的音频做了混响处理):调用startMusic播放本地音乐,或者其它应用播放的音乐和Mico的音频自动混音进去了,不需要额外处理。
226
- ```
264
+ - 在非耳机模式(接口自动对Mico采集的音频做了混响处理):调用startMusic播放本地音乐,或者其它应用播放的音乐和Mico的音频自动混音进去了,不需要额外处理。
265
+ ``` java
227
266
boolean startMusic(String path); // 播放音乐开始混音
228
267
boolean stopMusic(); // 停止播放音乐
229
268
@@ -249,12 +288,12 @@ mStreamer.setReverbLevel(4);
249
288
mStreamer.startMixMusic(String path,OnProgressListener listener,boolean loop);
250
289
```
251
290
参数解释:
252
- path /* 本地音乐文件路径,目前只支持mp3格式 * /
253
- listener /* 设置回调接口* /
254
- loop /* 是否单曲循环* /
291
+ path /* 本地音乐文件路径,支持mp3, aac等 * /
292
+ listener /* 设置回调接口* /
293
+ loop /* 是否单曲循环* /
255
294
256
295
调用示例:
257
- ```
296
+ ``` java
258
297
mStreamer. startMixMusic(" /sdcard/test.mp3" , mListener,true );
259
298
260
299
public interface OnProgressListener {
@@ -266,14 +305,21 @@ mStreamer.startMixMusic("/sdcard/test.mp3", mListener,true);
266
305
```
267
306
268
307
注意:播放下一首歌曲需要调用mStreamer.stopMixMusic()停止后,再开启下一首歌曲。
269
- ```
308
+ ``` java
270
309
mStreamer. startMixMusic(String path,OnProgressListener listener,boolean loop)
271
310
mStreamer. stopMixMusic()
272
311
```
273
312
274
- . 注意事项
275
- 采集的状态依赖于Activity的生命周期,所以必须在Activity的生命周期中也调用SDK相应的接口,例如:onPause, onResume。
313
+ . 手动指定自动对焦测光区域
314
+ 需要指定com.ksy.recordlib.service.view.CameraGLSurfaceView为预览的View,同时设置CameraGLSurfaceView
315
+ ```
316
+ builder.setManualFocus(true);
317
+ mStreamer.setDisplayPreview(* extends com.ksy.recordlib.service.view.CameraGLSurfaceView);
276
318
```
319
+
320
+ . 注意事项
321
+ 采集的状态依赖于Activity的生命周期,所以必须在Activity的生命周期中也调用SDK相应的接口,例如:onPause, onResume。
322
+ ``` java
277
323
public class CameraActivity extends Activity {
278
324
279
325
@Override
@@ -295,7 +341,7 @@ public class CameraActivity extends Activity {
295
341
}
296
342
}
297
343
```
298
- 预览区域默认全屏,暂不支持自定义分辨率。
344
+ 预览区域默认全屏,暂不支持自定义分辨率。
299
345
如有其它需求可以联系[ 我们] ( http://www.ksyun.com/ )
300
346
##反馈与建议
301
347
- 主页:[ 金山云] ( http://www.ksyun.com/ )
0 commit comments