Giter VIP home page Giter VIP logo

roceys / ksystreamer_android Goto Github PK

View Code? Open in Web Editor NEW

This project forked from fpzeng/ksystreamer_android

0.0 1.0 0.0 103.51 MB

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

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)

  • ✓ 背景音乐功能, 支持本地mp3, aac等格式

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

  • 连麦

1.1. 即将支持

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

  • ❏ 画中画

  • ❏ 录屏推流

  • ❏ 低延迟耳返

  • ❏ 音频升降调

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. 下载工程

从github下载SDK及demo工程: https://github.com/ksvc/KSYStreamer_Android.git

4.2. 工程目录结构

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

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

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

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

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

4.3. 配置项目

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

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

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

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

    sourceSets {
        main {
            ...
            jniLibs.srcDir 'libs'
        }
        ...
    }
  • 修改proguard(混淆)文件,需要保持com.ksyun.media.streamer下的所有类:

    -keep class com.ksyun.media.streamer.** { *;}
  • 在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" />

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);
    // 开启推流统计功能
    mStreamer.setEnableStreamStatModule(true);
  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();
            // 如果正在推流,切回音视频模式
            if (mStreamer.isRecording() && !mAudioOnlyCheckBox.isChecked()) {
                mStreamer.setAudioOnly(false);
            }
        }
    
        @Override
        public void onPause() {
            super.onPause();
            mStreamer.onPause();
            // 一般在这里停止摄像头采集
            mStreamer.stopCameraPreview();
            // 如果正在推流,切换至音频推流模式
            if (mStreamer.isRecording() && !mAudioOnlyCheckBox.isChecked()) {
                mStreamer.setAudioOnly(true);
            }
        }
    
        @Override
        public void onDestroy() {
            super.onDestroy();
            // 清理相关资源
            mStreamer.release();
        }
    }

6. FAQ

7. 反馈与建议

ksystreamer_android's People

Contributors

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

Watchers

 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.