initPusher showDebugView hideDebugView sendMessage startPreview startPush stopPush pause resume restartPush reconnectPush destroy setMute switchCamera setFlash setPreviewMirror setPushMirror setBeautyOn setBeautyValues setAutoFocus focusCameraAtAdjustedPoint setZoom getMaxZoom getCurrentZoom isPushing getPushUrl startBGMWithMusicPathAsync stopBGMAsync pauseBGM resumeBGM setBGMLoop setBGMEarsBack setAudioDenoise setBGMVolume setCaptureVolume addEventListener isCameraSupportAutoFocus isCameraSupportFlash getLiveStatus setpreviewDisplayMode addDynamicWaterMarkImage
startScreenCapture startCamera stopCamera startCameraMix stopCameraMix pauseScreenCapture resumeScreenCapture
为帮助用户更好更快的使用原生插件,论坛维护了一个示例,示例中包含示例代码、知识点讲解、注意事项等,供您参考。
产品简介
阿里云推流SDK(ApsaraVideo for Live Streaming SDK)是基于阿里云强大内容分发网络和音视频实时通讯技术支持下的直播客户端推流开发工具,为用户提供简单易用的开放接口、网络自适应的流畅体验、多节点的低延迟优化、功能强大的实时美颜等音视频直播技术服务。SDK免费提供给所有开发者,让用户告别复杂的架构设计,降低维护成本,专注于自身业务逻辑实现和用户体验的提升。
使用流程
流程 : 用户APP向APPServer发起请求,获取推流URL -> AppServer根据规则拼接推流URL返回给APP -> APP赋值推流URL到推流SDK,使用推流SDK发起推流 -> 推流SDK将直播流推送到CDN
系统要求
ios:
Android:
不能同时添加的原生插件:aliyunLive 等同样是封装阿里云SDK的原生插件。
注意
1.使用该原生插件时需要使用升级后的编译环境,请在云编译的时候勾选“使用升级环境编译”,并且在控制台 “高级设置” 中将固件版本设置为 4.3.1或以上,在编译之前需要勾选蓝牙权限
初始化推流
initPusher({params},callback(ret, err))
resolution:
initialVideoBitrate:
targetVideoBitrate:
minVideoBitrate:
qualityMode:
beautyMode:
beautyEnable:
previewOrientation:
fps:
videoOnly:
audioOnly:
waterMarkImage:
path: '', //字符串类型,图片的路径,支持fs://,widget://(android 不支持widget://)
coordX: 0.1, //数字类型,水印左上顶点x的相对坐标,默认0.1 取值范围:[0,1]
coordY: 0.1, //数字类型,水印左上顶点y的相对坐标,默认0.1 取值范围:[0,1]
width:0.3 //数字类型,水印的相对宽度 (水印会根据水印图片实际大小和水印宽度等比缩放),默认0.3 取值范围:[0,1]
cameraType:
externMainStream:
externVideoFormat:
类型:字符串
描述:外部自定义视频数据 仅支持iOS
默认:YUVNV21
取值范围:
externAudioFormat:
类型:字符串
描述: 外部自定义音频数据 仅支持iOS
取值范围:
ret:
{
status : true //初始化是否成功
}
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.initPusher({
resolution:540P,
// ...
},function(ret){
api.alert({
msg: JSON.stringify(ret)
})
})
iOS系统,Android系统
可提供的1.0.0及更高版本
显示调试悬浮窗
注意 :Debug悬浮窗会占用一定的系统资源,只可用于APP研发的Debug阶段,Release版本请勿调用此接口,Android需要打开悬浮窗权限
showDebugView()
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.showDebugView();
})
iOS系统,Android系统
可提供的1.0.0及更高版本
隐藏调试悬浮窗
hideDebugView()
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.hideDebugView()
iOS系统,Android系统
可提供的1.0.0及更高版本
插入SEI消息(在线问答,推送问题或者答案消息)
sendMessage({params},callback(ret))
msg:
repeatCount:
delayTime:
KeyFrameOnly:
ret:
{
status : true // 是否成功
}
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.sendMessage({
msg:'',
repeatCount:'',
delayTime:'',
KeyFrameOnly:''
},function(ret){
api.alert({
msg: JSON.stringify(ret)
})
})
iOS系统,Android系统
可提供的1.0.0及更高版本
开始预览
startPreview({params},callback(ret))
rect:
{
x: 0, //(可选项)数字类型;原生插件左上角的 x 坐标(相对于所属的 Window 或 Frame);默认值:0
y: 0, //(可选项)数字类型;原生插件左上角的 y 坐标(相对于所属的 Window 或 Frame);默认值:0
w:300, //(可选项)数字类型;原生插件宽度(相对于所属的 Window 或 Frame;默认300
h:600 //(可选项)数字类型;原生插件高度(相对于所属的 Window 或 Frame;默认300
}
fixedOn:
fixed:
ret:
{
status : true // 预览界面是否打开成功
}
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.startPreview(function(ret){
api.alert({
msg: JSON.stringify(ret)
})
})
iOS系统,Android系统
可提供的1.0.0及更高版本
开始推流
startPush(callback(ret))
url:
ret:
{
status : true //推流是否成功
}
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.startPush(function(ret){
api.alert({
msg: JSON.stringify(ret)
})
})
iOS系统,Android系统
可提供的1.0.0及更高版本
停止推流
stopPush()
ret:
{
status : true //成功
}
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.stopPush();
iOS系统,Android系统
可提供的1.0.0及更高版本
暂停推流
pause()
ret:
{
status : true //成功
}
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.pause();
iOS系统,Android系统
可提供的1.0.0及更高版本
回复推流
pause()
ret:
{
status : true //成功
}
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.resume();
iOS系统,Android系统
可提供的1.0.0及更高版本
重新开始推流
restartPush()
ret:
{
status : true //成功
}
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.restartPush();
iOS系统,Android系统
可提供的1.0.0及更高版本
推流重连
reconnectPush()
ret:
{
status : true //成功
}
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.reconnectPush();
iOS系统,Android系统
可提供的1.0.0及更高版本
销毁推流
destroy()
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.destroy();
iOS系统,Android系统
可提供的1.0.0及更高版本
设置静音
setMute({params})
isMute:
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.setMute({
isMute:true
});
iOS系统,Android系统
可提供的1.0.0及更高版本
切换摄像头 (必须在预览或者推流成功后才能调用)
switchCamera()
ret:
{
status : true //成功
}
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.switchCamera();
iOS系统,Android系统
可提供的1.0.0及更高版本
设置闪关灯 (必须在预览或者推流成功后才能调用)
setFlash({params})
isFlash:
ret:
{
status : true //成功
}
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.setFlash({
isFlash:true
});
iOS系统
可提供的1.0.0及更高版本
打开预览镜像 (必须在预览或者推流成功后才能调用)
setPreviewMirror()
isMirror:
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.setPreviewMirror({
isMirror:true
});
iOS系统,Android系统
可提供的1.0.0及更高版本
打开推流镜像 (必须在预览或者推流成功后才能调用)
setPreviewMirror({params})
isMirror:
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.setPushMirror({
isMirror:true
});
iOS系统,Android系统
可提供的1.0.0及更高版本
是否打开美颜 (必须在预览或者推流成功后才能调用)
setBeautyOn({params})
isBeautyOn:
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.setBeautyOn({
isBeautyOn:true
});
iOS系统,Android系统
可提供的1.0.0及更高版本
设置美颜参数 (必须在预览或者推流成功后才能调用)
setBeautyValues({params})
beautyWhite:
beautyBuffing:
beautyRuddy:
beautyCheekPink:
beautyThinFace:
beautyShortenFace:
beautyBigEye:
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.setBeautyValues({
beautyRuddy:50
});
iOS系统,Android系统
可提供的1.0.0及更高版本
是否自动对焦 (必须在预览或者推流成功后才能调用)
setAutoFocus({params})
isAutoFocus:
ret:
{
status : true //成功
}
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.setAutoFocus({
isAutoFocus:true
});
iOS系统
可提供的1.0.0及更高版本
手动对焦 (必须在预览或者推流成功后才能调用)
focusCameraAtAdjustedPoint({params})
x:
y:
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.focusCameraAtAdjustedPoint({
x:100,
y:100
});
iOS系统,Android系统
可提供的1.0.0及更高版本
设置缩放 (必须在预览或者推流成功后才能调用)
setZoom({params})
zoom:
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.setZoom({
zoom:5
});
iOS系统,Android系统
可提供的1.0.0及更高版本
获取缩放最大值 (必须在预览或者推流成功后才能调用)
getMaxZoom(callback(ret))
ret:
{
maxZoom : 5 //最大缩放值
}
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.getMaxZoom(function(ret){
api.alert({
msg: JSON.stringify(ret)
})
});
iOS系统,Android系统
可提供的1.0.0及更高版本
获取当前缩放值 (必须在预览或者推流成功后才能调用)
getCurrentZoom(callback(ret))
ret:
{
currentZoom : 5 //当前缩放值
}
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.getCurrentZoom(function(ret){
api.alert({
msg: JSON.stringify(ret)
})
});
iOS系统,Android系统
可提供的1.0.0及更高版本
是否正在推流 (必须在预览或者推流成功后才能调用)
isPushing(callback(ret))
ret:
{
isPushing : true //是否正在推流
}
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.isPushing(function(ret){
api.alert({
msg: JSON.stringify(ret)
})
});
iOS系统,Android系统
可提供的1.0.0及更高版本
获取推流地址 (必须在预览或者推流成功后才能调用)
getPushUrl(callback(ret))
ret:
{
pushUrl : '' //推流地址
}
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.getPushUrl(function(ret){
api.alert({
msg: JSON.stringify(ret)
})
});
iOS系统,Android系统
可提供的1.0.0及更高版本
播放背景音乐 注意:背景音乐相关接口在开始预览之后才可调用
startBGMWithMusicPathAsync(params,callback(ret))
path:
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.startBGMWithMusicPathAsync({
path:'',
},function(ret){
api.alert({
msg: JSON.stringify(ret)
})
});
iOS系统,Android系统
可提供的1.0.0及更高版本
停止播放背景音乐
stopBGMAsync(callback(ret))
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.stopBGMAsync();
iOS系统,Android系统
可提供的1.0.0及更高版本
暂停播放背景音乐
pauseBGM()
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.pauseBGM();
iOS系统,Android系统
可提供的1.0.0及更高版本
恢复播放背景音乐
resumeBGM()
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.resumeBGM();
iOS系统,Android系统
可提供的1.0.0及更高版本
设置背景音乐是否循环播放
setBGMLoop(params)
isLoop:
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.setBGMLoop({
isLoop:false,
});
iOS系统,Android系统
可提供的1.0.0及更高版本
设置背景音乐耳返开关
setBGMEarsBack(params,callback(ret))
isOpen:
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.setBGMEarsBack({
isOpen:false,
});
iOS系统,Android系统
可提供的1.0.0及更高版本
设置降噪开关
setAudioDenoise(params,callback(ret))
isOpen:
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.setAudioDenoise({
isOpen:false,
});
iOS系统,Android系统
可提供的1.0.0及更高版本
设置背景音乐混音 音乐音量
setBGMVolume(params,callback(ret))
volume:
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.setBGMVolume({
volume:50,
});
iOS系统,Android系统
可提供的1.0.0及更高版本
设置背景音乐混音 人声音量
setCaptureVolume(params,callback(ret))
volume:
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.setCaptureVolume({
volume:50,
});
iOS系统,Android系统
可提供的1.0.0及更高版本
监听推流相关事件
addEventListener(callback(ret))
ret:
{
eventType:'previewStarted' // 预览开始 previewStarted
// 预览停止 previewStoped
// 开始推流 pushStarted
// 暂停推流 pushPauesed
// 恢复推流 pushResumed
// 推送停止 pushStoped
// 重新推送 pushRestarted
// 首帧预览 firstFramePreviewed
// 丢帧 dropFrame(仅支持安卓)
// 码率调整 adjustBitRate(仅支持安卓)
// 帧率调整 adjustFps(仅支持安卓)
// 网络差 networkPoor
// 网络恢复 networkRecovery
// 重连开始 reconnectStart
// 重连失败 reconnectFail
// 重连成功 reconnectSucceed
// 发送数据失败 sendDataTimeout
// 连接失败 connectFail
// 系统错误 systemError(仅支持iOS)
// SDK错误 SDKError(仅支持iOS)
code:1 // 错误码(仅当是系统错误或SDK错误时有值)
msg:'' // 错误信息 (仅当是系统错误或SDK错误时有值)
}
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.addEventListener(function(ret){
api.alert({
msg: JSON.stringify(ret)
})
});
iOS系统,Android系统
可提供的1.0.0及更高版本
相机是否支持自动对焦
isCameraSupportAutoFocus(callback(ret))
ret:
{
isSupport:true // boolean类型;是否支持自动对焦
}
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.isCameraSupportAutoFocus(function(ret){
api.alert({
msg: JSON.stringify(ret)
})
});
Android系统
可提供的1.0.0及更高版本
相机是否支持闪关灯
isCameraSupportFlash(callback(ret))
ret:
{
isSupport:true // boolean类型;是否支持自动对焦
}
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.isCameraSupportFlash(function(ret){
api.alert({
msg: JSON.stringify(ret)
})
});
Android系统
可提供的1.0.0及更高版本
获取当前推流状态
getLiveStatus(callback(ret))
ret:
{
livePushStatus:0 // 数字类型;0:空闲
1:初始化成功
2:打开预览中
3:正在预览
4:推流连接中
5:正在推流
6:停止推流中
7:暂停推流中
8:暂停推流
9:恢复推流中
10:重启推流中
11:错误状态
}
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.getLiveStatus(function(ret){
api.alert({
msg: JSON.stringify(ret)
})
});
android, ios系统
可提供的1.0.0及更高版本
预览窗口显示模式
注意:本设置只对预览显示生效,实际推出去的视频流的分辨率和AlivcLivePushConfig中预设置的分辨率一致,并不会因为更改预览显示模式而变化,预览显示模式是为了适配不同尺寸的手机,推流用户可以自由地选择预览效果。
setpreviewDisplayMode(params)
displayModel:
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.setpreviewDisplayMode(function(ret){
api.alert({
msg: JSON.stringify(ret)
})
});
android, ios系统
可提供的1.0.0及更高版本
开始录屏 (注意:android系统该接口只能在5.0及以上的系统版本中使用)
注意:1.iOS若要使用录屏功能,需要在初始化接口里面设置externMainStream参数为true 2.iOS可以通过getPushUrl接口获取录屏视频的地址
startScreenCapture(params, ret)
url:
networkPoorImage:
pausePushImage:
ret:
{
status:false, // 布尔类型;是否录屏成功
msg:'not support screen capture' // 字符串;返回消息
}
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.startScreenCapture({
url:'rtmp://push-videocall.aliyun.com/pushdemo/streamtest',
networkPoorImage:'fs://image/networkPoor.png',
pausePushImage:'fs://image/pushPaused.png'
},function(ret){
api.alert({
msg: JSON.stringify(ret)
})
});
iOS系统,android
可提供的1.0.0及更高版本
打开相机预览(即在录屏页面开启一个预览小窗口)
startCamera(params, ret)
rect:
{
x: 0, //(可选项)数字类型;原生插件左上角的 x 坐标(相对于所属的 Window 或 Frame);默认值:0
y: 0, //(可选项)数字类型;原生插件左上角的 y 坐标(相对于所属的 Window 或 Frame);默认值:0
w:200, //(可选项)数字类型;原生插件宽度(相对于所属的 Window 或 Frame;默认200
h:200 //(可选项)数字类型;原生插件高度(相对于所属的 Window 或 Frame;默认200
}
fixedOn:
fixed:
ret:
{
status:true, // 布尔类型;打开预览成功
}
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.startCamera({
rect:{
x:0,
y:0,
w:200,
h:200
}
},function(ret){
api.alert({
msg: JSON.stringify(ret)
})
});
android
可提供的1.0.0及更高版本
关闭预览窗口
stopCamera(params, ret)
ret:
{
status:true, // 布尔类型;关闭预览成功
}
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.startCamera(function(ret){
api.alert({
msg: JSON.stringify(ret)
})
});
android
可提供的1.0.0及更高版本
打开混流(改接口与startCamera的区别是录制端无需开启预览页面,如一些游戏主播在直播时不会开启预览页面以免挡住游戏画面)
startCameraMix(params, ret)
rect:
{
x: 0, //(可选项)数字类型;原生插件左上角的 x 坐标(相对于所属的 Window 或 Frame);默认值:0
y: 0, //(可选项)数字类型;原生插件左上角的 y 坐标(相对于所属的 Window 或 Frame);默认值:0
w:200, //(可选项)数字类型;原生插件宽度(相对于所属的 Window 或 Frame;默认200
h:200 //(可选项)数字类型;原生插件高度(相对于所属的 Window 或 Frame;默认200
}
fixedOn:
fixed:
ret:
{
status:true, // 布尔类型;打开混流成功
}
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.startCameraMix({
rect:{
x:0,
y:0,
w:200,
h:200
}
},function(ret){
api.alert({
msg: JSON.stringify(ret)
})
});
android
可提供的1.0.0及更高版本
关闭混流 stopCameraMix(params, ret)
ret:
{
status:true, // 布尔类型;关闭混流成功
}
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.stopCameraMix(function(ret){
api.alert({
msg: JSON.stringify(ret)
})
});
android
可提供的1.0.0及更高版本
暂停录屏(比如需要输入密码等一些私密操作前可以调用此方法)
pauseScreenCapture(params, ret)
ret:
{
status:false, // 布尔类型;是否暂停成功
}
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.pauseScreenCapture(function(ret){
api.alert({
msg: JSON.stringify(ret)
})
});
android
可提供的1.0.0及更高版本
恢复录屏
resumeScreenCapture(params, ret)
ret:
{
status:false, // 布尔类型;是否恢复成功
}
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.resumeScreenCapture(function(ret){
api.alert({
msg: JSON.stringify(ret)
})
});
android
可提供的1.0.0及更高版本
停止录屏 (注意:android系统该接口只能在5.0及以上的系统版本中使用)
注意:iOS可以通过getPushUrl接口获取录屏视频的地址
stopScreenCapture( ret)
ret:
{
status:false, // 布尔类型;是否录屏成功
msg:'not support screen capture' // 字符串;返回消息
}
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.stopScreenCapture(function(ret){
api.alert({
msg: JSON.stringify(ret)
})
});
iOS系统
可提供的1.0.4及更高版本
添加贴图
addDynamicWaterMarkImage({params},callback(ret, err))
rect:
{
x: 0, //(可选项)数字类型;左上角的 x 坐标;默认值:0 取值范围(0~1.0f)
y: 0, //(可选项)数字类型;左上角的 y 坐标;默认值:0 取值范围(0~1.0f)
w:0.1, //(可选项)数字类型;贴图宽度;默认:0.1 取值范围(0~1.0f)
h:0.1 //(可选项)数字类型;贴图高度;默认:0.1 取值范围(0~1.0f)
}
path:
ret:
{
status:false, // 布尔类型;是否添加成功
}
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.addDynamicWaterMarkImage({
rect:{
x:0,
y:0,
w:0.1,
h:0.1
},
path:''
},function(ret){
api.alert({
msg: JSON.stringify(ret)
})
});
iOS系统
可提供的1.0.4及更高版本
删除贴图
removeDynamicWaterMark({params},callback(ret, err))
imgId:
ret:
{
status:false, // 布尔类型;是否删除成功
}
var alivcLivePusher = api.require('alivcLivePusher');
alivcLivePusher.removeDynamicWaterMark({
ingId:1
},function(ret){
api.alert({
msg: JSON.stringify(ret)
})
});
iOS系统
可提供的1.0.4及更高版本