Skip to content

UnionStreamer

buliaoyin edited this page Nov 22, 2017 · 1 revision

UnionStreamer类使用说明

UnionStreamer 类将SDK中以及各个自定义模块串联起来,提供一套完整的推流API接口。

UnionStreamer 能够满足一般直播应用场景的需求,对于非通用场景,可参考其源码,依据自己的需要进行组装。

UnionStreamer的使用示例

可参考Demo中 BaseCameraActivity 类的实现。

  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.setCameraFacing(CameraCapture.FACING_FRONT);
  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. 开始推流

    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();
        }
    }

1. 集成指南

2. 基本功能

2.1 采集

2.2 视频处理

2.3 音频处理

3. 开放接口定义

Clone this wiki locally