Meeting.Demo/Demo.Common/Helpers/AgoraHelper.cs

124 lines
3.9 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
{
private 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;
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);
}
}
}