Git Product home page Git Product logo

ksvc / ksylive_android Goto Github PK

View Code? Open in Web Editor NEW
332.0 26.0 173.0 144.11 MB

Android播放&推流融合版本[Android Play and LiveStreaming SDK] 直播延时2-3秒(Living delay 2 or 3 seconds),supporting jitter control,software&hardware decode, 支持内置/自定义美颜(Beauty Filter)、美声(Beauty Voice)、软硬编(Software/Hardware Encoder) 、网络自适应(Network Auto Adapt)、混音(Voice Mixer)、混响(Reverb)、画中画(PIP) 、连麦(RTC)、动态贴纸(Sticker)

Home Page: http://v.ksyun.com/

Java 99.95% GLSL 0.05%

ksylive_android's Introduction

KSYLive_Android

Download

Source Type: Binary SDK
Charge Type: free of charge

阅读对象

本文档面向所有使用金山云直播SDK的开发、测试人员等, 要求读者具有一定的Android编程开发经验,并且要求读者具备阅读wiki的习惯。

|live_1.png|live_1.png|live_1.png|

|live_4.png|live_5.png|

1. 概述

金山云直播SDK是金山云提供的直播解决方案的一部分,完成了Android端音视频数据采集、处理、推流和播放的工作。

金山云直播SDK不限制用户的推流、拉流地址。用户可以只使用金山云直播SDK而不使用金山云的云服务。

金山云直播SDK不收取任何授权使用费用,不含任何失效时间或者远程下发关闭的后门。同时金山云直播SDK也不要求ak/sk等鉴权,没有任何用户标识信息。

金山云直播SDK提供了业内一流的H.265编码、解码能力,H.265能力也是免费使用,欢迎集成试用。

金山云直播SDK当前未提供开源代码,如果需要其他定制化开发功能,请通过金山云商务渠道联系。

1.1 功能介绍

KSYLive库融合了Android 播放和推流SDK。旨在提供业内一流的移动直播SDK。具体功能:

具体推流功能请见:

具体播放功能请见:

1.2 运行环境

  • 最低支持版本为Android 4.0 (API level 15)
  • 支持的CPU架构:armv5,armv7, arm64, x86,

1.3 关于费用

金山云SDK保证,提供的KSYLive Android直播SDK可以用于商业应用,不会收取任何SDK使用费用。

但是基于KSYLive Android直播SDK的其他商业服务,会由特定供应商收取授权费用,大致包括:

  1. 云存储
  2. CDN分发
  3. 动态贴纸
  4. 连麦
  5. 第三方美颜

2. 文档说明

3. 包大小说明

此说明以加入arm64-v8a X86 armeabi-v7a 三个体系结构为例进行说明

注明:

  • lib 为项目动态库so的大小
  • res 资源文件目录
  • classes.dex dalvik 字节码
  • 项目总大小是 lib/res/classes.dex等未压缩的大小
  • apk size是将项目总大小打包后的大小
名称 库名称 lib res classes.dex 项目总大小 apk size
播放SDK libksyplayer.so 12.7M 1.5M 2.8M 17.3M 6.8M
推流+播放SDK libksystreamer.so 30.5M 1.5M 2.8M 35.5M 14.6M
直播融合库 libksylive.so 19.8M 1.6M 3.3M 25.1M 10.1M

这里可以看出,融合库比单纯推流和播放的apk size从14.6M减小了4.5M,到10.1M。(当然,如果不使用三个体系结构的话,并不会到10M大小。如果对apk size敏感,建议只使用armeabi-v7a库。) 推荐大家使用融合库!

3.1 体系结构

当前KSYLive_Android支持以下体系结构:

  • armeabi
  • armeabi-v7a
  • arm64-v8a
  • x86

为了节省apk size,如果没有特殊缘由,请只集成armeabi-v7a版本。

只集成armeabi-v7a版本,会导致ARMv5 ARMv6 设备不能运行。如果APP需要适配这两类设备,需要额外集成armebi版本。 ARMv5 ARMv6 设备计算性能较差,金山云不保证该芯片设备上的直播体验。不推荐直播APP视频适配该两款芯片设备。

4、下载集成

  • 推荐直接使用gradle方式集成:
# required
allprojects {
    repositories {
        jcenter()
    }
}

dependencies {
    # required, enough for most devices.
    compile 'com.ksyun.media:libksylive-java:3.0.4'
    compile 'com.ksyun.media:libksylive-armv7a:3.0.4'

    # Other ABIs: optional
    compile 'com.ksyun.media:libksylive-arm64:3.0.4'
    compile 'com.ksyun.media:libksylive-x86:3.0.4'
}

5. FAQ

已知的问题可参见FAQ

6. 反馈与建议

6.1 反馈模板

类型   描述
SDK名称 KSYLive_android
SDK版本 v3.0.4
设备型号 oppo r9s
OS版本 Android 6.0.1
问题描述 描述问题出现的现象
操作描述 描述经过如何操作出现上述问题                    
额外附件   文本形式控制台log、crash报告、其他辅助信息(界面截屏或录像等)

6.2 联系方式

金山云计算

ksylive_android's People

Contributors

bh4614910 avatar buliaoyin avatar chriszeng87 avatar dengchu817 avatar firmianarain avatar fpzeng avatar ksysdkci avatar sujia avatar wang12 avatar xiaofeizan avatar xingkai509 avatar zanxiaofei avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ksylive_android's Issues

空指针错误

java.lang.NullPointerException: Attempt to invoke interface method 'int com.ksy.recordlib.service.core.a.getUploadedKBytes()' on a null object reference

自己处理图像

你好。我想对图像进行处理,怎么样可以获取到摄像机的回调数据?

只推音频流

只需要:推音频流(压缩,去躁,去回音)

后置摄像头镜像问题

目前推流中发现 在使用后置摄像头的时候,主播预览界面正常无镜像,但是直播间用户会出现镜像的问题。而如果用iOS推流的话 则无次情况。

2.6.2 RTMP seekto error

i faced the following error when i try to do several seekto action with rtmp url

W/KSYMediaPlayer: SDL_VoutAndroid_releaseBufferProxy_l: [0] ???????? proxy 0: vout: 29 idx: -1 render: false fake: NO E/com.ksyun.media.player.KSYMediaPlayer: Error (-1004,0)

please advice.

推流实际的分辨率

如果设置的预览和推流的分辨率,手机不支持的话,SDK会自动设置一个分辨率, 我怎么样可以获取SDK设置好的这个分辨率。。

设置动态横竖屏推流失效

使用的小米Note手机推流,在V2.4.0和V2.3.4的demo中测试旋转横竖屏,在观看端看到的画面依旧是竖屏的,画面也变形了

播放直播特别卡

m3u8的播源, 在vlc里边观看很流畅,用KSYMediaPlayer频繁缓冲,设置bufferTimeMax后仍没有效果,在官方DEMO同样很卡。

小米电视4A偶尔发生崩溃

系统版本:Android 6.0.1,level 23
CPU架构:armeabi-v7a
设备机型:小米 MITV4A
SDK版本:3.0.4
main(1)
java.lang.RuntimeException
cannot get MediaCodecList

android.media.MediaCodecList.native_getGlobalSettings(Native Method)
 android.media.MediaCodecList.initCodecList(MediaCodecList.java:77)
 android.media.MediaCodecList.getCodecCount(MediaCodecList.java:43)
 com.ksyun.media.player.KSYMediaPlayer.c(KSYMediaPlayer.java:2748)
 com.ksyun.media.player.KSYMediaPlayer.i(KSYMediaPlayer.java:1470)
 com.ksyun.media.player.KSYMediaPlayer.access$1000(KSYMediaPlayer.java:82)
 com.ksyun.media.player.KSYMediaPlayer$b.handleMessage(KSYMediaPlayer.java:2270)
 android.os.Handler.dispatchMessage(Handler.java:102)
 android.os.Looper.loop(Looper.java:148)
 android.app.ActivityThread.main(ActivityThread.java:5439)
 java.lang.reflect.Method.invoke(Native Method)
 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:936)
 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:826)

Build Android Studio Error

This is Error Log

11-12 22:25:56.314 10101-10101/com.ksyun.live.demo E/AndroidRuntime: FATAL EXCEPTION: main
                                                                     Process: com.ksyun.live.demo, PID: 10101
                                                                     java.lang.UnsatisfiedLinkError: No implementation found for long com.ksyun.media.streamer.util.audio.KSYBgmPlayer._init() (tried Java_com_ksyun_media_streamer_util_audio_KSYBgmPlayer__1init and Java_com_ksyun_media_streamer_util_audio_KSYBgmPlayer__1init__)
                                                                         at com.ksyun.media.streamer.util.audio.KSYBgmPlayer._init(Native Method)
                                                                         at com.ksyun.media.streamer.util.audio.KSYBgmPlayer.<init>(KSYBgmPlayer.java:79)
                                                                         at com.ksyun.media.streamer.capture.AudioPlayerCapture.<init>(AudioPlayerCapture.java:24)
                                                                         at com.ksyun.media.streamer.kit.KSYStreamer.initModules(KSYStreamer.java:165)
                                                                         at com.ksyun.media.streamer.kit.KSYStreamer.<init>(KSYStreamer.java:104)
                                                                         at com.ksyun.media.streamer.demo.CameraActivity.onCreate(CameraActivity.java:177)
                                                                         at android.app.Activity.performCreate(Activity.java:5975)
                                                                         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1111)
                                                                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2413)
                                                                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2522)
                                                                         at android.app.ActivityThread.access$800(ActivityThread.java:169)
                                                                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421)
                                                                         at android.os.Handler.dispatchMessage(Handler.java:111)
                                                                         at android.os.Looper.loop(Looper.java:194)
                                                                         at android.app.ActivityThread.main(ActivityThread.java:5546)
                                                                         at java.lang.reflect.Method.invoke(Native Method)
                                                                         at java.lang.reflect.Method.invoke(Method.java:372)
                                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:967)
                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)

华为pad Camera界面未响应

华为pad型号:FDR-A01w
android版本:5.1.1
使用的官方demo,进入CameraActivity界面变绿未响应,华为荣耀6、荣耀8、三星pad均未出现该问题
调用摄像头权限已经允许
报错内容为:Camera new cameraInitNormal:0
部分日志:
07-04 11:00:38.300 29017-32065/com.ksyun.live.demo I/PermissionManager: camera remind result:true
07-04 11:00:38.420 29017-32065/com.ksyun.live.demo E/Camera: Camera new cameraInitNormal:0
07-04 11:00:38.430 29017-32065/com.ksyun.live.demo D/CameraCapture: try to preview with: 1280x960 15.0fps
07-04 11:00:38.440 29017-32065/com.ksyun.live.demo D/CameraCapture: Preview with: 1280x960 15.0-15.0fps FocusMode: fixed VideoStabilization: false Antibanding: auto

循环录制视频后推流未推成功

我们因为需求需要做一个循环录制视频的功能,但当循环录制视频一段时间后,点击推流就不能成功(任何播放器都播放不了这个链接),日志如下:

TextureView 回收後重連沒反應

首先我調用 TextureView 回收函式

mTextureView.stop();
mTextureView.release();
mTextureView = null;

再調用重連

mTextureView = (KSYTextureView) findViewById(R.id.ksy_textureview);
mTextureView.setDataSource(mUrl);
mTextureView.prepareAsync();

// 在onPrepared回调里
mTextureView.start()

然而什麼事都沒發生,播放到一半的影片就卡在那裡不動了,同樣的寫法我用 surfaceView + KSYMediaPlayer 確定有效

预览黑屏

下面是我的代码,权限都已经获取到了,但是预览是黑屏的,使用demo是可以预览到摄像头的内容。不会是版本和手机的问题,不清楚是缺少了什么设置。

android端悬浮窗播放功能,竖屏画面静止。

<activity android:name=".FloatingVideoActivity" android:screenOrientation="landscape" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:configChanges="orientation|keyboardHidden|screenSize" />

android端悬浮窗播放功能,把demo横屏的改成竖屏,进入悬浮窗页面,直播画面就卡停,静止不动了。

开播偶现崩溃

手机型号: oppo x9007
android版本:4.4.4
FATAL EXCEPTION: EncodeThread
Process: com.blinnnk.thor, PID: 14422
java.lang.UnsatisfiedLinkError: Native method not found: com.ksyun.media.streamer.encoder.AVEncoderWrapper._open_video:(JIIIIIFFIIIZ)I
at com.ksyun.media.streamer.encoder.AVEncoderWrapper._open_video(Native Method)
at com.ksyun.media.streamer.encoder.AVEncoderWrapper.a(AVEncoderWrapper.java:54)
at com.ksyun.media.streamer.encoder.AVCodecVideoEncoder.a(AVCodecVideoEncoder.java:35)
at com.ksyun.media.streamer.encoder.Encoder$4.handleMessage(Encoder.java:503)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.os.HandlerThread.run(HandlerThread.java:61)

TextureView seekTo 成功後 getCurrentPosition() 錯誤

在調用 seekTo 並成功繼續播放後 getCurrentPosition() 總是回傳錯誤位置,seekbar 又被拉回起點(但影片播放正常),導致影片播放進度和 seekbar 不一致,代碼如下:

public int setVideoProgress(int currentProgress, boolean b) {
    if (mVideoView == null)
        return -1;

    long time = currentProgress > 0 ? currentProgress : mVideoView.getCurrentPosition();
    long length = mVideoView.getDuration();
    if(b){
        Log.v(TAG, "setVideoProgress: "+time + " (note: onStopTrackingTouch)");
    } else {
        Log.v(TAG, "setVideoProgress: "+time + " (note: UPDATE_SEEKBAR)");
    }

    // Update all view elements
    mPlayerSeekbar.setMax((int) length);
    mPlayerSeekbar.setProgress((int) time);

    if (time >= 0) {
        String progress = time + "/" + length;
        mPlayerPosition.setText(progress);
    }

    Message msg = new Message();
    msg.what = UPDATE_SEEKBAR;

    if (mHandler != null)
        mHandler.sendMessageDelayed(msg, 1000);
    return (int) time;
}

private int mVideoProgress = 0;
private SeekBar.OnSeekBarChangeListener mSeekBarListener = new SeekBar.OnSeekBarChangeListener() {
    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        if (fromUser) {
            mVideoProgress = progress;
            mHandler.removeMessages(HIDDEN_SEEKBAR);
            Message msg = new Message();
            msg.what = HIDDEN_SEEKBAR;
            mHandler.sendMessageDelayed(msg, 3000);
        }
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        mVideoView.seekTo(mVideoProgress);
        setVideoProgress(mVideoProgress, true);
    }
};

private IMediaPlayer.OnPreparedListener mOnPreparedListener = new IMediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(IMediaPlayer mp) {
        if (mVideoView != null) {
            mVideoView.setVideoScalingMode(KSYMediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
            mVideoView.start();
            setVideoProgress(0, false);
        }
    }
};

mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case UPDATE_SEEKBAR:
                    setVideoProgress(0, false);
                    break;
                case HIDDEN_SEEKBAR:
                    mPlayerControlShow = false;
                    mPlayerControl.setVisibility(View.GONE);

                    break;
            }
        }
    };

系統日誌:

08-11 23:06:19.193 20910-20910: setVideoProgress: 212743 (note: onStopTrackingTouch)
08-11 23:06:19.214 20910-20910: Buffering Start.
08-11 23:06:19.567 20910-20910: Buffering End.
08-11 23:06:19.682 20910-20910: setVideoProgress: 14 (note: UPDATE_SEEKBAR)

版本:2.4.1
Android 版本: 5.0

推流一直失败是什么问题啊?

E/streamer: Failed open connection to rtmp://push.v.a8sport.com/vod/b40bc9f661434312afcb4f0188e61893
E/streamer: avio_open failed: Unknown error 32797
E/KSYStreamer: RtmpPub err=-1000

How to view streamming

Hi,

I have built and run successful KSYLive_Android. When I test in other phone, I add "rtmp://test.uplive.ks-cdn.com/live/androidtest" in NetMediaActivty, but this link cannot play.

Thanks

开始直播不到一秒出现卡死情况

问题描述:原本使用的sdk版本是2.2.7版本,没有出现该问题,更新到2.3.2开始出现开始直播不到一秒会卡死,测试官方demo在没有开始直播的情况下预览画面也会卡死,每次都会出现。

机型:坚果 型号YQ601

操作系统:Smartisan OS v3.2.6

Adnroid版本:5.1.1

java.lang.AbstractMethodError

abstract method "void com.ksyun.media.streamer.framework.SinkPin.onFrameAvailable(com.ksyun.media.streamer.framework.AVFrameBase)"
com.ksyun.media.streamer.framework.SrcPin.onFrameAvailable(SrcPin.java:51

与安卓27.1.0版本的方法重名了

推流没有声音

用了两个月 10月12 号突然没声音了 别的平台直播是正常的
image

java.lang.RuntimeException: createContext failed: EGL_BAD_CONTEXT

当调用过KSYStreamer的release()方法后,重新初始化streamer对象.
06-26 19:51:29.579 29088-29168/com.cloudm.yunbox E/AndroidRuntime: FATAL EXCEPTION: GLThread 913
Process: com.cloudm.yunbox, PID: 29088
java.lang.RuntimeException: createContext failed: EGL_BAD_CONTEXT
at android.opengl.GLSurfaceView$EglHelper.throwEglException(GLSurfaceView.java:1233)
at android.opengl.GLSurfaceView$EglHelper.throwEglException(GLSurfaceView.java:1224)
at android.opengl.GLSurfaceView$EglHelper.start(GLSurfaceView.java:1074)
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1447)
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1286)

demo 的前置镜像功能不起作用

按照官方 demo 使用 mStreamer.setFrontCameraMirror(true) 前置镜像功能不起作用,然后在执行mStreamer.setFrontCameraMirror(true)前 执行这个 deprecated 的方法 mStreamer.setEnableCameraMirror(true)一样不行,你们官方的 demo 前置镜像功能一样不起作用,求解决

外接摄像头

请问有支援外接 usb uvc webcam 作为来源摄像头吗?

安卓主板无法同时打开两个摄像头预览

用的sdk版本:
compile 'com.ksyun.media:libksylive-java:2.4.2'
compile 'com.ksyun.media:libksylive-armv7a:2.4.2'

创建两个KSYStreamer对象mPusher1和mPusher2,并且分别设置了GLSurfaceView。
mPusher1.setCameraFacing(CameraCapture.FACING_FRONT),mPusher2.setCameraFacing(CameraCapture.FACING_BACK),
然后mPusher1.startCameraPreview()的时候显示第1个预览画面
再调用mPusher2.startCameraPreview()的时候显示第2个预览画面,但是第1个预览画面卡住了。

我直接用安卓原生的方法可以同时开启两个摄像头预览。

魅族Pro5推流手机浏览黑屏,但是流有画面

Android版本:5.1 没有root 固件版本Flyme5.6.8.23 beta

log信息警告:
08-25 18:11:38.971 12656-13021/com.ksyun.live.demo W/KSYMediaPlayer: AVFrame.width or height is not set
08-25 18:11:39.031 12656-13021/com.ksyun.live.demo W/KSYMediaPlayer: AVFrame.format is not set

低延遲直播

請問一下,有沒有參數可以調整讓直播可以延遲大約在1秒內?

自己处理图像

问下,如果我直接来处理图像,用mStreamer.setOnPreviewFrameListener(new OnPreviewFrameListener() )这个接口获取并且处理数据后,怎么样才能推流出去?

Google play Vulnerability

Apk在google play上架,提示 Vulnerability问题。具体如下:
com.ksyun.media.player.https.a$2$1
com.ksyun.media.streamer.util.https.KsyHttpConnection$2$1

提示APK采用不安全的 HostnameVerifier 接口实施方式的开发者。在与使用 setDefaultHostnameVerifier API 的远程主机建立 HTTPS 连接时,这种实施方式会接受所有主机名,从而使您的应用容易受到中间人攻击。攻击者可能会读取传输的数据(例如登录凭据),甚至更改通过 HTTPS 连接传输的数据。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.