Skip to content

Commit 27f353f

Browse files
committed
Update README.md
1 parent b5804af commit 27f353f

File tree

1 file changed

+87
-41
lines changed

1 file changed

+87
-41
lines changed

README.md

Lines changed: 87 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -20,26 +20,25 @@ KSY Streamer Android SDK是金山云推出的 Android 平台上使用的软件
2020
* 闪光灯:开/关
2121
* 内置美颜选择功能
2222
* 美颜接口 (new)
23-
* 混音功能 (new) 目前仅支持44100,mono,mp3格式,正在完善中
23+
* 混音功能 (new) 可支持本地mp3,aac等格式
2424
* 前置镜像功能 (new)
25-
25+
* 手动指定自动对焦测光区域 (new)
2626

2727
##使用方法
28-
### 配置项目
28+
### 配置项目
2929
使用金山云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)
3534
- libs/ksylive3.0.jar
3635

37-
其中jar包的包名是:
36+
其中jar包的包名是:
3837
- com.ksy.recordlib.service.core
3938

4039
###系统权限
4140
使用本SDK时需要在AndroidManifest.xml里申请相应权限
42-
```
41+
```xml
4342
<!-- 使用权限 -->
4443
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
4544
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
@@ -58,7 +57,7 @@ KSY Streamer Android SDK是金山云推出的 Android 平台上使用的软件
5857
```
5958
##代码示例
6059
. 布局文件
61-
```
60+
```xml
6261
<android.opengl.GLSurfaceView
6362
android:id="@+id/camera_preview"
6463
android:layout_width="match_parent"
@@ -96,11 +95,13 @@ KSYStreamerConfig.Builder builder = new KSYStreamerConfig.Builder();
9695
|setStartPreviewManual|设置手动启动预览,除非调用startCameraPreview接口否则不自动预览,默认关闭|
9796
|setEnableCameraMirror|设置开启前置摄像头镜像,默认关闭|
9897
|setBeautyFilter|设置内置美颜类别(目前软编只支持一种)|
98+
|setManualFocus|设置开启手动指定对焦测光区域,默认关闭|
9999

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。
101101

102102
. 创建监听器
103103
在类KSYStreamer中定义了接口onStatusListener,开发者实现并设置给SDK之后,可通过onStatus回调收到相应的信息,其中SDK预定义的状态码如下所示。
104+
104105
- SDK预定义的常量
105106

106107

@@ -123,8 +124,9 @@ KSYStreamerConfig.Builder builder = new KSYStreamerConfig.Builder();
123124

124125
在使用SDK开始推流之后,SDK会发起认证请求,如果鉴权失败会通过回调告知开发者出现**KSYVIDEO_AUTH_FAILED**,反之则没有。
125126
如果鉴权失败,则编码的帧数是会有上限,当编码帧率为15FPS时,可推流时间大约是在13分钟至26分钟之间。推流编码的帧数达到上限后会通过回调函数告知开发者出现**KSYVIDEO_ENCODED_FRAMES_THRESHOLD**,并且会**停止推流**。认证相关的设置请参照Demo。
127+
126128
- 创建onStatusListener
127-
```
129+
```java
128130
public KSYStreamer.onStatusListener mOnStatusListener = new KSYStreamer.onStatusListener() {
129131
@Override
130132
public void onStatus(int what, int arg1, int arg2)
@@ -146,7 +148,7 @@ public KSYStreamer.onStatusListener mOnStatusListener = new KSYStreamer.onStatus
146148
```
147149

148150
. 实例化并创建KSYStreamer
149-
```
151+
```java
150152
mStreamer = new KSYStreamer(mContext);
151153
mStreamer.setDisplayPreview(mCameraPreview);
152154
mStremer.setConfig(builder.build());
@@ -187,43 +189,80 @@ mStreamer.stop();
187189
```
188190

189191
. 自定义滤镜
190-
对于硬编,可以使用自定义OpenGL方式的滤镜,自定义的滤镜必须为[KSYImageFilter](https://github.com/ksvc/KSYStreamer_Android/blob/master/doc/KSYImageFilter.java)的子类,通过形如setBeautyFilter的方式设置:
192+
193+
对于硬编,可以使用自定义OpenGL方式的滤镜,自定义的滤镜必须为KSYImageFilter的子类,自定义的滤镜需要继承KSYImageFilter并通过形如setBeautyFilter的方式设置,该接口支持推流中的动态调用:
191194
```
192195
mStreamer.setInitDoneCallbackEnable(new KSYImageFilter());
193196
```
194197

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) 进行初始化**
196200

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 ;
206216

207-
//编译VertextShader和FragmentShader之后,回调
208-
public void onInitialized();
217+
//输入纹理宽度
218+
protected int mTexWidth;
219+
220+
//输入纹理高度
221+
protected int mTexHeight;
209222

210-
//销毁滤镜,主要用来清理texture和GLProgram,释放资源
211-
public final void destroy() ;
223+
//编译VertextShader和FragmentShader之前回调
224+
public void onInit() ;
212225

226+
//编译VertextShader和FragmentShader之后,回调
227+
public void onInitialized();
213228

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;
214252
```
215253

254+
具体的,可以参考示例的滤镜[DEMOFILTER](https://github.com/ksvc/KSYStreamer_Android/blob/master/demo/src/com/ksy/recordlib/demo/DEMOFILTER.java)
216255

217256
. 混音功能描述如下:
218257

219-
-在耳机模式(接口自动对Mico采集的音频做了混响处理):调用startMusic播放本地音乐和Mico声音开始混音,调用示例如下:
220-
```
258+
- 在耳机模式(接口自动对Mico采集的音频做了混响处理):调用startMusic播放本地音乐和Mico声音开始混音,调用示例如下:
259+
```java
221260
mStreamer.startMusic("/sdcard/test.mp3");
222261
mStreamer.setHeadsetPlugged(true);
223262
```
224263

225-
-在非耳机模式(接口自动对Mico采集的音频做了混响处理):调用startMusic播放本地音乐,或者其它应用播放的音乐和Mico的音频自动混音进去了,不需要额外处理。
226-
```
264+
- 在非耳机模式(接口自动对Mico采集的音频做了混响处理):调用startMusic播放本地音乐,或者其它应用播放的音乐和Mico的音频自动混音进去了,不需要额外处理。
265+
```java
227266
boolean startMusic(String path); // 播放音乐开始混音
228267
boolean stopMusic(); // 停止播放音乐
229268

@@ -249,12 +288,12 @@ mStreamer.setReverbLevel(4);
249288
mStreamer.startMixMusic(String path,OnProgressListener listener,boolean loop);
250289
```
251290
参数解释:
252-
path /*本地音乐文件路径,目前只支持mp3格式*/
253-
listener /*设置回调接口*/
254-
loop /*是否单曲循环*/
291+
path /*本地音乐文件路径,支持mp3, aac等*/
292+
listener /*设置回调接口*/
293+
loop /*是否单曲循环*/
255294

256295
调用示例:
257-
```
296+
```java
258297
mStreamer.startMixMusic("/sdcard/test.mp3", mListener,true);
259298

260299
public interface OnProgressListener {
@@ -266,14 +305,21 @@ mStreamer.startMixMusic("/sdcard/test.mp3", mListener,true);
266305
```
267306

268307
注意:播放下一首歌曲需要调用mStreamer.stopMixMusic()停止后,再开启下一首歌曲。
269-
```
308+
```java
270309
mStreamer.startMixMusic(String path,OnProgressListener listener,boolean loop)
271310
mStreamer.stopMixMusic()
272311
```
273312

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);
276318
```
319+
320+
. 注意事项
321+
采集的状态依赖于Activity的生命周期,所以必须在Activity的生命周期中也调用SDK相应的接口,例如:onPause, onResume。
322+
```java
277323
public class CameraActivity extends Activity {
278324

279325
@Override
@@ -295,7 +341,7 @@ public class CameraActivity extends Activity {
295341
}
296342
}
297343
```
298-
预览区域默认全屏,暂不支持自定义分辨率。
344+
预览区域默认全屏,暂不支持自定义分辨率。
299345
如有其它需求可以联系[我们](http://www.ksyun.com/)
300346
##反馈与建议
301347
- 主页:[金山云](http://www.ksyun.com/)

0 commit comments

Comments
 (0)