功能使用

更新时间:2025-04-08 03:08:43

本文主要介绍了Android端直播推流SDK的功能和使用方法。包括SDK的主要接口、基本使用流程说明,同时还提供了相关功能的使用示例。旨在帮助开发者更好地理解和应用SDK进行直播推流操作。

功能特性

  • 支持RTMP推流协议。

  • 支持基于RTCRTS超低延时直播推拉流协议。

  • 支持连麦互动和PK互动。

  • 使用视频H.264编码以及音频AAC编码。

  • 支持码控、分辨率、显示模式等自定义配置。

  • 支持多种摄像头相关操作。

  • 支持实时美颜和自定义美颜效果调节。

  • 支持增、删动态贴纸实现动态水印效果。

  • 支持录屏直播。

  • 支持自定义YUV、PCM等外部音视频输入。

  • 支持多路混流功能。

  • 支持纯音视频推流以及后台推流。

  • 支持背景音乐及其相关操作。

  • 支持视频截图功能。

  • 支持自动重连、异常处理。

  • 支持音频3A算法。

  • 增加视频软编、硬编切换逻辑,提升编码模块稳定性。

功能限制

使用Android推流SDK需注意以下限制:

  • 您只能在推流之前设置横竖屏模式,不支持在直播的过程中实时切换。

  • 在推流设定为横屏模式时,需设定界面为不允许自动旋转。

  • 在硬编模式下,考虑编码器兼容问题分辨率会使用16的倍数,如设定为540P,则输出的分辨率为544*960,在设置播放器视图大小时需按输出分辨率等比缩放,避免黑边等问题。

使用流程

基本使用流程如下:

  1. 注册SDK

  2. 配置推流参数

  3. 推流

功能使用

注册SDK

申请并配置License请参见License集成指南

说明

在使用推流功能之前,需要先进行注册,否则将无法使用推流SDK功能。

请在较早的位置(使用推流SDK前)调用注册License接口

AlivcLiveBase.setListener(new AlivcLiveBaseListener() {
  @Override
  public void onLicenceCheck(AlivcLivePushConstants.AlivcLiveLicenseCheckResultCode result, String reason) {
    Log.e(TAG, "onLicenceCheck: " + result + ", " + reason);
  }
});
AlivcLiveBase.registerSDK();
  • 通过AlivcLiveBase类,可以设置日志级别、设置本地日志路径、获取SDK版本等。

  • 接入方需要调用AlivcLiveBase中的registerSDK方法,进行SDK License注册。

  • AlivcLiveBase#setListener接口的onLicenceCheck方法,异步判断License是否配置成功。

    说明

    该回调仅在初始化pusher实例后触发。

配置推流参数

基本推流配置对应参数都有默认值,建议采用默认值,即您可以进行简单初始化,不做配置。

// 初始化推流配置类
AlivcLivePushConfig 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)。

  • 关闭码率控制后,码率将固定在初始码率,不会在设定的目标码率和最小码率之间自适应调整。如果网络情况不稳定,可能造成播放卡顿,请慎用。

推流(摄像头推流)

  1. 初始化。

    在配置好推流参数后,可以使用推流SDKinit方法进行初始化。示例代码如下:

    AlivcLivePusher mAlivcLivePusher = new AlivcLivePusher();
    mAlivcLivePusher.init(mContext, mAlivcLivePushConfig);
    说明

    AlivcLivePusher目前不支持多实例,所以一个init必须对应有一个destroy。

  2. 注册预览回调。

    注册预览回调可通过setLivePushInfoListener方法实现:

    /**
     * 设置推流通知事件
     *
     * @param infoListener 通知监听器
     */
    mAlivcLivePusher.setLivePushInfoListener(new AlivcLivePushInfoListener() {
        @Override
        public void onPreviewStarted(AlivcLivePusher pusher) {
            //预览开始通知
        }
        //其他Override方法
        //....
        //....
    });

  3. 开始预览。

    livePusher对象初始化及回调配置完成之后,可以进行开始预览操作。预览时需要传入摄像头预览的显示SurfaceView。示例代码如下:

    mAlivcLivePusher.startPreview(mSurfaceView)//开始预览,也可根据需求调用异步接口startPreviewAysnc来实现
  4. 开始推流。

    onPreviewStarted回调方法内添加如下代码。

    mAlivcLivePusher.startPush(mPushUrl);
    说明

常用推流方法

推流控制主要包括开始推流、停止推流、停止预览、重新推流、暂停推流、恢复推流、销毁推流等操作,用户可以根据业务需求添加按钮进行操作。

/*正在推流状态下可调用暂停推流。暂停推流后,视频预览和视频推流保留在最后一帧,音频推流继续*/
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();

摄像头相关操作

摄像头相关操作包括推流状态、暂停状态、重连状态等,还可操作摄像头切换、闪光灯、焦距、变焦和镜像设置等。示例代码如下:

/*切换前后摄像头*/
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支持录屏推流。使用录屏推流需在初始化操作、设置预览及开始推流之后进行相关配置。录屏采用MediaProjection,需要用户请求权限,将权限请求返回的数据通过此接口设置,即开启录屏模式。录屏情况下,默认不开启摄像头。

设置录屏推流

//resultData 录屏系统intent
mAlivcLivePushConfig.setMediaProjectionPermissionResultData(resultData);

设置屏幕旋转

录屏模式下,可设置感应的屏幕旋转角度,支持横屏和竖屏录制,示例代码如下:

mAlivcLivePusher.setScreenOrientation(0);
说明

需要在应用层监听OrientationEventListener事件,在横竖屏切换时,将旋转角度设置到此接口。

设置隐私

当主播在录屏时要进行密码输入等操作时,主播可以开启隐私保护功能,结束操作后可以关闭隐私,示例代码如下:

mAlivcLivePusher.pauseScreenCapture();//开启隐私保护
mAlivcLivePusher.resumeScreenCapture();//关闭隐私保护
说明

暂停录屏,如果在config中设置了setPausePushImage则观众端会在此接口后显示图片。如果没有,则观众端停留在最后一帧。

录屏+摄像头推流

在进行录屏推流时,可以开启摄像头实现录屏+摄像头推流,录屏+摄像头推流分为两种情况:

  1. 主播端有摄像头预览画面。

    主播和观众都能看到摄像头的画面。

  2. 主播端没有摄像头预览画面。

    比如游戏直播时,主播不想让摄像头画面挡住游戏画面。而观众端观看到的直播内容包含主播的摄像头画面。

主播端有摄像头预览画面

在录屏开启成功后,调用开启或关闭摄像头预览接口。

mAlivcLivePusher.startCamera(surfaceView);//开启摄像头预览
mAlivcLivePusher.stopCamera();//关闭摄像头预览
说明
  • 录屏模式下摄像头预览surfaceView的长宽建议设置成1:1,这样在屏幕旋转时无需调整surfaceview。

  • 若设置的长宽不为1:1,则需要在屏幕旋转时,调整surfaceView的比例后,先stopCamerastartCamera。

  • 如果主播端不需要预览,则surfaceview填为null。

主播端没有摄像头预览画面

当主播端不需要摄像头预览而观众端需要时,可以开启摄像头混流。

mAlivcLivePusher.startCameraMix(x, y, w, h);//开启摄像头混流
mAlivcLivePusher.stopCameraMix();//停止摄像头混流

预览显示模式

推流SDK支持三种预览模式,预览显示模式不影响推流。

  • ALIVC_LIVE_PUSHER_PREVIEW_SCALE_FILL:预览显示时,铺满窗口。当视频比例和窗口比例不一致时,预览会有变形。

  • ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FIT:预览显示时,保持视频比例。当视频比例与窗口比例不一致时,预览会有黑边。

  • ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FILL:预览显示时,剪切视频以适配窗口比例。当视频比例和窗口比例不一致时,预览会裁剪视频。

示例代码如下:

mAlivcLivePushConfig.setPreviewDisplayMode(AlivcPreviewDisplayMode.ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FIT);

图片推流

为了更好的用户体验,推流SDK提供了后台图片推流和码率过低时进行图片推流的设置。

SDK退至后台时默认暂停推流视频,只推音频流,此时可以进行图片推流。例如,在图片上提醒用户主播离开片刻,稍后回来

mAlivcLivePushConfig.setPausePushImage("退后台png图片路径");//设置用户后台推流的图片

当网络较差时您可以根据自己的需求设置推流一张静态图片。设置图片后,SDK检测到当前码率较低时,会推流此图片,避免视频流卡顿。示例代码如下所示:

mAlivcLivePushConfig.setNetworkPoorPushImage("网络差png图片路径");//设置网络较差时推流的图片

纯音频推流

mAlivcLivePushConfig.setAudioOnly(true);

推送外部音视频流

推流SDK支持将App外部的音视频源输入进行推流,比如推送一个音视频文件。

推送外部音视频流之前,需要开启自定义音视频流输入功能。

/**
* 其他参数:如输出分辨率,音频采样率,通道数等在config里,setResolution,setAudioSamepleRate,setAudioChannels里设置
*/
mAlivcLivePushConfig.setExternMainStream(true,AlivcImageFormat.IMAGE_FORMAT_YUVNV12,AlivcSoundFormat.SOUND_FORMAT_S16);

开启自定义音视频流输入功能之后,就可以推送外部音视频流。

推送外部音频流

/**
* 此接口不控制时序,需要调用方控制输入音频帧的时序
*/
mAlivcLivePusher.inputStreamAudioData(byte[] data, int size, int sampleRate, int channels, long pts);

推送外部视频流

/**
* 此接口不控制时序,需要调用方控制输入视频帧的时序
*/
mAlivcLivePusher.inputStreamVideoData(byte[] data, int width, int height, int stride, int size, long pts, int rotation);

配置水印

推流SDK提供了添加水印功能,并且支持添加多个水印。水印图片必须为PNG格式图片。示例代码如下:

mAlivcLivePushConfig.addWaterMark(waterPath,0.1,0.2,0.3);//添加水印
说明
  • x、y、width为相对值,例如x0.1表示水印的x值为推流画面x轴的10%位置,如果推流分辨率为540*960,则水印x值为54。

  • 水印图片的高度,按照水印图片的真实宽高与输入的width值等比缩放。

  • 要实现文字水印,可以先将文字转换为图片,再使用此接口添加水印。

设置视频质量

视频质量支持三种模式:清晰度优先模式,流畅度优先模式,自定义模式。

重要

设置视频质量需要开启码率控制:mAlivcLivePushConfig.setEnableBitrateControl(true);

清晰度优先模式(默认)

清晰度优先模式下,SDK内部会对码率参数进行配置,优先保障推流视频的清晰度。

mAlivcLivePushConfig.setQualityMode(AlivcQualityModeEnum.QM_RESOLUTION_FIRST);//清晰度优先

流畅度优先模式

流畅度优先模式下,SDK内部会对码率参数进行配置,优先保障推流视频的流畅度。

mAlivcLivePushConfig.setQualityMode(AlivcQualityModeEnum.QM_FLUENCY_FIRST);//流畅度优先

自定义模式

自定义模式下,SDK会根据开发者设置的码率进行配置。设置为自定义模式时,需要自己定义初始码率、最小码率和目标码率。

  • 目标码率:当网络较好时,码率会逐步提高到目标码率,以提高视频清晰度。

  • 最小码率:当网络较差时,码率会逐步降低到最小码率,以减少视频的卡顿。

  • 初始码率:开始直播时的码率。

mAlivcLivePushConfig.setQualityMode(AlivcQualityModeEnum.QM_CUSTOM);//自定义模式
mAlivcLivePushConfig.setTargetVideoBitrate(1000); //目标码率1000kbps
mAlivcLivePushConfig.setMinVideoBitrate(300); //最小码率300kbps
mAlivcLivePushConfig.setInitialVideoBitrate(800); //初始码率800kbps

设置自定义码率时,请参考阿里云推荐设置配置对应码率。推荐设置请参考下表内容:

表 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
重要
  • 分辨率自适应只有在视频质量模式为清晰度优先或流畅度优先时才会生效,自定义模式时无效。

  • 某些播放器可能不支持动态分辨率,如果您需要使用分辨率自适应功能,建议使用阿里云播放器。

背景音乐

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

后台运行和锁屏

  • App退至后台或锁屏时,您可调用AlivcLivePusherpause()或resume()接口,暂停或恢复推流。

  • 对于非系统的音视频通话,SDK会采集声音并推送出去,您可以根据业务需求在退后台或锁屏时调用静音接口mAlivcLivePusher.setMute(truefalse)来决定后台时是否采集音频。

回调监听

回调类型

回调类名

设置方法

回调类型

回调类名

设置方法

推流回调

AlivcLivePushInfoListener

mAlivcLivePusher.setLivePushInfoListener()

网络相关回调

AlivcLivePushNetworkListener

mAlivcLivePusher.setLivePushNetworkListener()

错误回调

AlivcLivePushErrorListener

mAlivcLivePusher.setLivePushErrorListener()

背景音乐回调

AlivcLivePushBGMListener

mAlivcLivePusher.setLivePushBGMListener()

推流回调

推流回调用于向App通知SDK相应状态,包括预览开始、渲染第一帧视频、发送第一帧音视频流、推流开始、推流停止等回调。

  • onPushStarted:表示连接服务端成功。

  • onFirstFramePushed:表示发送第一帧音视频流成功。

  • onPushStarted、onFirstFramePushed:表示SDK推流成功。

网络相关回调

网络相关回调用于向App通知SDK相应网络状态和链接状态。短时间的网络波动或者网络切换,时长在AlivcLivePushConfig设置的重连超时时长和次数范围之内,SDK会进行自动重连,重连成功之后将继续推流。

在基础直播场景中:

  • onConnectFail:表示推流失败,建议检查推流地址是否非法、是否存在非法字符、鉴权是否有问题、是否超过最大推流并发限制、是否在禁推黑名单中等,确定推流地址合法且可用后再尝试推流。其中具体错误码有0x30020901 ~ 0x30020905, 0x30010900 ~ 0x30010901。

  • onConnectionLost:链接断开回调,链接断开后SDK内部会自动重连,回抛onReconnectStart,如果超过最大重连次数(config.connectRetryCount)后推流链接还是没有恢复,会回抛onReconnectFail。

  • onNetworkPoor:网络慢回调,当收到此回调说明当前网络对于推流的支撑度不足,此时推流仍在继续、没有中断。您可以在此处理自己的业务逻辑,比如UI提醒用户。

  • onNetworkRecovery:网络恢复回调。

  • onReconnectFail:断网时长超出AlivcLivePushConfig设置的重连超时时长和次数范围时,SDK自动重连失败,会回调该方法,在网络恢复之后可调用mAlivcLivePusher.reconnectPushAsync接口进行重连。

  • onSendDataTimeout:送数据超时回调,建议检查当前网络,待网络恢复时,结束推流后重新开始推流。

  • onPushURLAuthenticationOverdue:鉴权过期回调,此回调表示当前推流URL鉴权过期,需要给SDK传递一个新的URL。

在连麦互动直播场景中:

  • onConnectFail:表示推流失败,建议检查连麦推流地址中token是否非法、网络是否异常等。确定推流地址合法且网络正常可用后再尝试推流。

  • onConnectionStatusChange:连接状态改变的回调,在该回调中会返回连接的相关状态,例如网络连接断开、建立网络连接中、网络已连接、网络连接失败等。当回调AliLiveConnectionStatusFailed状态时,表示链接无法恢复,建议检查当前网络,待网络恢复后重新推流。建议在互动模式下接入该回调,以获取连接相关状态。

  • onPushURLTokenWillExpire:连麦推流地址中的token即将过期。在token过期前30秒,会触发该回调。收到该回调后,应该及时向业务服务器请求带有新token的连麦推流地址,并通过mAlivcLivePusher.refreshPushURLToken接口将新的token传入SDK。

  • onPushURLTokenExpired:连麦推流URLtoken已经过期。该回调触发代表token鉴权信息已过期,需要在结束推流后使用新的tokenURL重新推流。

  • onNetworkQualityChanged:当前用户上行网络质量回调,当上行网络质量发生变化时,会回调当前上行网络质量评级。

  • onConnectionLost:连接断开回调,不同于基础模式,在互动模式下,当触发onConnectionLost回调时,表示连接无法恢复。建议检查当前网络情况,并在网络恢复后重新进行推流。

错误回调

  • onSystemError:系统设备异常回调,需要销毁引擎重新尝试。

  • onSDKError:SDK错误回调,需要根据错误码做不同的处理:

    • 如果错误码是805438211,表示设备性能差,编码和渲染帧率过低,需要给主播提示,并在app层停掉处理耗时长的业务逻辑(比如高级美颜、动画等)。

    • 您需要特别处理App没有麦克风权限和没有摄像头权限的回调,App没有麦克风权限错误码为268455940,App没有摄像头权限错误码为268455939。

    • 其他的暂时都只打日志,不做其他额外操作。

背景音乐回调

  • onOpenFailed:背景音乐开启失败,检查背景音乐开始播放接口所传入的音乐路径与该音乐文件是否正确,可调用startBGMAsync重新播放。

  • onDownloadTimeout:背景音乐播放超时,多出现于播放网络URL的背景音乐,提示主播检查当前网络状态,可调用startBGMAsync重新播放。

常用方法和接口

常用方法

/*在自定义模式下,用户可以实时调整最小码率和目标码率*/
mAlivcLivePusher.setTargetVideoBitrate(800);
mAlivcLivePusher.setMinVideoBitrate(400);
/*是否支持自动对焦*/
mAlivcLivePusher.isCameraSupportAutoFocus();
/*是否支持闪光灯*/
mAlivcLivePusher.isCameraSupportFlash();
/*获取是否正在推流的状态*/
mAlivcLivePusher.isPushing(); 
/*获取推流地址*/
mAlivcLivePusher.getPushUrl();
/*获取推流性能调试信息。推流性能参数具体参数和描述参考API文档或者接口注释*/
mAlivcLivePusher.getLivePushStatsInfo();
/*获取版本号*/
mAlivcLivePusher.getSDKVersion();
/*设置log级别,根据需求过滤想要的调试信息*/
mAlivcLivePusher.setLogLevel(AlivcLivePushLogLevelAll);
/*获取当前sdk状态*/
mAlivcLivePusher.getCurrentStatus();
/*获取上一个错误码,如无错误返回:ALIVC_COMMON_RETURN_SUCCESS*/
mAlivcLivePusher.getLastError();

常用接口列表

说明

说明

AlivcLivePushConfig

推流初始配置

AlivcLivePusher

推流功能类

AlivcLivePusherErrorListener

错误回调

AlivcLivePusherNetworkListener

网络相关通知回调

AlivcLivePusherInfoListener

推流相关信息回调

AlivcLivePusherBGMListener

背景音乐回调

AlivcLivePushCustomFilter

自定义滤镜回调

AlivcLivePushCustomDetect

自定义人脸检测回调

AlivcSnapshotListener

截图回调

集成美颜功能

如需在推流SDK中使用美颜功能,需要引入美颜库并配置对应回调。

说明

使用美颜功能,需要获取美颜特效License授权,操作指引可参见获取美颜特效SDK License

  1. 通过Maven方式引入美颜库及美颜面板,在工程的build.gradle文件中添加如下代码,美颜SDK版本请参考最新Demo

    implementation "com.aliyun.maliang.android:queen:2.5.0-official-full"
    implementation("com.aliyun.maliang.android:queen_menu:2.5.0-official-full") {
        exclude group: 'com.aliyun.maliang.android', module: 'queen'
    }

    还可以集成Demo中的LiveBeauty模块:

    文件或文件夹

    功能描述

    文件或文件夹

    功能描述

    live_beauty

    美颜基础抽象类

    queen_beauty

    美颜基础UI控件

  2. 获取美颜插件库LiveBeauty。

    1. 通过clone命令从此路径(LiveBeauty)下载相关插件库代码到本地。

    2. git clone https://github.com/MediaBox-Demos/amdemos-android-live.git
    3. Android Studio项目根目录下打开命令行。执行如下代码,再通过File > New > Import Module LiveBeauty 模块导入到你的Android项目中。

    4. git submodule add https://github.com/MediaBox-Demos/amdemos-android-live.git ***/***/***
      说明

      示例代码中“***/***/***”是你想要放置LiveBeauty模块的位置

    5. 在项目的settings.gradle文件中添加模块的路径:

    6. include ':app', ':LiveBeauty', ':LiveBeauty:live_queenbeauty'
      说明

      示例代码中,“app”为主模块。

    7. 同时在项目主模块的build.gradle文件中,添加对 LiveBeauty 模块的依赖:

    8. dependencies {
          implementation project(':LiveBeauty')
          implementation project(':LiveBeauty:live_queenbeauty')
      }
    9. 点击File > Sync Project with Gradle Files,等待 Gradle 同步完成后,即可使用LiveBeauty模块。

  3. 配置美颜插件UI模块。

    1. 在本项目的布局XML文件中添加 QueenBeautyMenu 的控件。例如:

    2. <com.aliyunsdk.queen.menu.QueenBeautyMenu
          android:id="@+id/beauty_beauty_menuPanel"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:layout_alignParentBottom="true"
          android:layout_centerHorizontal="true" />
    3. Activity中初始化QueenBeautyMenu。例如:

    4. // 初始化美颜菜单面板
      QueenMenuPanel beautyMenuPanel = QueenBeautyMenu.getPanel(context);
      beautyMenuPanel.onHideMenu(); 
      beautyMenuPanel.onHideValidFeatures(); 
      beautyMenuPanel.onHideCopyright(); 
      
      // 在布局中添加美颜菜单
      QueenBeautyMenu beautyBeautyContainerView = findViewById(R.id.beauty_beauty_menuPanel);
      beautyBeautyContainerView.addView(beautyMenuPanel);
  4. 设置人脸面部识别及美颜回调。

    如果您有接入第三方美颜库的需求,可设置setCustomDetectsetCustomFilter回调。

    • AlivcLivePushCustomDetect回调函数customDetectProcess(long data、int width、int height、int rotation、int format、long extra参数)中返回的参数data是采集数据的指针,第三方美颜库可对数据指针中的数据进行识别或者处理。

    • AlivcLivePushCustomFilter回调函数customFilterProcess(int inputTexture、inttextureWidth、int textureHeight、long extra参数)中返回的参数inputTexture是图像的纹理texture,第三方美颜库可对纹理进行处理。如果需要返回一个处理过的纹理texture,则返回texture id。否则,返回原来的inputTexture即可。

    示例代码

    /**
     * 人脸面部识别回调
     */
    mAlivcLivePusher.setCustomDetect(new AlivcLivePushCustomDetect() {
        @Override
        public void customDetectCreate() {
    
        }
    
        @Override
        public long customDetectProcess(long dataPtr, int width, int height, int rotation, int format, long extra) {
            return 0;
        }
    
        @Override
        public void customDetectDestroy() {
    
        }
    });
    
    /**
     * 美颜回调
     */
     
     /**
     * 初始化BeautyManager
     */
    mAlivcLivePusher.setCustomFilter(new AlivcLivePushCustomFilter() {
        @Override
        public void customFilterCreate() {
            initBeautyManager();
        }
    
     /**
     * 处理推流视频流,添加美颜效果
     */
        @Override
        public int customFilterProcess(int inputTexture, int textureWidth, int textureHeight, long extra) {
            if (mBeautyManager == null) {
                return inputTexture;
            }
    
            return mBeautyManager.onTextureInput(inputTexture, textureWidth, textureHeight);
        }
    
        @Override
        public void customFilterDestroy() {
            destroyBeautyManager();
        }
    });

连麦互动(互动版)

直播推流SDK互动版V4.4.4及以上版本提供基于RTC的连麦互动能力,V4.4.5及以上版本提供基于RTC的连麦PK互动能力,用户可以使用推流SDK互动版本完成主播和连麦观众超低延时(300ms以内)互动,直播连麦相关的功能使用,请参见连麦互动开发指南主播PK互动开发指南

重要

连麦互动暂不支持录屏推流。

注意事项

使用Android推流SDK需要注意以下事项:

事项

说明

事项

说明

混淆规则

检查混淆,确认已将SDK相关包名加入至不混淆名单中。

-keep class com.alivc.** { *;}

接口调用

  • 同步和异步接口都可以正常调用,尽量使用异步接口调用,可以避免对主线程的资源消耗。

  • SDK接口会在发生错误或者调用顺序不对时抛出异常(throws),调用时注意添加try catch处理,否则会造成程序的crash。

  • 接口调用顺序,如下图所示:

    image

API文档

基础版API文档

互动版API文档

常见问题

推流失败

您可以使用自助问题排查功能对推流地址进行检测,检测推流地址是否有效。

如何获取已推的音视频流信息

您可以进入流管理,在在线流中可查看并管理已推的音视频流。

如何进行播流

开始推流后,可用播放器(阿里云播放器、FFplay、VLC等)进行拉流测试,拉流地址获取请参见生成推流地址和播放地址

  • 本页导读 (1)
  • 功能特性
  • 功能限制
  • 使用流程
  • 功能使用
  • 注册SDK
  • 配置推流参数
  • 推流(摄像头推流)
  • 录屏推流(屏幕共享推流)
  • 录屏+摄像头推流
  • 预览显示模式
  • 图片推流
  • 纯音频推流
  • 推送外部音视频流
  • 配置水印
  • 设置视频质量
  • 分辨率自适应
  • 背景音乐
  • 推流截图
  • 后台运行和锁屏
  • 回调监听
  • 常用方法和接口
  • 集成美颜功能
  • 连麦互动(互动版)
  • 注意事项
  • API文档
  • 常见问题