126 lines
4.0 KiB
C#
126 lines
4.0 KiB
C#
using Agora.Rtc;
|
|
using Masuit.Tools.Systems;
|
|
using System;
|
|
using System.Collections.Concurrent;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Demo.Common.Helpers
|
|
{
|
|
public class AgoraHelper : IRtcEngineEventHandler
|
|
{
|
|
public static uint _localUId;
|
|
public static IRtcEngine _RtcEngineInstance;
|
|
public static int Init(string appId, uint localUid = 0)
|
|
{
|
|
if (null == _RtcEngineInstance)
|
|
{
|
|
_RtcEngineInstance = RtcEngine.CreateAgoraRtcEngine();
|
|
}
|
|
RtcEngineContext rtc_engine_ctx = new RtcEngineContext();
|
|
rtc_engine_ctx.appId = appId;
|
|
var ret = _RtcEngineInstance.Initialize(rtc_engine_ctx);
|
|
|
|
ret = _RtcEngineInstance.InitEventHandler(new RtcEngineEventHandler());
|
|
|
|
_localUId = localUid;
|
|
|
|
_RtcEngineInstance.EnableAudioVolumeIndication(200, 3, false);
|
|
return ret;
|
|
}
|
|
|
|
public static int UnInit()
|
|
{
|
|
if (null != _RtcEngineInstance)
|
|
{
|
|
// Dispose engine
|
|
_RtcEngineInstance.Dispose();
|
|
_RtcEngineInstance = null;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 渲染用户视频
|
|
/// </summary>
|
|
/// <param name="uid"></param>
|
|
/// <param name="controlHandle"></param>
|
|
/// <returns></returns>
|
|
public static int SetupUserVideo(uint uid, long controlHandle)
|
|
{
|
|
if (_localUId == uid)
|
|
{
|
|
// 本地用户
|
|
return _RtcEngineInstance.SetupLocalVideo(new VideoCanvas
|
|
{
|
|
view = controlHandle,
|
|
renderMode = RENDER_MODE_TYPE.RENDER_MODE_HIDDEN,
|
|
mirrorMode = VIDEO_MIRROR_MODE_TYPE.VIDEO_MIRROR_MODE_DISABLED,
|
|
uid = uid,
|
|
setupMode = VIDEO_VIEW_SETUP_MODE.VIDEO_VIEW_SETUP_ADD
|
|
});
|
|
}
|
|
else
|
|
{
|
|
return _RtcEngineInstance.SetupRemoteVideo(new VideoCanvas
|
|
{
|
|
view = controlHandle,
|
|
renderMode = RENDER_MODE_TYPE.RENDER_MODE_HIDDEN,
|
|
mirrorMode = VIDEO_MIRROR_MODE_TYPE.VIDEO_MIRROR_MODE_DISABLED,
|
|
uid = uid,
|
|
setupMode = VIDEO_VIEW_SETUP_MODE.VIDEO_VIEW_SETUP_ADD
|
|
});
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 清除已渲染的用户视频
|
|
/// </summary>
|
|
/// <param name="uid"></param>
|
|
/// <param name="controlHandle"></param>
|
|
/// <returns></returns>
|
|
public static int ClearUserVideo(uint uid, long controlHandle)
|
|
{
|
|
if (_localUId == uid)
|
|
{
|
|
// 本地用户
|
|
// 删除用户渲染
|
|
return _RtcEngineInstance.SetupLocalVideo(new VideoCanvas
|
|
{
|
|
view = controlHandle,
|
|
uid = uid,
|
|
setupMode = VIDEO_VIEW_SETUP_MODE.VIDEO_VIEW_SETUP_REMOVE
|
|
});
|
|
}
|
|
else
|
|
{
|
|
return _RtcEngineInstance.SetupRemoteVideo(new VideoCanvas
|
|
{
|
|
view = controlHandle,
|
|
uid = uid,
|
|
setupMode = VIDEO_VIEW_SETUP_MODE.VIDEO_VIEW_SETUP_REMOVE
|
|
});
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 渲染用户视频
|
|
/// </summary>
|
|
/// <param name="uid"></param>
|
|
/// <param name="controlHandle"></param>
|
|
/// <param name="delUid"></param>
|
|
/// <returns></returns>
|
|
public static int SetupUserVideo(uint uid, long controlHandle, uint delUid = 0)
|
|
{
|
|
if (delUid > 0)
|
|
{
|
|
ClearUserVideo(delUid, controlHandle);
|
|
}
|
|
return SetupUserVideo(uid, controlHandle);
|
|
}
|
|
}
|
|
}
|