---
title: 启动引擎接口
description: "启动视频流引擎，接收并渲染云手机画面。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2300/armnative/kunpengcpsvideo_16_0020.html
sourcePath: /source/zh/kunpengboostkithistory/2300/armnative/kunpengcpsvideo_16_0020.html
indexId: 617a45ecaf65b26b13b43001c14957ea120f85b781935134802978e57749adcc77
---
# 启动引擎接口

#### 场景介绍

启动视频流引擎，接收并渲染云手机画面。


#### 前提条件

- 视频流引擎已创建并初始化。
- 逻辑线程已启动。
- SurfaceView控件已初始化。


#### 开发流程

1. 在SurfaceView控件回调中记录宽和高，并启动连接线程。
2. 在连接线程中调用视频流引擎的启动函数。


#### 编码实例

```
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 {
//  连接成功或者已经连接
}
}
});
}
}
```
