手机录屏直播

初始化直播 LiveScreenStreamSession

LiveConfig.Builder builder = new LiveConfig.Builder();
builder.setVideoWidth(1280)
        .setVideoHeight(720)
        .setVideoFPS(30)
        .setInitVideoBitrate(1280 * 720)
        .setMinVideoBitrate(1280 * 720 / 4)
        .setMaxVideoBitrate(1280 * 720 * 2)
        .setVideoEnabled(true)
        .setAudioSampleRate(44100)
        .setAudioBitrate(64000)
        .setAudioEnabled(true)
        .setActivityRotation(Surface.ROTATION_0);
mSession = new LiveScreenStreamSession(this, builder.build());
mSession.setRtmpEventListener(this);
mSession.setupDevice();
mSession.setCaptureErrorListener(new LiveScreenStreamSession.CaptureErrorListener() {
    @Override
    public void onError(int error, String desc) {
        Toast.makeText(ScreenStreamingService.this, desc, Toast.LENGTH_SHORT).show();
    }
});

申请 Android 录屏权限

由于 MediaProjection 的机制,用户每次录屏之前都必须采用以下方法获取录屏权限

MediaProjectionManager mMediaProjectionManager = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);
startActivityForResult(mMediaProjectionManager.createScreenCaptureIntent(), REQUEST_MEDIA_PROJECTION);

并且重写 Activity 的相应方法,代码如下

if (requestCode == REQUEST_MEDIA_PROJECTION) {
    if (resultCode != Activity.RESULT_OK) {
        Log.i(TAG, "User cancelled");
        Toast.makeText(this, "User cancelled", Toast.LENGTH_SHORT).show();
        finish();
        return;
    }
    Log.i(TAG, "Starting screen capture");
    mResultCode = resultCode;
    mResultData = data;
    Intent i = getIntent();
    i.putExtra("result_code", resultCode);
    i.putExtra("result_data", data);
    ScreenStreamingService.start(this, i);
    finish();
}

当获取到录屏的 resultCode 和 resultData 后,即可调用以下方法

// 开始录屏,配置 RTMP 地址
mSession.startMediaProjection(mResultCode, mResultData);
mSession.configRtmpSession(pushUrlBase + mRoomName + mRole.toString(), mRole);

// 销毁,不再使用时调用
mSession.destroyRtmpSession();
mSession.releaseDevice();

开始、暂停、恢复、结束推流

以下操作LiveScreenStreamSession可调用多次

// 开始推流
mLiveCaptureSession.startStreaming();

// 暂停推流
mLiveCaptureSession.pauseStreaming();

// 恢复推流
mLiveCaptureSession.resumeStreaming();

// 停止推流
mLiveCaptureSession.stopStreaming();

其他 Session 相关设置

除了以上介绍的功能,录屏直播 Session 还支持互动直播、设置滤镜、设置背景音乐和设置音量增益等功能,相关功能的使用方法与LiveStreamSession相同,故不再做介绍。