
# 启动视频服务
#### 接口介绍
int OpenVideo(const char\* jsonConfig, VideoCallback callback);
#### 功能描述
启动视频采集服务。
如需视频编码后出流，推荐使用外置编码方案，有助于降低编码时延和云手机资源消耗，并且外置编码可支持h265编码出流。
#### 输入参数
表1输入参数说明 
| 参数名称       | 说明                                                     |
|:---|:---|
| jsonConfig | 视频初始化参数json串，详见[表2]。 |
| callback   | 视频数据回调函数。                                              |
   
 表2jsonConfig参数说明 
| 参数名称                       | 参数类型   | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
|:---|:---|:---|
| frame_type                 | string | 出流帧类型，默认值为"h264"，可根据需要设置为"yuv", "h265"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| encode_type                | number | 编码类型，默认值为0（AUTO模式）。 在AUTO模式下，系统会自动选择编码类型：优先使用外置编码，当外置编码不可用时，将自动切换云手机CPU软编码。 AUTO模式下自动切换CPU软编码存在以下两种例外情况： 1. 由于CPU软编仅支持h264，当frame_type设置为"h265"时，无法自动切换；  2. 当使用AUTO模式，但资源池elb ip或port配置非法，系统将返回错误码，无法自动切换。   说明： - 支持指定为1（CPU软编码）。  - 支持指定为2（内置GPU编码），仅支持AOSP14镜像。  - 支持指定为5（独立编码卡），支持H264/H265帧类型。可调用[获取媒体服务支持能力](https://support.huaweicloud.com/sdkreference-cph/cph_sdk_0015.html)接口查询"IndependentHardwareEncode"字段是否有效。   |
| fps                        | number | 编码帧率，默认值为云手机规格的帧率，设置范围\[10, 云手机规格的帧率\]，支持设置为10的倍数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| bitrate                    | number | 编码码率，720p默认值：3M，1080p默认值：6M，设置范围\[100000, 10000000\] 基于编码画质最大保障和传输带宽最大节约，编码码率建议值如下： 游戏多开场景（30fps）： 720p/h264: 2M（高清）1.3M（标清）1M（流畅） 720p/h265: 1.3M（高清）1M（标清）0.7M（流畅） 1080p/h264: 4M（高清）2.6M（标清）2M（流畅） 1080p/h265: 2.6M（高清）2M（标清）1.4M（流畅） 云游戏场景（30fps）： 720p/h264: 3M（高清）2M（标清）1.3M（流畅） 720p/h265: 2M（高清）1.3M（标清）1M（流畅） 1080p/h264: 6M（高清）4M（标清）2.6M（流畅） 1080p/h265: 4M（高清）2.6M（标清）2M（流畅）                                                                                                                                                                                                             |
| stream_width               | number | 出流帧宽度，默认为云手机分辨率规格宽度，设置范围\[240, 云手机分辨率规格宽度\]。 出流帧宽度需要为8的倍数，且宽高比需要与物理分辨率宽高比保持一致。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| stream_height              | number | 出流帧高度，默认为云手机分辨率规格高度，设置范围\[240, 云手机分辨率规格高度\]。 出流帧高度且需要为8的倍数，且宽高比需要与物理分辨率宽高比保持一致。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| rcmode                     | number | 码率控制模式，默认为2。 0: ABR（平均码率） 1: CRF（画质优先） 2: CBR（恒定码率） 3: CAPPED_CRF（画质优先，但限制码率），encode_type为5（独立编码卡）时，不支持设置此模式。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| gop                        | number | 视频编码GOP长度，默认为3000，设置范围\[30, 5000\]。 说明：当"encode_type"取值为"5"时，设置范围\[30, 1024\]。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| profile                    | number | 编码规格，默认为66（Baseline），可设置为77（Main）, 100（High）。 客户端为手机屏幕，建议选择66。 客户端为电视大屏，建议选择77或100。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| repeat_fps                 | number | 补帧帧率，默认为0（不开补帧），设置范围\[0,云手机规格的帧率\]。 AOSP14镜像默认配置为30。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| remote_scheduling_elb_ip   | string | 外置编码^\*^调度资源池elb ip，默认为空，需配置为购买elb时分配的内网ip地址。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| remote_scheduling_elb_port | number | 外置编码^\*^调度资源池elb端口，默认值为-1，需配置为购买elb时设置的port。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| remote_encoder_timeout     | number | 外编超时时间，单位为ms，默认值为2000，设置范围\[500-5000\]。 建议设置值不小于1500ms，低于1500ms网络拥塞时偶现连接超时。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
   
![](https://support.huaweicloud.com/sdkreference-cph/public_sys-resources/note_3.0-zh-cn.png)
- 外置编码是采用与云手机服务器同VPC下的ECS为云手机提供编码能力的技术方案，支持H.264/H.265硬件编码出流，不占用云手机资源，具有编码时延低、画质质量高的特点。
- 具体接入及配置方法，详见：[华为云手机编码池](https://gitee.com/HuaweiCloudDeveloper/huaweicloud-cloud-phone-codec-pool)。
 
#### 输出参数
无
#### 返回值
0：成功
小于0：视频服务初始化失败
#### 错误码
请参见[错误码](https://support.huaweicloud.com/sdkreference-cph/cph_sdk_0016.html)。
#### 调用示例
```
json串的配置如下,参数可选，如果不设置，使用默认值： 
{ 
    "frame_type": "h264",  
    "remote_scheduling_elb_ip": "127.0.0.1",
    "remote_scheduling_elb_port": 10001
} 
调用示例： 
static void TestVideoCallback(uint8_t* buffer, uint32_t length, VideoCallbackExt &videoCallbackExt) 
{ 
    std::cout <<"video_Datasize = "<< length <<std::endl; 
    int orientation = (int)videoCallbackExt.orientation; 
    // orientation代表视频出流方向，需要根据此回调值对客户端进行适配
    // orientation=0：竖屏 
    // orientation=8：横屏，需要对回调后的视频内容做逆时针90度的旋转
    return;
} 
// 场景一：请求h264编码出流，采用默认AUTO模式
const char *jsonStr = "{\"frame_type\":\"h264\",\"remote_scheduling_elb_ip\":\"127.0.0.1\",\"remote_scheduling_elb_port\":10001}" ;
int ret = OpenVideo(jsonStr, TestVideoCallback);
// 场景二：请求h265编码出流，采用默认AUTO模式，并判断返回值错误码（错误码详情描述见文档第6部分）
// 如果没有外置编码资源则切换h264 AUTO模式出流
const char *jsonStr = "{\"frame_type\":\"h265\",\"remote_scheduling_elb_ip\":\"127.0.0.1\",\"remote_scheduling_elb_port\":10001}";
int ret = OpenVideo(jsonStr, TestVideoCallback);
if (ret == -3300) {
    jsonStr = "{\"frame_type\":\"h264\",\"remote_scheduling_elb_ip\":\"127.0.0.1\",\"remote_scheduling_elb_port\":10001}";
    int ret = OpenVideo(jsonStr, TestVideoCallback);
}
```
