Code Monkey home page Code Monkey logo

nkchuong1607 / ksystreamer_android Goto Github PK

View Code? Open in Web Editor NEW

This project forked from fpzeng/ksystreamer_android

0.0 2.0 0.0 144.67 MB

金山云Android采集推流SDK(Livestream SDK),支持内置/自定义美颜(Beauty Filter)、美声(Beauty Voice)、软硬编(Software/Hardware Encoder) 、网络自适应(Network Auto Adapt)、混音(Voice Mixer)、混响(Reverb)、画中画(PIP)、连麦(RTC)、动态贴纸(Sticker)

Home Page: https://github.com/ksvc/KSYStreamer_Android/releases

Java 100.00%

ksystreamer_android's Introduction

金山云直播推流Android SDK使用说明

KSY Streamer Android SDK是金山云推出的 Android 平台上使用的软件开发工具包(SDK), 负责视频直播的采集和推流。

1. 功能特点

  • ✓ 支持软编、硬编及软编兼容模式

  • ✓ 网络自适应,可根据实际网络情况动态调整目标码率,保证流畅性

  • ✓ 音频编码:AAC

  • ✓ 视频编码:H.264

  • ✓ 推流协议:RTMP

  • 预览与推流分辨率可分别自由设置 (new)

  • 支持通过GLSurfaceView或TextureView进行预览 (new)

  • ✓ 音视频目标码率:可设

  • 支持动态横竖屏推流(new)

  • 支持后台音频推流 (new)

  • ✓ 支持前、后置摄像头动态切换

  • ✓ 前置摄像头镜像功能

  • ✓ 闪光灯:开/关

  • ✓ 支持触摸对焦(手动对焦)及测光

  • 支持变焦功能 (new)

  • 内置美颜功能 (性能大幅提升,软硬编下均有效)

  • 自定义美颜滤镜 (软硬编下均有效)

  • ✓ 内置美声

  • 自定义音频滤镜 (new)

  • ✓ 背景音乐功能, 支持耳返

  • ✓ 支持图片及时间戳水印

  • ✓ 开放KSYStreamer类的实现,开发者可自行组装各个模块 (new)

  • 软编模式下支持场景编码(new)

  • 连麦

  • 录屏直播, 录屏直播效果

  • 画中画

  • 动态贴纸、手势识别, 动态贴纸效果    

1.1. 即将支持

  • ❏ 低延迟耳返

  • ❏ 音频升降调

2. 运行环境

  • 最低支持版本为Android 4.0 (API level 15)

  • 支持的cpu架构:armv7, arm64, x86

Table 1. 软硬编部分功能对系统版本的要求及相关限制

软编

硬编

软编兼容模式

基础推流

4.4 (19)

4.3 (18)

4.0 (15)

网络自适应

4.4 (19)

4.4 (19)

4.0 (15)

内建美颜滤镜

所有

所有

仅Denoise

3. 版本迭代

当前版本为4.x,相对于v3.x有较大的变动,从3.x迁移的用户可参考:
3.x到4.0迁移说明

4. 快速集成

本章节提供一个快速集成金山云推流SDK基础功能的示例。
更详细的文档地址:https://github.com/ksvc/KSYStreamer_Android/wiki
具体可以参考demo工程中的相应文件。

4.1. 下载工程

4.1.1. 下载融合库

推荐使用融合库,融合库也会作为重点维护版本。

融合库国内镜像地址:https://git.oschina.net/ksvc/KSYLive_Android

4.1.2. 下载单独库

当前不支持单独推流库下载,请使用融合库:https://github.com/ksvc/KSYLive_Android

4.2. 工程目录结构

  • demo: 示例工程,演示本SDK主要接口功能的使用

  • libs: 集成SDK需要的所有库文件

    • libs/[armeabi-v7a|arm64-v8a|x86]: 各平台的so库

    • libs/ksylive4.0.jar: 推流SDK jar包

    • libs/libksyplayer.jar: 播放SDK jar包

    • libs/libksystat.jar: 金山云统计模块

4.3. 配置项目

引入目标库, 将libs目录下的库文件引入到目标工程中并添加依赖。

可参考下述配置方式(以Android Studio为例):

  • 导入SDK

    1. 推荐直接使用gradle方式集成:

      # required
      allprojects {
          repositories {
              jcenter()
          }
      }
      
      dependencies {
          # required, enough for most devices.
          compile 'com.ksyun.media:libksylive-java:2.0.3'
          compile 'com.ksyun.media:libksylive-armv7a:2.0.3'
      
          # Other ABIs: optional
          compile 'com.ksyun.media:libksylive-arm64:2.0.3'
          compile 'com.ksyun.media:libksylive-x86:2.0.3'
      }
    2. 手动下载集成

      • 将libs目录copy到目标工程的根目录下;

      • 修改目标工程的build.gradle文件,配置jniLibs路径:

        sourceSets {
            main {
                ...
                jniLibs.srcDir 'libs'
            }
            ...
        }
  • 修改proguard(混淆)文件,添加如下规则:

    -keep class com.ksyun.** {
      *;
    }
    
    -keep class com.ksy.statlibrary.** {
      *;
    }
  • 在AndroidManifest.xml文件中申请相应权限

    <!-- 使用权限 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_SINTERNETWIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.FLASHLIGHT" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <!-- 硬件特性 -->
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
  • 将demo assets目录下的资源文件copy到目标工程的assets目录下

4.4. 简单推流示例

具体可参考demo工程中的 com.ksyun.media.streamer.demo.CameraActivity 类.

  1. 在布局文件中加入预览View, 当前支持GLSurfaceView和TextureView

    <android.opengl.GLSurfaceView
        android:id="@+id/camera_preview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentBottom="true"
        android:layout_alignParentTop="true" />
  2. 初始化预览View

    GLSurfaceView mCameraPreview = (GLSurfaceView)findViewById(R.id.camera_preview);
  3. 创建KSYStreamer实例并配置推流相关参数

    // 创建KSYStreamer实例
    mStreamer = new KSYStreamer(this);
    // 设置预览View
    mStreamer.setDisplayPreview(mCameraPreview);
    // 设置推流url(需要向相关人员申请,测试地址并不稳定!)
    mStreamer.setUrl("rtmp://test.uplive.ksyun.com/live/{streamName}");
    // 设置预览分辨率, 当一边为0时,SDK会根据另一边及实际预览View的尺寸进行计算
    mStreamer.setPreviewResolution(480, 0);
    // 设置推流分辨率,可以不同于预览分辨率(不应大于预览分辨率,否则推流会有画质损失)
    mStreamer.setTargetResolution(480, 0);
    // 设置预览帧率
    mStreamer.setPreviewFps(15);
    // 设置推流帧率,当预览帧率大于推流帧率时,编码模块会自动丢帧以适应设定的推流帧率
    mStreamer.setTargetFps(15);
    // 设置视频码率,分别为初始平均码率、最高平均码率、最低平均码率,单位为kbps,另有setVideoBitrate接口,单位为bps
    mStreamer.setVideoKBitrate(600, 800, 400);
    // 设置音频采样率
    mStreamer.setAudioSampleRate(44100);
    // 设置音频码率,单位为kbps,另有setAudioBitrate接口,单位为bps
    mStreamer.setAudioKBitrate(48);
    /**
     * 设置编码模式(软编、硬编),请根据白名单和系统版本来设置软硬编模式,不要全部设成软编或者硬编,白名单可以联系金山云商务:
     * StreamerConstants.ENCODE_METHOD_SOFTWARE
     * StreamerConstants.ENCODE_METHOD_HARDWARE
     */
    mStreamer.setEncodeMethod(StreamerConstants.ENCODE_METHOD_SOFTWARE);
    // 设置屏幕的旋转角度,支持 0, 90, 180, 270
    mStreamer.setRotateDegrees(0);
  4. 创建推流事件监听

    Note

    所有回调均运行在KSYStreamer的创建线程,建议在主线程中进行,开发者可以直接在回调中操作 KSYStreamer的相关接口,但不要在这些回调中做任何耗时的操作。

    // 设置Info回调,可以收到相关通知信息
    mStreamer.setOnInfoListener(new KSYStreamer.OnInfoListener() {
        @Override
        public void onInfo(int what, int msg1, int msg2) {
            // ...
        }
    });
    // 设置错误回调,收到该回调后,一般是发生了严重错误,比如网络断开等,
    // SDK内部会停止推流,APP可以在这里根据回调类型及需求添加重试逻辑。
    mStreamer.setOnErrorListener(new KSYStreamer.OnErrorListener() {
        @Override
        public void onError(int what, int msg1, int msg2) {
            // ...
        }
    });
  5. 开始推流

    Note

    初次开启预览后需要在OnInfoListener回调中收到 StreamerConstants.KSY_STREAMER_CAMERA_INIT_DONE 事件后调用方才有效。

    mStreamer.startStream();
  6. 推流开始前及推流过程中可动态设置的常用方法

    // 切换前后摄像头
    mStreamer.switchCamera();
    // 开关闪光灯
    mStreamer.toggleTorch(true);
    // 设置美颜滤镜,关于美颜滤镜的具体说明请参见专题说明
    mStreamer.getImgTexFilterMgt().setFilter(mStreamer.getGLRender(),
                    ImgTexFilterMgt.KSY_FILTER_BEAUTY_DENOISE);
  7. 停止推流

    mStreamer.stopStream();
  8. Activity生命周期的回调处理

    public class CameraActivity extends Activity {
    
        // ...
    
        @Override
        public void onResume() {
            super.onResume();
            // 一般可以在onResume中开启摄像头预览
            mStreamer.startCameraPreview();
            // 调用KSYStreamer的onResume接口
            mStreamer.onResume();
            // 如果onPause中切到了DummyAudio模块,可以在此恢复
            mStreamer.setUseDummyAudioCapture(false);
        }
    
        @Override
        public void onPause() {
            super.onPause();
            mStreamer.onPause();
            // 一般在这里停止摄像头采集
            mStreamer.stopCameraPreview();
            // 如果希望App切后台后,停止录制主播端的声音,可以在此切换为DummyAudio采集,
            // 该模块会代替mic采集模块产生静音数据,同时释放占用的mic资源
            mStreamer.setUseDummyAudioCapture(true);
        }
    
        @Override
        public void onDestroy() {
            super.onDestroy();
            // 清理相关资源
            mStreamer.release();
        }
    }

6. FAQ

7. 反馈与建议

<a href="http://www.ksyun.com/"><img src="http://www.ksyun.com/assets/img/static/logo.png" border="0" alt="金山云计算" /></a>

ksystreamer_android's People

Contributors

chriszeng87 avatar buliaoyin avatar fpzeng avatar xiaofeizan avatar tian9246 avatar matrix18 avatar matoude1234567 avatar

Watchers

James Cloos avatar Chuong Nguyen avatar

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.