提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
最近公司项目里需要接入手机直播功能,因为之前PC直播用的是阿里云,后台服务器域名等都是部署在阿里云上。所以手机直播也选用了阿里云直播SDK。一、阿里云视频直播流程
- 主播通过采集设备采集直播内容后,通过推流SDK推送直播流,视频直播服务通过边缘推流的方式将直播流推送至阿里云直播中心,推送的视频流通过CDN边缘节点进行加速保证上行传输的稳定性。
- 视频流推送至阿里云直播中心后,可按需对视频流进行转码、时移、录制、截图等处理。
- 处理好的视频流通过CDN内容分发网络,下发至观众的设备中进行播放。移动端的播放设备可以集成阿里云提供的播放器SDK进行开发。
- 直播视频除了可以进行转码截图等操作外,还可以进行直播转点播的操作,将录制下来的视频转至点播系统中再进行点播播放和短视频云剪辑。方便直播与短视频内容生产和传播的联动。
此处展商对应着主播。
二、录制直播推流步骤
1. 集成说明
通过本地依赖方式集成SDK
-
下载并解压Android端推流SDK。更多信息,请参见推流SDK。
新建项目,复制推流SDK文件AliLiveSdk.aar和播放器相关文件到App模块下的libs文件夹中。 -
修改工程的build.gradle文件,在allprojects的repositories节点中增加flatDir的设置以及阿里Maven地址。
maven {
url 'https://maven.aliyun.com/repository/releases'
}
flatDir {
dirs 'libs'
}
- 修改App中的build.gradle文件。
dependencies {
// 添加对libs文件夹中aar文件的依赖
implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
}
通过Maven依赖方式集成SDK
- 新建项目。
修改工程的build.gradle文件,在allprojects的repositories节点中增加flatDir的设置以及阿里Maven地址。
maven {
url 'https://maven.aliyun.com/repository/releases'
}
flatDir {
dirs 'libs'
}
- 修改App中的build.gradle文件,在dependencies节点中增加推流SDK、播放器SDK及Conan的引用。
dependencies {
// 添加对libs文件夹中aar文件的依赖
implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
// 添加推流SDK的依赖
implementation 'com.alivc.live:AliLiveSdk:4.0.2'
// 添加播放器core的依赖
implementation 'com.aliyun.video.android:core:1.2.2'
// 添加播放器SDK的依赖
implementation 'com.aliyun.sdk.android:AliyunPlayer:5.2.3-full'
// 添加conan的依赖
implementation 'com.alivc.conan:AlivcConan:1.0.4'
// 添加artcdemuxer的依赖
implementation 'com.aliyun.sdk.android:AlivcArtc:5.2.3'
// 添加netsdk的依赖
implementation 'com.aliyun.rts.android:RtsSDK:1.5.0'
}
- 配置权限
修改工程的AndroidManifest.xml文件,添加如下权限配置。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2. 使用说明
RTMP推流
- 创建AliLiveEngine。
//创建RTMP相关配置对象
AliLiveRTMPConfig rtmpConfig = new AliLiveRTMPConfig();
//初始化码率配置
rtmpConfig.videoInitBitrate = 1000;
rtmpConfig.videoTargetBitrate = 1500;
rtmpConfig.videoMinBitrate = 600;
//创建直播推流配置
AliLiveConfig mAliLiveConfig = new AliLiveConfig(rtmpConfig);
//初始化分辨率、帧率、是否开启高清预览、暂停后默认显示图片
mAliLiveConfig.videoFPS = 20;
mAliLiveConfig.videoPushProfile = AliLiveConstants.AliLiveVideoPushProfile.AliLiveVideoProfile_540P;
mAliLiveConfig.enableHighDefPreview = false;
mAliLiveConfig.pauseImage = bitmap;
mAliLiveConfig.accountId = "";
AliLiveEngine mAliLiveEngine = AliLiveEngine.create(PushActivity.this, mAliLiveConfig);
- 开始预览。
//创建预览显示窗口
AliLiveRenderView mAliLiveRenderView = mAliLiveEngine.createRenderView(false);
//添加预览显示窗口到布局中
addSubView(mAliLiveRenderView);
//设置预览显示模式
mAliLiveEngine.setPreviewMode(AliLiveRenderModeAuto, AliLiveRenderMirrorModeOnlyFront);
//开始预览
mAliLiveEngine.startPreview(mAliLiveRenderView);
- 开始推流。
mAliLiveEngine.startPush(mPushUrl);
- 停止推流。
//停止预览
mAliLiveEngine.stopPreview();
//停止推流
mAliLiveEngine.stopPush();
//销毁liveEngine
mAliLiveEngine.destroy();
mAliLiveEngine = null;
具体代码可以参阅推流SDK Demo,查看源码。一些功能参数配置,界面操作都可以参考Demo。简单来说,推流只需要服务器提供推流地址,然后传给推流SDK就行了。
推流失败的情况
- 错误码12007:推流rtmp链接建立失败
其他错误可以咨询阿里云sdk开发者(钉钉群32825314)
三、观看直播
后台返回观看直播的地址,一般是rtmp格式的,使用播放器播放即可。也可以使用阿里云的播放器来播放。