本文详细说明Android端推流SDK主要接口、SDK的基本使用流程,以及相关功能的使用示例。
Android推流SDK特性
- 支持RTMP推流协议。
- 支持连麦互动和PK互动。
- 使用视频H.264编码以及音频AAC编码。
- 支持码控、分辨率、显示模式等自定义配置。
- 支持多种摄像头相关操作。
- 支持实时美颜和自定义美颜效果调节。
- 支持增、删动态贴纸实现动态水印效果。
- 支持录屏直播。
- 支持自定义YUV、PCM等外部音视频输入。
- 支持多路混流功能。
- 支持纯音视频推流以及后台推流。
- 支持背景音乐及其相关操作。
- 支持视频截图功能。
- 支持自动重连、异常处理。
- 支持音频3A算法。
- 增加视频软编、硬编切换逻辑,提升编码模块稳定性。
推流主要接口类列表
类 | 说明 |
---|---|
AlivcLivePushConfig | 推流初始配置 |
AlivcLivePusher | 推流功能类 |
AlivcLivePusherErrorListener | 错误回调 |
AlivcLivePusherNetworkListener | 网络相关通知回调 |
AlivcLivePusherInfoListener | 推流相关信息回调 |
AlivcLivePusherBGMListener | 背景音乐回调 |
AlivcLivePushCustomFilter | 自定义滤镜回调 |
AlivcLivePushCustomDetect | 自定义人脸检测回调 |
AlivcSnapshotListener | 截图回调 |
功能限制
- 您只能在推流之前设置横竖屏模式,不支持在直播的过程中实时切换。
- 在推流设定为横屏模式时,需设定界面为不允许自动旋转。
- 在硬编模式下,考虑编码器兼容问题分辨率会使用16的倍数,如设定为540P,则输出的分辨率为544*960,在设置播放器视图大小时需按输出分辨率等比缩放,避免黑边等问题。
推流SDK使用流程
基础版SDK的基本使用流程如下:
步骤 | 描述 | 操作指引及代码示例 |
---|---|---|
一、注册SDK | 配置License相关参数,注册推流SDK。若不调用注册函数,推流功能无法使用。 | 注册SDK |
二、配置推流参数 | 完成推流基本配置、码率控制配置、分辨率自适应配置、美颜功能配置等。 | |
三、使用推流SDK推流 | 初始化SDK、注册推流回调、创建预览视图后可以开始推流。用户可以根据业务需求添加推流控制、设置背景音乐、摄像头、外部音频、动态贴纸等。 重要
| |
四、设置录屏推流(按需) | 如需使用录屏推流,可以实现录屏推流相关的配置。 |
步骤 | 描述 | 操作指引及代码示例 |
---|---|---|
一、注册SDK | 配置License相关参数,注册推流SDK。若不调用注册函数,推流功能无法使用。 | 注册SDK |
二、设置直播连麦互动 | 设置连麦互动,用户可以使用推流SDK互动版本完成主播和连麦观众超低延时(300ms以内)互动。 |
注册SDK
推流SDK升级到4.4.2及以后版本,接入一体化License服务。在使用推流功能前必须进行注册,否则无法使用推流SDK功能。具体操作,请参见Android端注册SDK。
配置推流参数(基础版)
您可以使用AlivcLivePushConfig配置推流参数,每个参数有一个对应的默认值。您可以根据需求修改对应的属性值。关于默认值和参数范围,请参见基础版V4.5.1接口说明(Android)或互动版V4.5.1接口说明(Android)或注释。
- 基本推流配置。
基本推流配置对应参数都有默认值,建议采用默认值,即您可以进行简单初始化,不做配置。 示例代码如下:
// 初始化推流配置类 mAlivcLivePushConfig = new AlivcLivePushConfig(); // 设置推流模式,默认普通推流模式 mAlivcLivePushConfig.setLivePushMode(AlivcLiveMode.AlivcLiveBasicMode); // 设置分辨率,默认540P mAlivcLivePushConfig.setResolution(AlivcResolutionEnum.RESOLUTION_540P); // 设置帧率,默认20fps mAlivcLivePushConfig.setFps(AlivcFpsEnum.FPS_25); // 设置视频编码Gop,单位秒,默认2秒 mAlivcLivePushConfig.setVideoEncodeGop(AlivcVideoEncodeGopEnum.GOP_TWO); // 打开码率自适应,默认为true mAlivcLivePushConfig.setEnableBitrateControl(true); // 设置横竖屏,默认为竖屏,可设置home键向左或向右横屏 mAlivcLivePushConfig.setPreviewOrientation(AlivcPreviewOrientationEnum.ORIENTATION_PORTRAIT); // 设置音频编码模式,默认AAC-LC mAlivcLivePushConfig.setAudioProfile(AlivcAudioAACProfileEnum.AAC_LC); // 设置视频编码模式,默认硬编 mAlivcLivePushConfig.setVideoEncodeMode(AlivcEncodeModeEnum.Encode_MODE_HARD); // 设置音频编码模式,默认软编 mAlivcLivePushConfig.setAudioEncodeMode(AlivcEncodeModeEnum.Encode_MODE_SOFT); // 设置摄像头前后置,默认前置 mAlivcLivePushConfig.setCameraType(AlivcLivePushCameraTypeEnum.CAMERA_TYPE_FRONT); // 设置App推后台或暂停时推图片 mAlivcLivePushConfig.setPausePushImage("TODO: Image Path"); // 设置弱网推图片 mAlivcLivePushConfig.setNetworkPoorPushImage("TODO: Image Path");
重要- 综合手机性能和网络带宽要求,建议您将分辨率设置为540P(主流移动直播App基本都采用540P)。
- 关闭自适应码率后,码率将固定在初始码率,不会在设定的目标码率和最小码率之间自适应调整。如果网络情况不稳定,可能造成播放卡顿,请慎用。
- 配置码率控制。
码率控制通过AlivcQualityModeEnum参数配置。推流SDK提供以下码率控制模式,请根据实际需求修改参数值。
码率控制模式 描述 示例代码 QM_RESOLUTION_FIRST 清晰度优先模式。SDK内部会对码率参数进行配置,优先保障推流视频的清晰度。 mAlivcLivePushConfig.setQualityMode(AlivcQualityModeEnum.QM_RESOLUTION_FIRST);//清晰度优先
QM_FLUENCY_FIRST 流畅度优先模式。SDK内部会对码率参数进行配置,优先保障推流视频的流畅度。 mAlivcLivePushConfig.setQualityMode(AlivcQualityModeEnum.QM_FLUENCY_FIRST);//流畅度优先
QM_CUSTOM 自定义模式。SDK会根据开发者设置的码率进行配置。设置为自定义模式时,您可以选择配置画质优先或者流畅度优先,并自行设定初始码率、最小码率和目标码率。 - 初始码率:开始直播时的码率。
- 最小码率:当网络较差时,码率会逐步减低到最小码率,以减少视频的卡顿。
- 目标码率:当网络较好时,码率会逐步提高到目标码率,以提高视频清晰度。
mAlivcLivePushConfig.setQualityMode(AlivcQualityModeEnum.QM_CUSTOM); mAlivcLivePushConfig.setTargetVideoBitrate(1000); //目标码率1000kbps mAlivcLivePushConfig.setMinVideoBitrate(300); //最小码率300kbps mAlivcLivePushConfig.setInitialVideoBitrate(800); //初始码率800kbps
说明- 选择清晰度优先或流畅度优先模式时,不需设置初始码率、最小码率和目标码率(initialVideoBitrate、minVideoBitrate、targetVideoBitrate)。推流SDK内部策略会自动保障在网络抖动情况下优先考虑视频清晰度或流畅度。
- 选择自定义码率时,请参考阿里云推荐设置配置对应码率。推荐设置请参考下表内容。
表 1. 自定义码率控制推荐设置(画质优先) 分辨率 初始码率 initialVideoBitrate 最小码率 minVideoBitrate 目标码率 targetVideoBitrate 360P 600 300 1000 480P 800 300 1200 540P 1000 600 1400 720P 1500 600 2000 1080P 1800 1200 2500 表 2. 自定义码率控制推荐设置(流畅度优先) 分辨率 初始码率 initialVideoBitrate 最小码率 minVideoBitrate 目标码率 targetVideoBitrate 360P 400 200 600 480P 600 300 800 540P 800 300 1000 720P 1000 300 1200 1080P 1500 1200 2200 - 配置分辨率自适应。
分辨率自适应即动态调整推流分辨率。开启功能后,当网络较差时会自动降低分辨率以提高视频的流畅度和清晰度。示例代码如下:
mAlivcLivePushConfig.setEnableAutoResolution(true); // 打开分辨率自适应,默认为false
重要- 某些播放器可能不支持动态分辨率,如果您需要使用分辨率自适应功能,建议使用阿里云播放器。
- 分辨率自适应只有在清晰度优先或流畅度优先时才会生效(AlivcQualityModeEnum参数配置),自定义模式时无效。
- 配置美颜功能。如需在推流SDK中使用美颜功能,需要引入美颜库并配置对应回调。
- 配置图片推流。为了更好的用户体验,推流SDK提供了后台图片推流和码率过低时进行图片推流的设置。当SDK退至后台时默认暂停推流视频,只推流音频,此时可以设置图片来进行图片推流和音频推流。例如,在图片上提醒用户主播离开片刻,稍后回来。示例代码如下:
mAlivcLivePushConfig.setPausePushImage("退后台png图片路径");//设置用户后台推流的图片
另外,当网络较差时您可以根据自己的需求设置推流一张静态图片。设置图片后,SDK检测到当前码率较低时,会推流此图片,避免视频流卡顿。示例代码如下所示:
mAlivcLivePushConfig.setNetworkPoorPushImage("网络差png图片路径");//设置网络较差时推流的图片
- 配置水印。推流SDK提供了添加水印功能,并且支持添加多个水印。水印图片必须为PNG格式图片。示例代码如下:
mAlivcLivePushConfig.addWaterMark(waterPath,0.1,0.2,0.3);//添加水印
说明- x、y、width为相对值,例如x为0.1表示水印的x值为推流画面x轴的10%位置,如果推流分辨率为540*960,则水印x值为54。
- 水印图片的高度,按照水印图片的真实宽高与输入的width值等比缩放。
- 要实现文字水印,可以先将文字转换为图片,再使用此接口添加水印。
- 配置预览显示模式。推流SDK支持三种预览模式,预览显示模式不影响推流。
- AlivcPreviewDisplayMode.ALIVC_LIVE_PUSHER_PREVIEW_SCALE_FILL:预览显示时,铺满窗口。当视频比例和窗口比例不一致时,预览会有变形。
- AlivcPreviewDisplayMode.ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FIT:预览显示时,保持视频比例。当视频比例与窗口比例不一致时,预览会有黑边。
- AlivcPreviewDisplayMode.ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FILL:预览显示时,剪切视频以适配窗口比例。当视频比例和窗口比例不一致时,预览会裁剪视频。
示例代码如下:
mAlivcLivePushConfig.setPreviewDisplayMode(AlivcPreviewDisplayMode.ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FIT);
使用推流SDK推流(基础版)
- 接口的调用需要对接口抛出的异常进行处理,添加try catch处理操作。
- 接口调用的顺序必须按照说明的顺序调用,否则会因调用顺序不正确而出现异常。
- 初始化。
在配置好推流参数后,可以使用推流SDK的init方法进行初始化。示例代码如下:
AlivcLivePusher mAlivcLivePusher = new AlivcLivePusher(); mAlivcLivePusher.init(mContext, mAlivcLivePushConfig);
说明 AlivcLivePusher目前不支持多实例,所以一个init必须对应有一个destory。 - 注册推流回调。推流回调分为三种:用户通过对应的回调通知,当发生对应的类型的事件时,相应的回调函数被触发运行。示例代码如下:
- Info:主要做提示和状态检测使用。
- Error:错误回调。
- Network:主要为网络相关。
设置推流错误事件。
/** * 设置推流错误事件 * * @param errorListener 错误监听器 */ mAlivcLivePusher.setLivePushErrorListener(new AlivcLivePushErrorListener() { @Override public void onSystemError(AlivcLivePusher livePusher, AlivcLivePushError error) { if (error != null) { //添加UI提示或者用户自定义的错误处理 } } @Override public void onSDKError(AlivcLivePusher livePusher, AlivcLivePushError error) { if (error != null) { //添加UI提示或者用户自定义的错误处理 } } });
设置推流通知事件。
/** * 设置推流通知事件 * * @param infoListener 通知监听器 */ mAlivcLivePusher.setLivePushInfoListener(new AlivcLivePushInfoListener() { @Override public void onPreviewStarted(AlivcLivePusher pusher) { //预览开始通知 } @Override public void onPreviewStoped(AlivcLivePusher pusher) { //预览结束通知 } @Override public void onPushStarted(AlivcLivePusher pusher) { //推流开始通知 } @Override public void onFirstAVFramePushed(AlivcLivePusher alivcLivePusher) { //发送第一个音视频包成功通知 } @Override public void onPushPauesed(AlivcLivePusher pusher) { //推流暂停通知 } @Override public void onPushResumed(AlivcLivePusher pusher) { //推流恢复通知 } @Override public void onPushStoped(AlivcLivePusher pusher) { //推流停止通知 } @Override public void onPushRestarted(AlivcLivePusher pusher) { //推流重启通知 } @Override public void onFirstFramePreviewed(AlivcLivePusher pusher) { //首帧渲染通知 } @Override public void onDropFrame(AlivcLivePusher pusher, int countBef, int countAft) { //丢帧通知 } @Override public void onAdjustBitRate(AlivcLivePusher pusher, int curBr, int targetBr) { //调整码率通知 } @Override public void onAdjustFps(AlivcLivePusher pusher, int curFps, int targetFps) { //调整帧率通知 } @Override public void onPushStatistics(AlivcLivePusher alivcLivePusher, AlivcLivePushStatsInfo alivcLivePushStatsInfo) { //直播推流器统计数据回调(每2秒回调一次) } @Override public void onSetLiveMixTranscodingConfig(AlivcLivePusher alivcLivePusher, boolean isSuccess, String msg) { //设置云端的混流(转码)参数回调,对应于setLiveMixTranscodingConfig接口,仅互动模式下生效 } });
设置网络通知事件。
/** * 设置网络通知事件 * * @param infoListener 通知监听器 */ mAlivcLivePusher.setLivePushNetworkListener(new AlivcLivePushNetworkListener() { @Override public void onNetworkPoor(AlivcLivePusher pusher) { //网络差通知 } @Override public void onNetworkRecovery(AlivcLivePusher pusher) { //网络恢复通知 } @Override public void onReconnectStart(AlivcLivePusher pusher) { //重连开始通知 } @Override public void onConnectionLost(AlivcLivePusher alivcLivePusher) { //连接断开通知 } @Override public void onReconnectFail(AlivcLivePusher pusher) { //重连失败通知 } @Override public void onReconnectSucceed(AlivcLivePusher pusher) { //重连成功通知 } @Override public void onSendDataTimeout(AlivcLivePusher pusher) { //发送数据超时通知 } @Override public void onConnectFail(AlivcLivePusher pusher) { //连接失败通知 } @Override public String onPushURLAuthenticationOverdue(AlivcLivePusher alivcLivePusher) { //鉴权过期通知 return null; } @Override public void onSendMessage(AlivcLivePusher alivcLivePusher) { //发送sei通知 } @Override public void onPacketsLost(AlivcLivePusher alivcLivePusher) { //推流过程丢包回调 } });
设置背景音乐播放通知事件。
/** * 设置背景音乐播放通知事件 * * @param pushBGMListener 通知监听器 */ mAlivcLivePusher.setLivePushBGMListener(new AlivcLivePushBGMListener() { @Override public void onStarted() { //播放开始通知 } @Override public void onStoped() { //播放停止通知 } @Override public void onPaused() { //播放暂停通知 } @Override public void onResumed() { //播放恢复通知 } @Override public void onProgress(long l, long l1) { //播放进度通知 } @Override public void onCompleted() { //播放结束通知 } @Override public void onDownloadTimeout() { //播放超时通知 } @Override public void onOpenFailed() { //流无效通知 } });
- 开始预览。
livePusher对象初始化及回调配置完成之后,可以进行开始预览操作。预览时需要传入摄像头预览的显示SurfaceView。示例代码如下:
mAlivcLivePusher.startPreview(mSurfaceView)//开始预览,也可根据需求调用异步接口startPreviewAysnc来实现
重要 部分接口(如背景音乐、摄像头相关操作)必须在设置预览之后才能调用。因此,建议开始推流前先进行预览。 - 开始推流。
预览成功后才可以开始推流,因此需监听onPreviewStarted回调,在回调里面添加如下代码。
mAlivcLivePusher.startPush(mPushUrl);
说明- 推流SDK同时提供了异步方法,可调用startPushAysnc来实现。
- 推流SDK支持RTMP格式和RTS格式的推流地址,且RTS推流相对于RTMP推流稳定性和抗弱网有显著提升,建议用户优先使用RTS推流。RTMP和RTS推流效果对比及RTS推流方法,请参见推流SDK进行RTS推流指南。
- 使用正确的推流地址开始推流后,可用播放器(阿里云播放器、FFplay、VLC等)进行拉流测试,拉流地址获取请参见推流地址和播放地址。
- 设置其他推流控制。
推流控制主要包括开始推流、停止推流、停止预览、重新推流、暂停推流、恢复推流、销毁推流等操作,用户可以根据业务需求添加按钮进行操作。示例代码如下:
/*正在推流状态下可调用暂停推流。暂停推流后,视频预览和视频推流保留在最后一帧,音频推流继续*/ mAlivcLivePusher.pause(); /*暂停状态下可调用恢复推流。恢复推流后,音视频预览与推流恢复正常*/ mAlivcLivePusher.resume(); /*推流状态下可调用停止推流,完成后推流停止*/ mAlivcLivePusher.stopPush(); /*在预览状态下才可以调用停止预览,正在推流状态下,调用停止预览无效。预览停止后,预览画面定格在最后一帧*/ mAlivcLivePusher.stopPreview(); /*推流状态下或者接收到所有Error相关回调状态下可调用重新推流, 且Error状态下只可以调用此接口(或者reconnectPushAsync重连)或者调用destory销毁推流。完成后重新开始推流,重启ALivcLivePusher内部的一切资源,包括预览、推流等等restart*/ mAlivcLivePusher.restartPush(); /*推流状态下或者接收到AlivcLivePusherNetworkDelegate相关的Error回调状态下可调用此接口, 且Error状态下只可以调用此接口(或者restartPush重新推流)或者调用destory销毁推流。完成后推流重连,重新链接推流RTMP*/ mAlivcLivePusher.reconnectPushAsync(); /*销毁推流后,推流停止,预览停止,预览画面移除。AlivcLivePusher相关的一切资源销毁*/ mAlivcLivePusher.destroy();
- 设置背景音乐。
推流SDK提供了背景音乐播放、混音、降噪、耳返、静音等功能。示例代码如下:
/*开始播放背景音乐。*/ mAlivcLivePusher.startBGMAsync(mPath); /*停止播放背景音乐。若当前正在播放BGM,并且需要切换歌曲,只需要调用开始播放背景音乐接口即可,无需停止当前正在播放的背景音乐*/ mAlivcLivePusher.stopBGMAsync(); /*暂停播放背景音乐,背景音乐开始播放后才可调用此接口*/ mAlivcLivePusher.pauseBGM(); /*恢复播放背景音乐,背景音乐暂停状态下才可调用此接口*/ mAlivcLivePusher.resumeBGM(); /*开启循环播放音乐*/ mAlivcLivePusher.setBGMLoop(true); /*设置降噪开关。打开降噪后,将对采集到的声音中非人声的部分进行过滤处理。可能存在对人声稍微抑制作用,建议让用户自由选择是否开启降噪功能,默认不使用*/ mAlivcLivePusher.setAudioDenoise(true); /*设置耳返开关。耳返功能主要应用于KTV场景。打开耳返后,插入耳机将在耳机中听到主播说话声音。关闭后,插入耳机无法听到人声。未插入耳机的情况下,耳返不起作用*/ mAlivcLivePusher.setBGMEarsBack(true); /*混音设置,提供背景音乐和人声采集音量调整*/ mAlivcLivePusher.setBGMVolume(50);//设置背景音乐音量 mAlivcLivePusher.setCaptureVolume(50);//设置人声采集音量 /*设置静音。静音后音乐声音和人声输入都会静音。要单独设置音乐或人声静音可以通过混音音量设置接口来调整*/ mAlivcLivePusher.setMute(true);
重要 背景音乐相关接口在开始预览之后才可调用。 - 设置推流截图。
推流SDK提供了本地视频流截图功能,示例代码如下:
// 视频流截图,参数:截取图片的个数、每张图片的间隔、接口回调 pusher.snapshot(1, 1, new AlivcSnapshotListener() { @Override public void onSnapshot(Bitmap bmp) { // 可以将截图转储到本地png文件,下面是示例代码 String dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss-SS").format(new Date()); File f = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "snapshot-" + dateFormat + ".png"); if (f.exists()) { f.delete(); } try { FileOutputStream out = new FileOutputStream(f); bmp.compress(Bitmap.CompressFormat.PNG, 90, out); out.flush(); out.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } });
- 摄像头相关操作。
摄像头相关操作包括推流状态、暂停状态、重连状态等,可操作摄像头切换、闪关灯、焦距、变焦和镜像设置等。示例代码如下:
/*切换前后摄像头*/ mAlivcLivePusher.switchCamera(); /*开启/关闭闪光灯,在前置摄像头时开启闪关灯无效*/ mAlivcLivePusher.setFlash(true); /*焦距调整,即可实现采集画面的缩放功能。缩放范围为[0,getMaxZoom()]。*/ mAlivcLivePusher.setZoom(5); /*手动对焦。手动聚焦需要传入两个参数:1.point 对焦的点(需要对焦的点的坐标);2.autoFocus 是否需要自动对焦,只有本次对焦操作调用该接口时,该参数才生效。后续是否自动对焦沿用上述自动聚焦接口设置值*/ mAlivcLivePusher.focusCameraAtAdjustedPoint(x, y, true); /*设置是否自动对焦*/ mAlivcLivePusher.setAutoFocus(true); /*镜像设置。镜像相关接口有两个,PushMirror推流镜像和PreviewMirror预览镜像。PushMirror设置仅对播放画面生效,PreviewMirror仅对预览画面生效,两者互不影响*/ mAlivcLivePusher.setPreviewMirror(false); mAlivcLivePusher.setPushMirror(false);
重要 您摄像头相关接口只能在开始预览之后调用。 - 配置外部音视频输入。
推流SDK支持将外部的音视频源输入进行推流,比如推送一个音视频文件。
- 动态贴纸。
推流SDK实现了在直播流中添加动态贴纸效果,使用此功能可实现动态水印效果。
- 其他接口的使用。
/*在自定义模式下,用户可以实时调整最小码率和目标码率*/ mAlivcLivePusher.setTargetVideoBitrate(800); mAlivcLivePusher.setMinVideoBitrate(400); /*是否支持自动对焦*/ mAlivcLivePusher.isCameraSupportAutoFocus(); /*是否支持闪光灯*/ mAlivcLivePusher.isCameraSupportFlash(); /*获取是否正在推流的状态*/ mAlivcLivePusher.isPushing(); /*获取推流地址*/ mAlivcLivePusher.getPushUrl(); /*获取推流性能调试信息。推流性能参数具体参数和描述参考API文档或者接口注释*/ mAlivcLivePusher.getLivePushStatsInfo(); /*获取版本号*/ mAlivcLivePusher.getSDKVersion(); /*设置log级别,根据需求过滤想要的调试信息*/ mAlivcLivePusher.setLogLevel(AlivcLivePushLogLevelAll); /*获取当前sdk状态*/ AlivcLivePushStats getCurrentStatus(); /*获取上一个错误码,如无错误返回:ALIVC_COMMON_RETURN_SUCCESS*/ AlivcLivePushError getLastError();
设置录屏推流(基础版)
推流SDK支持录屏推流。使用录屏推流需在初始化操作、设置预览及开始推流之后进行相关配置。具体操作如下:
- 配置录屏模式。Android推流SDK支持三种录屏模式,请按需设置。
录屏模式 所需配置 录屏时不开启摄像头 - 在config中设置权限请求的返回数据即可。
录屏时开启摄像头 说明 主播端有摄像头预览,同样观众端也有摄像头画面(通过录屏录制进去)- 在config中设置权限请求的返回数据。
- 调用StartCamera传入surfaceView。
录屏时开启摄像头 说明 主播端无摄像头预览,观众端有摄像头画面叠加- 在config中设置权限请求的返回数据。
- 调用StartCamera无需传入surfaceView。
- 调用startCameraMix传入观众端摄像头画面显示位置。
- 设置开启录屏权。录屏采用MediaProjection,需要用户请求权限,将权限请求返回的数据通过此接口设置,即开启录屏模式。录屏情况下,默认不开启摄像头。请在推流配置里进行配置,示例代码如下:
mAlivcLivePushConfig.setMediaProjectionPermissionResultData(resultData)
- 设置摄像头预览。在录屏开启成功后,调用开启或关闭摄像头预览接口,示例代码如下:
mAlivcLivePusher.startCamera(surfaceView);//开启摄像头预览 mAlivcLivePusher.stopCamera();//关闭摄像头预览
说明- 录屏模式下摄像头预览surfaceView的长宽建议设置成1:1,这样在屏幕旋转时无需调整surfaceview。
- 若设置的长宽不为1:1,则需要在屏幕旋转时,调整surfaceView的比例后,先stopCamera再startCamera。
- 如果主播端不需要预览,则surfaceview填为null。
- 设置摄像头混流。当主播端不需要摄像头预览,观众端需要的情况可开启混流,主要应用于游戏直播,主播不想玩游戏的时候摄像头画面挡住游戏画面,示例代码如下:
/** * @param x 混流显示x初始位置(0~1.0f) * @param y 混流显示y初始位置(0~1.0f) * @param w 混流显示宽度(0~1.0f) * @param h 混流显示高度(0~1.0f) * @return */ mAlivcLivePusher.startCameraMix(x, y, w, h);//开启摄像头混流 mAlivcLivePusher.stopCameraMix();//停止摄像头混流
- 设置屏幕旋转。录屏模式下,可设置感应的屏幕旋转角度,支持横屏和竖屏录制,示例代码如下:
mAlivcLivePusher.setScreenOrientation(0);
说明 在横竖屏切换时,需要在应用层监听OrientationEventListener事件,并将旋转角度设置到此接口。 - 设置隐私。当主播在录屏时要进行密码输入等操作时,主播可以开启隐私保护功能,结束操作后可以关闭隐私,示例代码如下:
mAlivcLivePusher.pauseScreenCapture();//开启隐私保护 mAlivcLivePusher.resumeScreenCapture();//关闭隐私保护
说明 暂停录屏,如果在config中设置了setPausePushImage则观众端会在此接口后显示图片。如果没有,则观众端停留在最后一帧。
设置直播连麦互动(互动版)
直播推流SDK互动版V4.4.4及以上版本提供基于RTC的连麦互动能力,V4.4.5及以上版本提供基于RTC的连麦PK互动能力,用户可以使用推流SDK互动版本完成主播和连麦观众超低延时(300ms以内)互动,直播连麦相关的功能使用,请参见连麦互动开发指南和主播PK互动开发指南。
注意事项
使用Android推流SDK需要注意以下事项:
事项 | 说明 |
---|---|
混淆规则 | 检查混淆,确认已将SDK相关包名加入至不混淆名单中。
|
接口调用 |
|
历史版本升级说明 | 由于旧版本已暂停维护,如您使用的Android推流SDK版本低于4.1.0,请将推流SDK升级至最新版,版本升级详情请参见V4.0.2升级至V4.1.0及以上迁移说明。 重要 升级时需注意集成最新的播放器SDK。 |