本文主要介绍了Windows端直播推流SDK的功能和使用方法。包括SDK的主要接口、基本使用流程说明,同时还提供了相关功能的使用示例。旨在帮助开发者更好地理解和应用SDK进行直播推流操作。
功能特性
支持连麦互动和PK互动。
使用视频H.264编码以及音频OPUS\AAC编码。
使用视频H.265编码以及音频OPUS\AAC编码。
支持码控、分辨率、显示模式等自定义配置。
支持多种摄像头相关操作。
支持录屏直播。
支持自定义YUV、PCM等外部音视频输入。
支持多路混流功能。
支持纯音视频推流以及后台推流。
支持背景音乐及其相关操作。
支持自动重连、异常处理。
支持音频3A算法。
增加视频软编、硬编切换逻辑,提升编码模块稳定性。
使用流程
基本使用流程如下:
功能使用
配置推流参数
AlivcLivePushConfig可以实现对推流参数的配置,推流配置对应参数都有默认值。基础推流建议采用默认值,即您可以进行简单初始化,不做配置。
AlivcLivePushConfig config;
推流(摄像头推流)
AlivcLivePusher为使用推流SDK推流的核心类,提供初始化操作、推流回调、摄像头预览、推流控制、推流过程中的参数调节等功能。
初始化。
在配置好推流参数后,可以使用推流SDK的init方法进行初始化。示例代码如下:
AlivcLivePushConfig config; pusher->init(config);
注册推流回调。
推流回调分为三种:
Info:主要做提示和状态检测使用。
Error:错误回调。
Network:主要为网络相关。
用户通过对应的回调通知,当发生对应的类型的事件时,相应的回调函数被触发运行。示例代码如下:
pusher->setLivePushErrorListener(errorListener); pusher->setLivePushInfoListener(errorListener); pusher->setLivePushNetworkListener(errorListener);
开始预览。
livePusher对象初始化及回调配置完成之后,可以进行开始预览操作。示例代码如下:
pusher->startPreview(view, width, height);
开始推流。
pusher->startPush(url);
常用推流控制
推流控制主要包括开始推流、停止推流、停止预览、重新推流、暂停推流、恢复推流、销毁推流等操作,用户可以根据业务需求添加按钮进行操作。
使用示例:
pusher->stopPush();
录屏推流(屏幕共享推流)
录屏推流即屏幕共享推流,实现过程为获取共享源列表,然后指定共享源进行推流。具体操作:
获取共享源列表。
pusher->getScreenShareSourceInfo();
开始共享推流。
pusher->startScreenShareByDesktopId(desktopId);
desktopId:桌面Id(可通过GetScreenShareSourceInfo接口获取)。
码率控制
码率控制配置可通过有两种模式。
通过初始化参数enableBitrateControl控制。
config.enableBitrateControl = true;
开启后,码率将在SDK内部设定的目标码率和最小码率之间自适应调整,建议开启(关闭后,码率将固定在初始码率,在网络情况不稳定的情况下,可能造成播放卡顿,请慎用)。
自定义码率。
通过初始码率、最小码率和目标码率(mInitialVideoBitrate,mMinVideoBitrate,mTargetVideoBitrate)参数进行配置。
示例代码:
config.mTargetVideoBitrate = 1400; //目标码率1400kbps config.mMinVideoBitrate = 600; //最小码率600kbps config.mInitialVideoBitrate = 1000; //初始码率1000kbps
各参数取值如下:
分辨率
初始码率 initialVideoBitrate
最小码率 minVideoBitrate
目标码率 targetVideoBitrate
分辨率
初始码率 initialVideoBitrate
最小码率 minVideoBitrate
目标码率 targetVideoBitrate
360P
600
300
1000
480P
800
300
1200
540P
1000
600
1400
720P
1500
600
2000
1080P
1800
1200
2500
分辨率
初始码率 initialVideoBitrate
最小码率 minVideoBitrate
目标码率 targetVideoBitrate
分辨率
初始码率 initialVideoBitrate
最小码率 minVideoBitrate
目标码率 targetVideoBitrate
360P
400
200
600
480P
600
300
800
540P
800
300
1000
720P
1000
300
1200
1080P
1500
1200
2200
目标码率/最小码率/初始码率如果不进行配置,那么SDK会根据分辨率自动分配合适的码率进行发送,默认配置给摄像头。
图片推流
为了更好的用户体验,推流SDK提供了后台图片推流和码率过低时进行图片推流的设置。
当SDK退至后台时默认暂停推流视频,只推音频流,此时可以进行图片推流。例如,在图片上提醒用户主播离开片刻,稍后回来。
config.mPausePushImagePath = "退后台png图片路径";//设置用户后台推流的图片
回调监听
推流异常与错误可通过推流SDK回调进行接收处理。Windows推流SDK主要包含以下回调:
回调类型 | 回调类名 |
回调类型 | 回调类名 |
AlivcLivePushInfoListener | |
AlivcLivePushNetworkListener | |
AlivcLivePushErrorListener |
推流回调
推流回调用于向App通知SDK相应状态,包括预览开始、渲染第一帧视频、发送第一帧音视频流、推流开始、推流停止等回调。
onPushStarted、onFirstFramePushed:表示SDK推流成功。
onPushStarted:表示连接服务端成功。
onFirstFramePushed:表示发送第一帧音视频流成功。
网络相关回调
网络相关回调用于向App通知SDK相应网络状态和链接状态。
基础模式:基础直播场景
onConnectFail:表示推流失败,建议检查推流地址是否非法、是否存在非法字符、鉴权是否有问题、是否超过最大推流并发限制、是否在禁推黑名单中等,确定推流地址合法且可用后再尝试推流。其中具体错误码有0x30020901 ~ 0x30020905, 0x30010900 ~ 0x30010901。
onConnectionLost:链接断开回调,链接断开后SDK内部会自动重连,回抛onReconnectStart,如果超过最大重连次数(config.connectRetryCount)后推流链接还是没有恢复,会回抛onReconnectError。
onNetworkPoor:网络慢回调,当收到此回调说明当前网络对于推流的支撑度不足,此时推流仍在继续、没有中断。您可以在此处理自己的业务逻辑,比如UI提醒用户。
onNetworkRecovery:网络恢复回调。
onReconnectError:重连失败回调,表示重连失败,建议检查当前网络,待网络恢复时,重新推流。一般情况下,中途断网时长在AlivcLivePushConfig设置的重连超时时长和次数范围之内,SDK会进行自动重连,重连成功之后将继续推流。断网时长超出AlivcLivePushConfig设置的重连超时时长和次数范围时,SDK自动重连失败,此时会回调onReconnectError,在等到网络恢复之后调用reconnectAsync接口进行重连。同时播放器也要配合做重连操作。若您使用阿里云播放器,建议播放器收到超时通知之后短暂延时5s后再做重连操作。
建议您在SDK外部做网络监测。
主播端和播放端在客户端无法进行直接通信,需要配合服务端使用。比如主播端断网,服务端会收到CDN的推流中断回调,此时可以推送给播放端,播放端再做出相应处理。恢复推流同理。
重连操作:
mPlayer.stop(); mPlayer.startPlay(mUrl);
阿里云播放器重连需要先停止播放再开始播放。调用接口顺序stop>prepareAndPlay。
更多阿里云播放器信息,请参见SDK简介与下载。
onSendDataTimeout:送数据超时回调,建议检查当前网络,待网络恢复时,结束推流后重新开始推流。
onPushURLAuthenticationOverdue:推流地址鉴权即将过期会回调,如果您的推流开启了推流鉴权功能(推流URL中带有auth_key),我们会对推流URL做出校验。在推流URL过期前约1min,您会收到此回调,实现该回调后,您需要回传一个新的推流URL,以此保证不会因为推流地址过期而导致推流中断。
互动模式:直播连麦场景
onConnectFail:表示推流失败,建议检查连麦推流地址中token是否非法、网络是否异常等。确定推流地址合法且网络正常可用后再尝试推流。
onConnectionStatusChange:连接状态改变的回调,在该回调中会返回连接的相关状态,例如网络连接断开、建立网络连接中、网络已连接、网络连接失败等。当回调AliLiveConnectionStatusFailed状态时,表示链接无法恢复,建议检查当前网络,待网络恢复后重新推流。建议在互动模式下接入该回调,以获取连接相关状态。
onPusherNetworkQualityChanged:当前用户上行网络质量回调,当上行网络质量发生变化时,会回调当前上行网络质量评级。
onConnectionLost:链接断开回调,不同于基础模式,在互动模式下,当触发onConnectionLost回调时,表示连接无法恢复。建议检查当前网络情况,并在网络恢复后重新进行推流。
错误回调
onSystemError:系统设备异常回调,需要销毁引擎重新尝试。
onSDKError:SDK错误回调,需要根据错误码做不同的处理:
如果错误码是805438211,表示设备性能差,编码和渲染帧率过低,需要给主播提示,并在app层停掉处理耗时长的业务逻辑(比如高级美颜、动画等)。
您需要特别处理App没有麦克风权限和没有摄像头权限的回调,App没有麦克风权限错误码为268455940,App没有摄像头权限错误码为268455939。
其他的暂时都只打日志,不做其他额外操作。
常用类列表
类 | 说明 |
类 | 说明 |
AlivcLivePushConfig | 推流初始配置 |
AlivcLivePusher | 推流功能类 |
AlivcLivePusherErrorListener | 错误回调 |
AlivcLivePusherNetworkListener | 网络相关通知回调 |
AlivcLivePusherInfoListener | 推流相关信息回调 |
API文档
- 本页导读 (1)
- 功能特性
- 使用流程
- 功能使用
- 配置推流参数
- 推流(摄像头推流)
- 录屏推流(屏幕共享推流)
- 码率控制
- 图片推流
- 回调监听
- 常用类列表
- API文档