启动视频服务
接口介绍
int OpenVideo(const char* jsonConfig, VideoCallback callback);
功能描述
启动视频采集服务。
如需视频编码后出流,推荐使用外置编码方案,有助于降低编码时延和云手机资源消耗,并且外置编码可支持h265编码出流。
输入参数
参数名称 |
说明 |
---|---|
jsonConfig |
视频初始化参数json串,详见表2。 |
callback |
视频数据回调函数。 |
参数名称 |
参数类型 |
说明 |
---|---|---|
frame_type |
string |
出流帧类型,默认值为“h264”,可根据需要设置为“yuv”, “h265”。 |
encode_type |
number |
编码类型,默认值为0(AUTO模式)。 在AUTO模式下,系统会自动选择编码类型:优先使用外置编码,当外置编码不可用时,将自动切换云手机CPU软编码。 AUTO模式下自动切换CPU软编码存在以下两种例外情况:
说明:
|
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(画质优先,但限制码率) |
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,云手机规格的帧率]。 |
remote_scheduling_elb_ip |
string |
外置编码*调度资源池elb ip,默认为空,需配置为购买elb时分配的内网ip地址。 |
remote_scheduling_elb_port |
number |
外置编码*调度资源池elb端口,默认值为-1,需配置为购买elb时设置的port。 |
- 外置编码是采用与云手机服务器同VPC下的ECS为云手机提供编码能力的技术方案,支持H.264/H.265硬件编码出流,不占用云手机资源,具有编码时延低、画质质量高的特点。
- 具体接入及配置方法,详见:华为云手机编码池。
输出参数
无
返回值
0:成功
小于0:视频服务初始化失败
错误码
请参见错误码。
调用示例
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); }