Skip to content
zanxiaofei edited this page Feb 10, 2017 · 18 revisions

1. 是否可以拿到音视频的原始数据

可以。
详细参考:

2. 使用视频的原始数据,是否可以生成有效的图片

可以。
通过接口setOnPreviewFrameListener拿到视频的原始数据,在回调onPreviewFrame中可以自己生成图片。
v4.0版本即将添加截图功能

mStreamer.setOnPreviewFrameListener(new OnPreviewFrameListener() {
                @Override
                public void onPreviewFrame(byte[] data, int width, int height, boolean isRecording) {
                    YuvImage image = new YuvImage(data, ImageFormat.NV21, width, height, null);
                    Bitmap bmp = null;
                    if(image!=null){
                        ByteArrayOutputStream stream = new ByteArrayOutputStream();
                        image.compressToJpeg(new Rect(0, 0, width, height), 80, stream);
                        bmp = BitmapFactory.decodeByteArray(stream.toByteArray(), 0, stream.size());

                        try {
                            stream.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        //生成的图片时bmp,可以使用这个图片进行想要的操作
                        final Bitmap finalBmp = bmp;

                        mHandler.post(new Runnable() {
                            @Override
                            public void run() {
                                imgV.setImageBitmap(finalBmp);
                            }
                        });

                    }

3. 混音支不支持主播声音和背景音乐音量独立调节

支持。
主播声音调节 用KSYStream的接口setVoiceVolume
背景音乐调节调用代码 KSYBgmPlayer.setVolume(bgmVolume);的接口,参考背景音乐

如果希望独立调节混音后背景音乐的声音,需要调用KSYStream的setHeadsetPlugged(true)
该接口设置为false的话,不会对背景音乐进行混音

4. 动态码率如何设置?软硬编都支持吗?

  • v3.x在推流前通过KSYStreamerConfig的接口mAutoAdjustBitrate来配置是否支持码率自适应
  • v4.x在推流前通过KSYStreamer的接口setVideoBitrate来配置是否支持码率自适应,参考参数设置中的[视频码率及码率自适应]章节

3.3.1.0 以前的版本 硬编默认是自动调整码率,也就是mAutoAdjustBitrate被强制置为true。3.3.1.0以后软硬编都可以通过上面的接口配置

5. 带宽不够的话会推流失败吗?

不会,带宽不够的情况,会发生丢包的情况。

6.这几种错误,都什么情况下会发生?

####v3.x: KSYVIDEO_OPEN_CAMERA_FAIL、KSYVIDEO_CAMERA_PARAMS_ERROR、KSYVIDEO_AUDIO_START_FAILED ####v4.x: KSY_STREAMER_CAMERA_ERROR_UNKNOWN、KSY_STREAMER_CAMERA_ERROR_START_FAILED、KSY_STREAMER_AUDIO_RECORDER_ERROR_START_FAILED 会上报这些错误,这几种错误都是Camera或者AudioRecord 初始化失败导致的,造成其初始化失败的可能原因有下面几种:

  • 没有摄像头或者录音权限
  • 推流初始化销毁时序有问题,上一次的推流并没有完全销毁,就开始下一次推流(此种情况,最好好好整理一下逻辑,是否严格按照Demo中的时序进行的)
  • 推流开始结束操作过于频繁(在v3.x的版本上,不建议在1s以内频繁的操作,v4.x没有这种限制)

7. 支持播放视频画中画吗?

v3.x支持,设置方法参考PIP v4.x不支持

8. 是否支持定制预览Size

  • 3.X不支持,只能全屏
  • 4.X版本支持,您可以设置自己的GlSurfaceView的大小

9. Error number代表什么意思?

  • 32797 RTMP发起推流失败,一般流名重复或者网络不佳会造成
  • 32795 DNS解析失败,一般流名重复或者网络不佳会造成
  • 32796 连接服务器失败

10. 以下异常只是设置的Camera参数硬件不支持,不会影响推流,不用太在意。

08-23 16:03:00.305 6355-6892/com.cnlive.libs W/System.err: java.lang.RuntimeException: setParameters failed 08-23 16:03:00.305 6355-6892/com.cnlive.libs W/System.err: at android.hardware.Camera.native_setParameters(Native Method) 08-23 16:03:00.305 6355-6892/com.cnlive.libs W/System.err: at android.hardware.Camera.setParameters(Camera.java:1773) 08-23 16:03:00.305 6355-6892/com.cnlive.libs W/System.err: at com.ksy.recordlib.service.hardware.CameraEncoder.e(Unknown Source) 08-23 16:03:00.305 6355-6892/com.cnlive.libs W/System.err: at com.ksy.recordlib.service.hardware.CameraEncoder.E(Unknown Source) 08-23 16:03:00.305 6355-6892/com.cnlive.libs W/System.err: at com.ksy.recordlib.service.hardware.CameraEncoder.d(Unknown Source) 08-23 16:03:00.305 6355-6892/com.cnlive.libs W/System.err: at com.ksy.recordlib.service.hardware.CameraEncoder.a(Unknown Source) 08-23 16:03:00.305 6355-6892/com.cnlive.libs W/System.err: at com.ksy.recordlib.service.hardware.CameraEncoder$a.handleMessage(Unknown Source) 08-23 16:03:00.305 6355-6892/com.cnlive.libs W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102) 08-23 16:03:00.310 6355-6892/com.cnlive.libs W/System.err: at android.os.Looper.loop(Looper.java:136) 08-23 16:03:00.310 6355-6892/com.cnlive.libs W/System.err: at com.ksy.recordlib.service.hardware.CameraEncoder.run(Unknown Source) 08-23 16:03:00.310 6355-6892/com.cnlive.libs W/System.err: at java.lang.Thread.run(Thread.java:841)

11. 推流切换到后台还会继续推流?

  • v3.x切换到后台会停止音视频采集,网络链接超时一般30s(服务端可配置)如果超时时间内切换回来,继续推流,超过30s得重连。
  • v4.x切换到后台后会继续音频推流,停止视频推流,恢复到前台时,恢复音视频推流

12. 是否支持截图功能?

当前版本暂时不支持
4.x版本即将支持

13. 预览是否有镜像?

预览没有镜像,只有拉流端才能看到镜像效果
3.3.1.0以上版本(包含4.x)支持镜像在推流过程中可以动态调整

  • v3.x 动态调整镜像接口:KSYStreamer.setEnableCameraMirror
  • v4.x 动态调整镜像接口:KSYStreamer.setFrontCameraMirror

14. 推流只能推到金山云的服务器吗?

不是
SDK内部对于推流地址没有做限制

15. 水印路径如何设置?

  • 3.x 线上版本支持两种方式设置,一是设置绝对路径;二是直接设置在assert目录下面的文件名即可。逻辑上会先按照绝对路径的方式decode,失败的情况下会去assert目录找
  • 4.x 如果是sdcard目录下面的需要指定前缀file:// 如果是assert目录下面的需要指定asserts://前缀 参考水印

16. msg Broken pipe 或者 connect time out发生的原因是什么?

一般都是因为网络状态不佳导致的

17. 推流地址可以动态设置吗?

可以

  • v3.x 通过接口KSYStreamer.updateUrl(newUrl);
  • v4.x 通过接口KSYStreamer.newUrl(newUrl);
    以上接口只有在下一次调用startStream才会生效

18. activity不可见时是否可以推流?

  • v3.x 不可以
  • v4.x 会继续音频推流

19. 所有的机型都支持硬编吗?

硬编不是所有机型都OK,金山商务可以提供白名单。 SDK暂时不直接提供白名单的功能,在接下来三四个版本后,会提供白名单
v4.x 在部分机型上会硬编不支持的情况下fallback到软编

20. 有获取实时上传的速度的回调?

可以
通过接口KSYStreamer.getUploadedKBytes()

v4.x 在不允许日志上报时,该接口返回0

21. 使用这个sdk需要授权吗?收费吗?如何收费?

不需要授权
不收费
完全免费
非常欢迎跟我们的服务一起使用

21. 如何获取当前摄像头是前置还是后置?如何不默认是前置摄像头?

使用接口KSYStreamer.isFrontCamera可以获取当前是否是前置摄像头

  • v3.x 默认后置摄像头:KSYStreamerConfig的setDefaultFront设置为false
  • v4.x 通过KSYStreamer的接口setCameraFacing来设置,参考javadoc

22. 音频只支持aac吗?

目前只支持aac

23. 目前支持H.265的编码吗?

  • v3.x 版本当前支持,但是并没有大规模测试,不推荐您使用。如果着急使用,可以联系商务。
  • v4.x 版本暂时不支持,后续会添加

24. 支持自动对焦吗?

支持

25. SDK在按home键之后回到SDK,SDK内部会做自动重连吗?

SDK内部不会做自动重连,APK可以自定义重连策略,可以参考demo进行重连,如下wiki地址有更详细的解释:
异常重连

26. Android支持混响时耳返功能吗?

支持

27. Android支持只静音麦克风,不静音背景音乐吗?

支持,可以调用mStreamer.setVoiceVolume(0.0f),此时麦克风的输入被静音,背景音乐不受影响。

28. Android横屏/竖屏设置方法&接口说明

接口说明 http://ksvc.github.io/KSYStreamer_Android/docs/reference/com/ksyun/media/streamer/kit/KSYStreamer.html#setRotateDegrees(int)

横屏设置方法

mStreamer.setRotateDegrees(90);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

竖屏设置方法

mStreamer.setRotateDegrees(0);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

29. 是否支持预览镜像?

支持

调用

mStreamer.getImgTexMixer().setPreviewMirror(0, true);

30. 如何设置系统音量(侧键音量)?

import android.media.AudioManager;
public class CameraActivity extends Activity implements ActivityCompat.OnRequestPermissionsResultCallback {
    ...
    private AudioManager mAudioManager;
    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        ...
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        switch (keyCode) {
            ...

            case KeyEvent.KEYCODE_VOLUME_UP:
                mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
                        AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
                break;
            case KeyEvent.KEYCODE_VOLUME_DOWN:
                mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
                        AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI);
                break;
            ...
        }
        return true;
    }
}
Clone this wiki locally