-
Notifications
You must be signed in to change notification settings - Fork 1
ZBStreamingClient使用(主播端功能)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background_floating_material_dark"
>
<com.zhiyicx.zhibosdk.widget.ZBAspectFrameLayout
android:id="@+id/cameraPreview_afl"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true">
<android.opengl.GLSurfaceView
android:id="@+id/cameraPreview_surfaceView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"/>
//focus_indicator_rotate_layout用户手动聚焦
<com.zhiyicx.zhibo.ui.view.FocusIndicatorRotateLayout
android:id="@+id/focus_indicator_rotate_layout"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_centerInParent="true">
<View android:id="@+id/focus_indicator"
android:layout_height="120dp"
android:layout_width="120dp"/>
</com.zhiyicx.zhibo.ui.view.FocusIndicatorRotateLayout>
</com.zhiyicx.zhibosdk.widget.ZBAspectFrameLayout>
</RelativeLayout>
ZBStreamingClient.checkStrem(new OncheckSteamStatusListener() {
@Override
public void onStartCheck() {
}
@Override
public void onSuccess() {
}
@Override
public void onError(Throwable throwable) {
}
/**
* 错误码和错误原因
*/
@Override
public void onFial(String code, String message) {
}
/**
*如果被禁播,则返回解禁的时间戳
*/
@Override
public void onDisable(String time) {
}
});
★注:此方法涉及到ui加载,所以需要在Activity或者Fragment的onCreat()方法中调用。并在相应的onResume、onPause、onDestroy
方法中分别调用ZBStreamingClient.onResume(); ZBStreamingClient.onPause(); ZBStreamingClient.onDestroy();
protected void onCreate(Bundle savedInstanceState) {
zBasfl=(ZBAspectFrameLayout)findViewById(R.id.cameraPreview_afl);
gsfv=(GLSurfaceView)findViewById(R.id.cameraPreview_surfaceView);
WatermarkSetting watermarksetting = new WatermarkSetting(this, R.drawable.zhibo_logo, WatermarkSetting.WATERMARK_LOCATION.SOUTH_WEST, WatermarkSetting.WATERMARK_SIZE.MEDIUM, 100);
try {
mZBStreamingClient = ZBStreamingClient.getInstance();
mZBStreamingClient.initConfig(getContext(),zBasfl,gsfv,watermarkSetting);
} catch (JSONException e) {
e.printStackTrace();
mRootView.setWarnMessage("创建失败");
return;
} catch (IllegalAccessException e) {
e.printStackTrace();
mRootView.setWarnMessage("校验流失败");
}
}
为了更好的和 SDK 交互,接受各种状态和其他信息,需要注册对应的 Listener:
mZBStreamingClient.setNetworkJitterListener(new OnNetworkJitterListener() {
/**
* 当前网络不太稳定
*/
@Override
public void onNetworkJitter() {
UiUtils.makeText("网络状况不稳定~");
}
/**
* 当前网络为数据网络
*/
@Override
public void onNetInData() {
UiUtils.makeText(UiUtils.getString(R.string.str_not_wifi_prompt));
}
});
/**
*重连监听
*/
mZBStreamingClient.setReconnetListener(new OnReconnetListener() {
@Override
public void reconnectStart() {
mRootView.setPlaceHolderVisible(true);
LogUtils.warnInfo(TAG, "reconnectStart.....");
}
@Override
public void reconnectScuccess() {
mRootView.setPlaceHolderVisible(false);
LogUtils.warnInfo(TAG, "enreconnectScuccessd.....");
}
@Override
public void reConnentFailure() {
mRootView.setPlaceHolderVisible(false);
LogUtils.warnInfo(TAG, "reConnentFailure.....");
}
});
}
//IM消息监听
ZBStreamingClient.getInstance().setOnImListener(ImListener);
//IM连接状态监听
ZBStreamingClient.getInstance().setOnImStatusListener(this);
//消息超时监听
ZBStreamingClient.getInstance().setOnIMMessageTimeOutListener(this);
参数说明 title:直播标题 (可以为空) mLocation:直播地址,'lat纬度,lng经度'由("纬度+','+经度")合成的字符串 (可以为空) mCropfile: 直播封面图文件 (可以为空)
mZBStreamingClient.startPlay(title, mLocation, mCropfile,new OnLiveStartPlayListener() {
/**
*开启准备之前
*/
@Override
public void onStartPre() {
}
/**
*准备完成
*/
@Override
public void onStartReady() {
}
/**
*开启成功
*/
@Override
public void onStartSuccess() {
}
/**
*开始失败
*/
@Override
public void onStartFail() {
}
});
ZBStreamingClient.getInstance().closePlay(new OnCloseStatusListener() {
/**
*返回本次直播数据信息(获取赞,金币等)
*/
@Override
public void onSuccess(EndStreamJson endStreamJson) {
}
@Override
public void onError(Throwable throwable) {
}
@Override
public void onFial(String code, String message) {
}
});
所有水印相关的配置,都在 WatermarkSetting
类中进行。
水印的位置信息,目前内置四个方位,如:
public enum WATERMARK_LOCATION {
NORTH_WEST,
NORTH_EAST,
SOUTH_WEST,
SOUTH_EAST,
}
分别在屏幕的位置如下图所示:
/**
* define the relative location of watermark on the screen when start streaming
*
* | NorthWest | | NorthEast
* | | |
* | | |
* | --------------|----------------|--------------
* | | |
* | | |
* | | |
* | --------------|----------------|--------------
* | | |
* | | |
* | SouthWest | | SouthEast
*
*/
/**
* define de relative size of watermark
*/
public enum WATERMARK_SIZE {
LARGE,
MEDIUM,
SMALL,
}
传入 drawable 对象作为水印资源:
WatermarkSetting watermarkSetting = new WatermarkSetting(UiUtils.getContext());
watermarkSetting.setResourceId(R.mipmap.logo);
watermarkSetting.setAlpha(200); // [0~255]
watermarkSetting.setCustomPosition(0.5f,0.5f);//position[0.0f~1.0f]自定义水印的位置
watermarkSetting.setSize(WatermarkSetting.WATERMARK_SIZE.LARGE);
watermarkSetting.setLocation(WatermarkSetting.WATERMARK_LOCATION.NORTH_EAST);
传入图片的绝对路径作为水印资源:
watermarkSetting.setResourcePath("watermark resource absolute path");
对焦之前传入 Focus Indicator , 如果不进行设置,对焦过程中将会没有对应的 UI 显示。
//在推流成功后设置
mZBStreamingClient.setFocusAreaIndicator(viewGroup,
viewGroup.findViewById(R.id.focus_indicator));
点击屏幕触发手动对焦,并设置对应的坐标值。
//在推流成功后操作
mZBStreamingClient.doSingleTapUp((int) e.getX(), (int) e.getY());
Camera Zoom 操作。
// mCurrentZoom must be in the range of [0, mZBStreamingClient.getMaxZoom()]
// 在推流成功后操作
if (mZBStreamingClient.isZoomSupported()) {
mZBStreamingClient.setZoomValue(mCurrentZoom);
}
可以获取到当前的 Zoom 值:
mZBStreamingClient.getZoom();
开启闪光灯。
mZBStreamingClient.turnLightOn();
关闭闪光灯。
mZBStreamingClient.turnLightOff();
切换摄像头。
mZBStreamingClient.switchCamera();
在推流过程中,将声音禁用掉:
mZBStreamingClient.mute(true);
恢复声音:
mZBStreamingClient.mute(false);
注:默认为 false
在 Camera 正常预览之后,可以正常进行截帧功能。 在调用 captureFrame 的时候,您需要传入 width 和 height,以及 ZBFrameCapturedCallback,如果传入的 width 或者 height 小于等于 0,SDK 返回的 Bitmap 将会是预览的尺寸 。SDK 完成截帧之后,会回调 onFrameCaptured,并将结果以参数的形式返回给调用者。
mZBStreamingClient.captureFrame(w, h, new ZBFrameCapturedCallback() {
@Override
public void onFrameCaptured(Bitmap bmp) {
}
}
注意:调用者有义务对 Bitmap 进行回收释放。截帧失败,bmp 会为 null。