启动引擎接口
场景介绍
启动视频流引擎,接收并渲染云手机画面。
前提条件
- 视频流引擎已创建并初始化。
- 逻辑线程已启动。
- SurfaceView控件已初始化。
开发流程
- 在SurfaceView控件回调中记录宽和高,并启动连接线程。
- 在连接线程中调用视频流引擎的启动函数。
编码实例
public class Activity implements BaseActivity {
private VmiSurfaceView surfaceView;
private Boolean newlyCreated = true;
private int guestWidth = 1080;
private int guestHeight = 1920;
DisplayMetrics metric = new DisplayMetrics();
protected void onCreate(Bundle savedInstanceState) {
WindowManager wm = (WindowManager) getApplicationContext().getSystemService(WINDOW_SERVICE);
wm.getDefaultDisplay().getRealMetrics(metric);
Log.i(TAG, "width pixels:" + metric.widthPixels + ", height pixels:" + metric.heightPixels
+ ",densityDpi:" + metric.densityDpi);
guestWidth = metric.widthPixels;
guestHeight = metric.heightPixels;
initSurfaceHolderCallback(surfaceView.getHolder());
}
private void initSurfaceHolderCallback(SurfaceHolder surfaceHolder) {
surfaceHolder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
// 首次创建
newlyCreated = true;
}
@Override
public void surfaceChanged(SurfaceHolder inSurfaceHolder, int format,
int width, int height) {
if (!newlyCreated) {
return;
}
newlyCreated = false;
// 由于启动接口涉及socket连接,建议放到线程中调用
threadPool.submit(new ConnectRunable());
}
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
newlyCreated = false;
}
});
}
class ConnectRunable implements Runnable {
@Override
public void run() {
// 调用视频流引擎启动接口
final int startResult = engine.start(surfaceView.getHolder().getSurface(),
guestWidth, guestHeight, metric.densityDpi);
runOnUiThread(new Runnable() {
@Override
public void run() {
if (startResult == VideoEngine.VMI_CLIENT_START_FAIL) {
// 连接失败
} else {
// 连接成功或者已经连接
}
}
});
}
}
父主题: 视频流客户端开发流程