推流端API参考说明 - Windows
主要方法
初始化SDK(InitSDK)
void InitSDK(IN char* strAppID, IN char* strAccessKey, IN char* strSecretKey, IN char* strUserData)
初始化SDK,App调用SDK前,必须先调用此接口,参数说明:
名称 | 描述 |
---|---|
strAppID | AppID |
strAccessKey | 视频云鉴权使用的AccessKey |
strSecretKey | 视频云鉴权使用的SecretKey |
strUserData | 用户自定义信息 |
初始化 (InitInstance)
void InitInstance (HINSTANCE hMain)
显示视频窗口前,必须先初始化Instance。
名称 | 描述 |
---|---|
hMain | 主程序的实例句柄 |
设置参数(setParameter)
void SetParameter(EVStreamerParameter& streamPara)
设置推流参数。
初始化视频窗口(InitVideoWnd)
void InitVideoWnd(HWND hMain, HWND hVideo, bool bRemember)
初始化视频窗口,参数说明:
名称 | 描述 |
---|---|
hMain | 主窗口句柄 |
hVideo | 视频窗口句柄 |
bRemember | 是否记忆上次的场景源设置 |
获取游戏源列表(GetGameOptions)
bool GetGameOptions(OUT GameInfo* pGameOpts, OUT int& iCount)
获取游戏源列表,参数说明:
名称 | 描述 |
---|---|
pGameOpts | 游戏源列表 |
iCount | 游戏源数目 |
获取可用的视频设备列表(GetVideoDevices)
bool GetVideoDevices(OUT DevicesInfo* pVideoDev, OUT int& iDevCount)
获取可用的视频设备列表,参数说明:
名称 | 描述 |
---|---|
pVideoDev | 视频设备列表 |
iDevCount | 视频设备数目 |
获取可用的音频设备列表(GetAudioDevices)
bool GetAudioDevices(OUT DevicesInfo* pAudioDev, OUT int& iDevCount)
获取可用的音频设备列表,参数说明:
名称 | 描述 |
---|---|
pAudioDev | 音频设备列表 |
iDevCount | 音频设备数目 |
添加场景源(AddScene)
bool AddScene(IN SceneInfo* pSceneInfo)
添加场景源,参数说明:
名称 | 描述 |
---|---|
pSceneInfo | 场景源信息的基类指针 |
场景源基类指针可代表如下对象:
- GameInfo
- MonitorsInfo
- WindowsInfo
- CameraInfo
- TextInfo
- ImageInfo
编辑场景源(ModifyScene)
bool ModifyScene(IN SceneInfo* pSceneInfo)
编辑场景源,参数说明:
名称 | 描述 |
---|---|
pSceneInfo | 场景源信息的基类指针 |
获取选中的场景源类型(GetSelSceneInfo)
bool GetSelSceneInfo(OUT SceneInfo* pScene)
获取选中的场景源类型,参数说明:
名称 | 描述 |
---|---|
pScene | 场景源信息 |
选中场景源的操作(SetSelItemState)
void SetSelItemState (SceneItemsState itemState)
选中场景源的操作,itemState表示操作方式,包含:
SceneItemsState_MoveUp = 0, // 上移;
SceneItemsState_MoveDown, // 下移;
SceneItemsState_MoveToTop, // 置顶;
SceneItemsState_MoveToBottom, // 置底;
SceneItemsState_MoveToFull, // 全屏;
删除场景源(DeleteSelItems)
void DeleteSelItems()
删除场景源。
准备推流(PrepareStream)
void PrepareStream(IN const char* strLID, IN const char* strKey)
准备推流,获取推流地址。参数说明:
名称 | 描述 |
---|---|
strLID | 推流唯一id |
strKey | 获取推流地址接口鉴权key |
开始推流(StartStream)
void StartStream()
开始推流
结束推流(StopStream)
void StopStream()
结束推流
停止推流(stopLive)
public void stopLive()
停止推流
设置麦克风音量(SetMicropVolume)
void SetMicropVolume(float fValue)
设置麦克风音量,fValue是0-1之间的浮点数。
获取麦克风音量(GetMicropVolume)
float GetMicropVolume()
获取麦克风音量。
设置扬声器(桌面)音量(SetDesktopVolume)
void SetDesktopVolume(float fValue)
设置扬声器(桌面)音量。
获取扬声器(桌面)音量(GetDesktopVolume)
float GetDesktopVolume()
获取扬声器(桌面)音量。
连麦-加入频道(JoinChannel)
int JoinChannel(IN const char* appid, IN const char* channel_id="", IN unsigned int uid=0, EVLive_User_Role useRole = EVLIVE_USER_ROLE_BROADCASTER, IN const int type = 1, IN const int record = 1)
加入频道(连麦、视频会议使用), 如果还未创建频道, 会自动创建。该方法让用户加入通话频道,在同一个频道内的用户可以互相通话,多个用户加入同一个频道,可以群聊。如果已在通话中,用户必须调用leaveChannel退出当前通话,才能进入下一个频道。
参数说明:
名称 | 描述 |
---|---|
appid | 需要向售前申请 |
channel_id | 频道id,如果为空串则有服务器自动分配,并且在回调函数中返回。需用户自行维护保存维护 |
uid | 用户id,如果为空串则有服务器自动分配,并且在回调函数中返回。需用户自行维护保存维护 |
userRole | 必须为EVLIVE_USER_ROLE_AUDIENCE(0)或者EVLIVE_USER_ROLE_BROADCASTER(1) |
type | 0:不开启旁路直播,1:开启旁路直播。默认为1。只有对主播此参数才有效。 |
record | 0:不开启录制,1:开启录制,默认为1。只有对主播此参数才有效。 |
返回值 | 0-成功,<0-失败 |
注解 channelid不为空,则uid也不空。 如果channelid和uid都为空,则服务器会创建一个新频道,并返回channelid和uid,而且此时必须为主播身份。进入成功即为频道拥有者。 如果以主播身份,channelid和uid为之前保存的信息,则再次进入频道服务器就不会再创建新频道(后台的逻辑、 如果频道有了拥有者,则该channelid不能为其他用户使用,返回Room exist... 连麦观众想要进入频道必须有channelid,如果不输入uid则服务器分配一个。
连麦-离开频道(LeaveChannel)
int LeaveChannel()
- 离开频道,即挂断或退出通话。
- joinChannel后,必须调用leaveChannel以结束通话,否则不能进行下一次通话。
leaveChannel是异步操作,调用返回时并没有真正退出频道。在真正退出频道后,SDK会触发onLeaveChannel回调。
注意:如果您调用了leaveChannel后立即调用 release(),SDK 将无法触发 onLeaveChannel 回调。
- 接口返回值:0-成功,<0-失败
连麦-设置频道属性(SetChannelProfile)
int SetChannelProfile(EV_CHANNEL_PROFILE_TYPE profile)
- 设置频道属性,该方法用于设置频道模式(Profile)。
- 注意:同一频道内只能同时设置一种模式。该方法必须在加入频道前调用和进行设置,进入频道后无法再设置。
参数说明:
名称 | 描述 |
---|---|
profile | 频道模式 |
返回值 | 0-成功,<0-失败 |
连麦-设置用户角色(SetClientRole)
int SetClientRole(EV_CLIENT_ROLE_TYPE role, const char* permissionKey)
设置连麦用户角色,参数说明:
名称 | 描述 |
---|---|
role | 用户角色 |
permissionKey | 授权key,当前置为NULL即可 |
返回值 | 0-成功,<0-失败 |
连麦-设置本地视频属性(SetVideoProfile)
int SetVideoProfile(EV_VIDEO_PROFILE_TYPE profile, bool swapWidthAndHeight)
设置本地视频属性。注意:应在调用joinChannel/startPreview前设置视频属性。 参数说明:
名称 | 描述 |
---|---|
profile | 视频属性 |
swapWidthAndHeight | 是否交换宽和高。true :交换宽和高;false:不交换宽和高(默认) |
返回值 | 0-成功,<0-失败 |
连麦-启用/禁用网络测试(EnableLastmileTest)
int EnableLastmileTest(bool bEnable)
该方法启用/禁用网络连接质量测试,用于检测用户网络接入质量。默认该功能为关闭状态。
连麦-打开/关闭视频模式(EnableVideo)
int EnableVideo(bool bEnable)
该方法用于开启/关闭视频模式。可以在加入频道前或者通话中调用,在加入频道前调用,则自动开启视频模式,在通话中调用则由音频模式切换为视频模式。
连麦-设置流类型(SetRemoteStreamType)
int SetRemoteStreamType(UINT nUID, EV_REMOTE_VIDEO_STREAM_TYPE nType)
设置流类型。参数说明:
名称 | 描述 |
---|---|
nUID | 用户id |
nType | 视频流类型 |
返回值 | 0-成功,<0-失败 |
连麦-开启视频预览(StartPreview)
int StartPreview()
该方法用于启动本地视频预览。在开启预览前,必须先调用setupLocalVideo设置预览窗口及属性,且必须调用enableVideo开启视频功能。
连麦-开启屏幕共享(StartScreenCapture)
int StartScreenCapture(HWND hCaptureWnd)
该方法让用户在启用屏幕共享功能后切换共享屏幕或特定窗口,参数说明:
名称 | 描述 |
---|---|
hCaptureWnd | 指定共享的屏幕或窗口 |
返回值 | 0-成功,<0-失败 |
连麦-停止视频预览(StopPreview)
int StopPreview()
该方法用于停止本地视频预览
连麦-设置远程视频显示视图(SetupRemoteVideo)
int SetupRemoteVideo(const EVVideoCanvas& canvas)
该方法绑定远程用户和显示视图,即设定uid指定的用户用哪个视图显示。参数说明:
名称 | 描述 |
---|---|
canvas | 画布信息 |
返回值 | 0-成功,<0-失败 |
连麦-设置本地视频视图(SetupLocalVideo)
int SetupLocalVideo(const EVVideoCanvas& canvas)
- 该方法设置本地视频的显示相关属性。
- 应用程序通过调用此接口绑定本地视频流的显示视窗(view),并设置视频显示模式。
- 在应用程序开发中,通常在初始化后调用该方法进行本地视频设置,然后再加入频道。
参数说明:
名称 | 描述 |
---|---|
canvas | 视频显示相关信息 |
返回值 | 0-成功,<0-失败 |
配置旁路推流地址 (ConfigurePublisher)
int ConfigurePublisher(const EVPublisherConfiguration& config)
- 该方法用于配置旁路推流地址,以决定是否推流给普通观众观看。
- 请确保用户已经调用 SetClientRole() 且已将用户角色设为主播。
- 主播必须在调用CreateChannel之后,JoinChannel之前调用。
- CreateChannel的回调函数返回旁路推流地址,作为该函数入口参数config的推流地址。 注解:主播必须在进入频道之前调用该接口,也就是说进入频道开始连麦之后,就不能再对旁路推流信息进行配置 参数说明:
名称 | 描述 |
---|---|
config | 旁路推流信息 |
返回值 | 0-成功,<0-失败 |
struct EVPublisherConfiguration{
int width;
int height;
int framerate;
int bitrate;
public:
EVPublisherConfiguration()
: width(640)
, height(360)
, framerate(15)
, bitrate(500)
{}
};
注解 请确保设置的分辨率、码率和帧率与主播上行设置一致,以免视频质量下降。
名称 | 描述 |
---|---|
width | 设置旁路直播的输出码流的宽度。默认值为 360 |
height | 设置旁路直播的输出码流的高度。默认值为 360 |
framerate | 设置旁路直播的输出码率帧率。默认值为 15 fps |
bitrate | 设置旁路直播输出码流的码率。默认设置为 500 Kbps |
设置旁路推流布局(SetVideoCompositingLayout)
int SetVideoCompositingLayout(const EVVideoCompositingLayout& sei)
该方法设置直播场景里的画中画布局。该方法仅适用于在旁路推流的场景。当您在服务器端进行推流时:
- 您需要首先定义一个画布(canvas): 画布的宽和高(即视频的分辨率), 背景颜色,和您想在屏幕上显示的视频总数。
- 您需要在画布上定义每个视频的位置和尺寸(无论画布定义的宽和高有多大,每个视频用0到1的相对位置和尺寸进行定义),图片所在的图层,图片的透明度,视频是经过裁减的还是缩放到合适大小等等。
参数说明:
名称 | 描述 |
---|---|
EVVideoCompositingLayout | 旁路推流布局设置 |
struct EVVideoCompositingLayout
{
struct Region {
uid_t uid;
double x;//[0,1]
double y;//[0,1]
double width;//[0,1]
double height;//[0,1]
int zOrder; //optional, [0, 100] //0 (default): bottom most, 100: top most
// Optional
// [0, 1.0] where 0 denotes throughly transparent, 1.0 opaque
double alpha;
EVRENDER_MODE_TYPE renderMode;//EV_RENDER_MODE_HIDDEN: Crop, RENDER_MODE_FIT: Zoom to fit
Region()
:uid(0)
, x(0)
, y(0)
, width(0)
, height(0)
, zOrder(0)
, alpha(1.0)
, renderMode(EV_RENDER_MODE_HIDDEN)
{}
};
下表包含各参数的详细解释。
名称 | 描述 |
---|---|
canvasWidth | 请忽略此参数。画布的宽度由 ConfigurePublisher() 方法设置而不是通过 canvasWidth 设置。 |
canvasHeight | 请忽略此参数。画布的高度由 ConfigurePublisher() 方法设置而不是通过 canvasHeight 设置。 |
backgroundColor | 用以定义屏幕(画布)的背景颜色,可根据 RGB 填写所需颜色对应的 6 位 符号 |
regions | AgoraRtcVideoCompositingRegion 的主播用户列表。频道内每位主播在屏幕上均可以有一个区域显示自己的头像或视频,下面会详细说明 |
appData | 应用程序自定义的数据 |
Region的详细说明:
名称 | 描述 |
---|---|
uid | 待显示在该区域的主播用户 uid |
x[0.0,1.0] | 屏幕里该区域的横坐标 |
y[0.0,1.0] | 屏幕里该区域的横坐标 |
width[0.0, 1.0] | 该区域的实际宽度 |
height[0.0, 1.0] | 该区域的实际高度 |
zOrder[0, 100] | 用于定义图层。 0 表示该区域图像位于最下层,而 100 表示该区域图像位于最上层 |
alpha[0.0, 1.0] | 用于定义图像的透明度。 0 表示图像为透明的, 1 表示图像为完全不透明的 |
renderMode: RENDER_MODE_HIDDEN(1) | 经过裁减的 |
连麦-静音所有远端音频(MuteAllRemoteAudioStreams)
int MuteAllRemoteAudioStreams(bool mute)
该方法用于允许/禁止播放远端用户的音频流,即对所有远端用户进行静音与否。该方法不影响音频数据流的接收,只是不播放音频流。参数说明:
名称 | 描述 |
---|---|
mute | 是否禁止播放远端音频流。true:禁止,false:取消禁止 |
返回值 | 0-成功,<0-失败 |
连麦-静音指定用户音频(MuteRemoteAudioStream)
int MuteRemoteAudioStream(unsigned int uid, bool mute)
静音指定远端用户/对指定远端用户取消静音。本方法用于允许/禁止播放远端用户的音频流。该方法不影响音频数据流的接收,只是不播放音频流。参数说明:
名称 | 描述 |
---|---|
uid | 用户uid,无符号整型 |
mute | 是否禁止播放远端音频流。true:禁止,false:取消禁止 |
返回值 | 0-成功,<0-失败 |
连麦-将自己静音(MuteLocalAudio)
BOOL MuteLocalAudio(BOOL bMuted = TRUE)
/静音/取消静音。该方法用于允许/禁止往网络发送本地音频流。该方法不影响录音状态,并没有禁用麦克风。参数说明:
名称 | 描述 |
---|---|
bMuted | 是否禁止本地音频流。true:禁止,false:取消禁止 |
返回值 | 0-成功,<0-失败 |
连麦-是否将自己静音(IsLocalAudioMuted)
BOOL IsLocalAudioMuted()
/静音/取消静音。该方法用于允许/禁止往网络发送本地音频流。该方法不影响录音状态,并没有禁用麦克风。参数说明:
名称 | 描述 |
---|---|
返回值 | FALSE-未将自己静音,<TRUE-将自己静音 |
连麦-暂停所有远端视频流 (MuteAllRemoteVideoStreams)
int MuteAllRemoteVideoStreams(bool mute);
该方法用于允许/禁止播放所有远端视频流。该方法不影响视频数据流的接收,只是不播放视频流。。参数说明:
名称 | 描述 |
---|---|
bMuted | 是否禁止远端视频流。True : 停止播放所有用户的视频流,False : 允许播放所有用户的视频流 |
返回值 | 0-成功,<0-失败 |
连麦-暂停指定远端视频流 (MuteRemoteVideoStream)
int MuteRemoteVideoStream(unsigned int uid, bool mute);
该方法用于允许/禁止播放指定的远端视频流。该方法不影响视频数据流的接收,只是不播放视频流。参数说明:
名称 | 描述 |
---|---|
bMuted | 是否禁止uid指定用户的远端视频流。True : 停止播放指定用户的视频流,False : 允许播放指定用户的视频流 |
返回值 | 0-成功,<0-失败 |
连麦-暂停本地视频流 (MuteLocalVideo)
BOOL MuteLocalVideo(BOOL bMuted = TRUE);
该方法暂停发送本地视频流。该方法不影响本地视频流获取,没有禁用摄像头。只是不播放视频流。参数说明:
名称 | 描述 |
---|---|
bMuted | 是否禁止本地视频流。True : 不发送本地视频流,False : 发送本地视频流 |
返回值 | 0-成功,<0-失败 |
连麦-设置采集摄像头 (SetCurCamera)
BOOL SetCurCamera(const char* deviceID)
设置采集要使用的摄像头设备id。参数说明:
名称 | 描述 |
---|---|
deviceID | 摄像头设备id。 |
返回值 | 0-成功,<0-失败 |
连麦-获取当前采集摄像id (GetCurCameraID)
void GetCurCameraID(std::string& cameraId)
设置采集要使用的摄像头设备id。参数说明:
名称 | 描述 |
---|---|
cameraId | 当前使用的摄像头的设备id。 |
注解 cameraId需要调用std::string::reserve预定一个足够大的空间。否则,cameraId的大小会超出默认为std::string分配的空间,造成重新分配内存空间,导致报错。 目前定义MAX_DEV_ID_LENGTH=512,预定内存。
连麦-获取可以使用的所有摄像头(GetCameraDevices)
BOOL GetCameraDevices(OUT DevicesInfo* pVideoDev, OUT int& iDevCount, int maxDeviceCount)
名称 | 描述 |
---|---|
pVideoDev | 返回的可使用摄像头列表。 |
iDevCount | 可使用的摄像头的数目。 |
maxDeviceCount | 指定最多支持的摄像头数目。 |
注解 DevicesInfo,包含设备名称:strDevName,设备id:strDevID。需要预先在对内存分配空间,并且由用户自行释放内存。