| 方法 | 方法描述 |
|---|---|
| init | 初始化 |
| createLocalStream | 开始视频采集 |
| stopLocalPreview | 停止本地采集 |
| setVideoEncode | 设置音视频编码清晰度 |
| updateLocalView | 更新本地渲染控件 |
| muteLocalAudio | 控制麦克风静音 |
| switchCamera | 切换前后摄像头 |
| publish | 开始推流 |
| unPublish | 停止推流 |
| setMirrorType | 设置镜像 |
| setVideoFillMode | 设置画面填充模式 |
| setVideoMuteImage | 图片推流 |
| enableCustomDataProcess | 自定义数据处理 |
| destroy | destroy |
| 方法 | 方法描述 |
|---|---|
| onPushConnectSuccess | 推流成功 |
| onPushDisconnect | 推流断开 |
| onReConnecting | 重推流 |
| onError | 错误事件回调 |
| onWarning | 警告事件回调 |
| onMicrophoneVolumeUpdate | 麦克风音量 |
| onPushStreamBitrate | 推流码率 |
| onCaptureFrame | 自定义采集回调数据 |
public init(context: Context,version:number,url: string | null, key: string | null,webinar_info:VHWebinarData,callback:VhallPusherCallback,initCb:VHPusherInitCallBack)| 参数名称 | 是否必须 | 备注 |
|---|---|---|
| context | 是 | 应用context |
| version | 是 | 1 免费 2 付费版本(请联系客服进行咨询) |
| url | 是 | version 为1时传null , 为2时需要传递的 url |
| key | 是 | version 为1时传null , 为2时需要传递的 key |
| webinarInfo | 是 | 活动信息 |
显示视频预览
public createLocalStream(frontCamera: boolean): void| 参数名称 | 是否必须 | 备注 |
|---|---|---|
| frontCamera | 是 | true:前置摄像头 false:后置摄像头 |
关闭视频预览
public stopLocalPreview(): void public setVideoEncode(profile:VhallPusherResolution): void | 参数名称 | 是否必须 | 备注 |
|---|---|---|
| profile | 是 | VhallPusherResolution 清晰度枚举值 |
VHPusherSDK.getInstance().setVideoEncode(VhallPusherResolution.VhallPusherResolution1280x720); public updateLocalView(view: string, controller: object): void | 参数名称 | 是否必须 | 备注 |
|---|---|---|
| view | 是 | 对应VhallXComponentView设置的id |
| controller | 是 | 对应VhallXComponentView 回调返回的对象 |
VHPusherSDK.getInstance().updateLocalView(this.mainVideoViewID, obj); public muteLocalAudio(mute: boolean): void| 参数名称 | 是否必须 | 备注 |
|---|---|---|
| mute | 是 | rue: 静音,false:开启 |
public switchCamera(frontCamera: boolean): void | 参数名称 | 是否必须 | 备注 |
|---|---|---|
| frontCamera | 是 | rue:前置,false:后置 |
public publish(): void public unPublish(): void public setMirrorType(mirror: boolean): void| 参数名称 | 是否必须 | 示例 | 备注 |
|---|---|---|---|
| mirror | 是 | YES | YES:镜像 NO:不镜像 |
public setVideoFillMode(mode: VhallPushFillMode): void | 参数名称 | 是否必须 | 备注 |
|---|---|---|
| mode | 是 | VhallPushFillMode |
VHPusherSDK.getInstance().setVideoFillMode(VhallRTCVideoFillMode.VHRTCVideoFillMode_Fit); public setVideoMuteImage(pixelMap: image.PixelMap | null): void| 参数名称 | 是否必须 | 备注 |
|---|---|---|
| pixelMap | 是 | 推流成功后,可以将摄像头画面替换为图片。当需要关闭摄像头时,可以设置一个pixmap图片进行推流。当需要切换回摄像头时,将pixmap设置为null |
if (this.isVideoMute) {
let context = this.getUIContext();
if(this.screenSnap == null) {
this.screenSnap = context.getComponentSnapshot().getSync("localVideo")
}
VHPusherSDK.getInstance().setVideoMuteImage(this.screenSnap);
} else {
VHPusherSDK.getInstance().setVideoMuteImage(null);
}
}| 参数名称 | 备注 |
|---|---|
| OK_PUBLISH_CONNECT = 0 | 推流成功 |
| ERROR_PUBLISH_CONNECT = 1 | 推流失败 (需重新推流) |
| RECONNECTING = 22 | 底层重连推流中 |
| ERROR_MUXER_EMPTY = 25 | 推流失败 读取不到推流数据(需重新推流) |
| CAN_NOT_CHANGE_PROFILE_WHEN_PUSHING_STREAM = 105 | 推流中禁止修改清晰度 |
| PUSH_PROFILE_ERROR | 不支持的清晰度 |
VHPusherSDK.getInstance().init(
context,
1,
null,
null,
this.webinar_info,
{
onPushConnectSuccess: (): void => {
ToastUtil.showToast("已连接");
},
onPushDisconnect: (): void => {
ToastUtil.showToast("已断开");
setTimeout(()=>{
VHPusherSDK.getInstance().unPublish();
VHPusherSDK.getInstance().publish();
},2000)
},
onReConnecting: (): void => {
ToastUtil.showToast("正在重连");
},
onError: (errCode: number, errMsg: string): void => {
ToastUtil.showToast(errMsg);
if(errCode == VhallMediaPusherCode.ERROR_PUBLISH_CONNECT || errCode == VhallMediaPusherCode.ERROR_MUXER_EMPTY){
setTimeout(()=>{
VHPusherSDK.getInstance().unPublish();
VHPusherSDK.getInstance().publish();
},2000)
}
},
onWarning: (warningCode: number, warningMsg: string): void => {
ToastUtil.showToast(warningMsg);
},
onMicrophoneVolumeUpdate: (volume: number): void => {
},
onPushStreamBitrate: (bitrate: number): void => {
console.info("bitrate: " + bitrate);
this.bitRate = Number(bitrate).toString();
},
onCaptureFrame: (src: VhallMediaCaptureFrame, dst: VhallMediaCaptureFrame): void => {
let srcFrame = new VhallBeautyFrame(src.data, src.width, src.height, src.timestamp);
let dstFrame = new VhallBeautyFrame(dst.data, dst.width, dst.height, dst.timestamp);
VHBeautySDK.getInstance().renderWithInput(srcFrame, dstFrame);
dst.data = dstFrame.data;
}
},
{
onSuccess: (): void => {
let selfItem = new VHPusherUserInfo(this.userId);
selfItem.isMain = true;
selfItem.nickName = this.webinar_info?.join_info?.nickname!;
const isUserExists = this.streamList.some(item => item.userId === this.userId);
if (!isUserExists) {
this.streamList.push(selfItem);
}
this.isHost = true;
this.init();
this.getUserListInfo();
},
onFailure: (errorCode: number, errorMsg: string): void => {
}
}
)
}