#ifndef RT_RtspClient_C_H_
#define RT_RtspClient_C_H_

#include "common_c.h"

///
extern "C" {
	/**
	* rtsp客户端管理接口，.
	*
	* 录制管理定义引擎中录制的创建、停止、录制控制等功能。
	*/


	/** 创建一个Rtsp客户端
	*
	* @param[out] clientHandle rtsp客户端句柄。
	* @return 错误码。
	* @sa
	*/
	RT_API_EXPORT Result avd_rtspclient_create(AVDHandle& clientHandle);

	/** 销毁一个Rtsp客户端
	*
	* @param[in] clientHandle rtsp客户端句柄。
	* @sa
	*/
	RT_API_EXPORT void avd_rtspclient_destroy(AVDHandle clientHandle);

	/** 开始接收流
	*
	* @param[in] clientHandle rtsp客户端句柄。
	* @param[in] uri rtsp流地址。
	* @param[in] username	认证用户名。
	* @param[in] password	认证密码。
	* @sa
	*/
	RT_API_EXPORT Result  avd_rtspclient_start(AVDHandle clientHandle, const char*  uri, const char*  username = "", const char*  password = "");
	/** 停止接收流
	*
	* @param[in] clientHandle rtsp客户端句柄。
	* @sa
	*/
	RT_API_EXPORT Result  avd_rtspclient_stop(AVDHandle clientHandle);


	/** 设置渲染接口指针
	*
	* @param[in] clientHandle rtsp客户端句柄。
	* @param[in] render 渲染接口指针。
	* @sa
	*/
	RT_API_EXPORT Result  avd_rtspclient_setRender(AVDHandle clientHandle, AVDHandle renderHandle);

	/** 设置模拟视频采集接口指针
	*
	* @param[in] clientHandle rtsp客户端句柄。
	* @param[in] capture 模拟视频采集接口指针。
	* @note 由于默认回调Encoded数据，只能使用导入编码数据的VideoCapture，如果需要传入的是导入YUV数据的FakeVideoCapture需要调用enableVideoCallbackYUV，并且调用enableVideoCallbackEncoded(false)。
	* @sa enableVideoCallbackEncoded
	* @sa enableVideoCallbackYUV
	* @return 错误码。
	*/
	RT_API_EXPORT Result  avd_rtspclient_setVideoCapture(AVDHandle clientHandle, AVDHandle capture);
	/** 设置模拟音频采集接口指针
	*
	* @param[in] clientHandle rtsp客户端句柄。
	* @param[in] capture 模拟音频采集接口指针。
	* @note 由于音频导入只能导入一种数据，PCM或者编码后的数据，所以enableAudioCallbackEncoded enableAudioCallbackPCM只能有一种生效，或者将默认导入encoded数据。
	* @sa enableVideoCallbackEncoded
	* @sa enableVideoCallbackYUV
	* @return 错误码。
	*/
	RT_API_EXPORT Result  avd_rtspclient_setAudioCapture(AVDHandle clientHandle, AVDHandle capture);

}

#endif//RT_RtspClient_C_H_
