Skip to content

Audio_Streamer_Only

buliaoyin edited this page May 10, 2017 · 21 revisions

纯音频推流

v4.0之后添加了对纯音频推流的支持,接口为: setAudioOnly

目前可应用于如下场景:

前后台切换

直播App在推流过程中被切到后台(用户按下Home键等),此时会关闭Camera预览,并启用纯音频推流, App回到前台后再开启Camera预览,同时推音视频数据,整个过程中不会断流。
该逻辑在v4.0.5-v4.1.0版本之间已封装在KSYStreamer的onPause和onResume调用中。
另外如果考虑主播切后台后的隐私问题,可以在切后台时启用静音推流模式,回到前台时再恢复。
注意:v4.1.1(含)及之后版本已将该逻辑从KSYStreamer的onPause和onResume中移除, 后台不断流由SDK内部重复发送最后一帧视频来实现。

前后台切换示例代码
public class CameraActivity extends Activity {

    // ...

    @Override
    public void onResume() {
        super.onResume();
        // 一般可以在onResume中开启摄像头预览
        mStreamer.startCameraPreview();
        // 调用KSYStreamer的onResume接口,如果未主动设置为纯音频模式,则恢复为音视频模式
        mStreamer.onResume();
        // 恢复为音视频模式
        mStreamer.setAudioOnly(false);
        // 如果onPause中启用了mute推流,可以在此关闭
        if (mStreamer.isRecording()) {
            mStreamer.setMuteAudio(false);
        }
    }

    @Override
    public void onPause() {
        super.onPause();
        // 开启纯音频推流
        mStreamer.setAudioOnly(true);
        // 调用KSYStreamer的onPause接口
        mStreamer.onPause();
        // 一般在这里停止摄像头采集
        mStreamer.stopCameraPreview();
        // 如果希望App切后台后,停止录制主播端的声音,可以在此调用mute方法,
        // SDK将使用静音数据替代MIC采集数据
        if (mStreamer.isRecording()) {
            mStreamer.setMuteAudio(true);
        }
    }
}

整个推流过程中只推音频

不开启摄像头预览,整个推流过程中只推音频。
此时需要在开始推流前开启纯音频模式,后续推流过程中如果再将AudioOnly模式改为false则不会生效。

推流过程中动态切换音视频模式

推流开始时使用音视频推流模式,中间动态切换音频模式和音视频模式。

此时,如果在不需要视频时开启纯音频推流,那么直播流中不会包含视频帧, 在音频模式下进入的观众可能在直播恢复为音视频模式时也无法看到画面, 建议在这种场景下,不需要视频时,关闭视频采集,然后重复发送最后一个视频帧,以规避这个问题。

推流过程中动态切换音视频模式
// 停止视频采集,重复发送最后一帧视频
mStreamer.stopCameraPreview();
mStreamer.getVideoEncoderMgt().getEncoder().startRepeatLastFrame();

// ...

// 恢复视频采集,停止重复发送最后一帧
mStreamer.getVideoEncoderMgt().getEncoder().stopRepeatLastFrame();
mStreamer.startCameraPreview();
Clone this wiki locally