因为要用到Visual C++,所以在安装.net运行时后,还需要安装 Visual C++ Redistributable for Visual Studio 才可以运行。
对了,他们家新的WebRtc版本好像要出来了,你们可以找他们要这个版本看看, 可能会更好的哦.
Agora声网的Windows端SDK只提供了C++的实现, 用在.NET平台上对开发者要求很高. 所以用CLI将其做了一个桥接, 使其可以使用C#进行开发.
原始数据API部分因为要在managed与unmanaged的内存之间拷贝数据,所以不推荐运算量大的应用使用,如果要使用,推荐直接用声网的Native DLL来实现
发现声网现在也改成这样子了, 原来Native DLL的实现方式只能有一个DLL被加载, 现在也改成事件形式了.
通信与直播功能下的接口都已实现
信令接口声网自身还处有一些内测接口,这些接口就没有实现。等他们有发新的版本了,再跟进实现。 ~~ 同时,信令接口现在实现只处于能编译通过,是否可以正常使用还没有测试,请使用的朋友自己考虑。~~
如果使用过程中有发现BUG,请提交issue。本人会尽快处理,如果各位能自行处理后把结果pull上来就更好了。
升级至3.6.0
注意: 本次更新修改了agorasdk下的目录结构.
本次更新后, 不再提供分支, 要使用历史版本请使用tag
升级到3.5.1, 添加3.5.1发版说明中的修改与添加内容, 因3.5.0.2至3.5.1中间的版本并没有接口部分更新, 所以这几版本的更新也默认在3.5.1中提供了. 注意: 本次更新修改了agorasdk下的目录结构, 让x86与x64引用的目录更加清楚.
升级到3.5.0.2, 添加 setLocalVideoRenderer setRemoteVideoRenderer
升级到3.4.5, 添加3.4.5发版说明中的修改内容,因3.4.2至3.4.4发版中并没有接口部分更新, 所以这几个版本的更新也默认在3.4.5中提供
升级到3.4.1, 添加3.4.0和3.4.1发版说明中的修改内容
升级至 3.3.1
- 添加3.3.0和3.3.1发版说明中说明的修改内容
- initialize添加接受 Context的版本,实现与3.3版本基本一致
合并3.2.1版本入主分支。从这个版本开始主分支将是最新的版本修改,各个分支在声网升级到主要大版本后作为legcy分支使用。
升级至3.2.1, 添加
- setAudioEffectPreset
- setVoiceBeautifierPreset
- setAudioEffectParameters
- AUDIO_SCENARIO_TYPE enum 中新增 AUDIO_SCENARIO_MEETING(8)
- LOCAL_VIDEO_STREAM_ERROR enum 新增 LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_CLOSED(12)
- setClientRole
升级至3.1.2,添加3.1.0版本说明中的功能
AgoraClrLibrary.initialize方法添加areaCode
修改int uid为uint uid, 避免uid为负的情况
合并 @wulaoh 关于RTM实时消息同步到1.3.0版本的提交
合并 @wulaoh 关于RTM部分的提交
添加多频道管理部分
进入 3.0 分支, 音视频API部分添加除了多频道管理之外的API
本次修改可解决移动端无法得到PC端推流的问题.
修正在没有开启加密时, 就注册数据包观察器的BUG, 现在只有在用户调用setEncryptionSecret后, 数据包观察器才会被注册, 相应的事件才会被触发, 但监听不会出错, 只是不会被调用而已. 同时在退出频道时, 自动退出数据包观察器.
合并2.9分支进入主分支, 本次更新是兼容破坏性的, 请各位评估后更新.
添加RTM实时消息服务
居然一年没有更新了, 现在更新到2.9.1版本, 本版本是破坏性更新, 很多API与类都进行了不兼容的改变, 具体请参考Agora官方文档. 各位要升级的话要慎重行事.
信令服务移除
移除部分文档上已经没有的接口
升级Master分支至2.3,要以前版本的请到各自版本的分支去拿
onStreamUrlUnpublished 改为 onStreamUnpublished
添加下列函数
int setLocalPublishFallbackOption(StreamFallbackOptions option);
int setRemoteSubscribeFallbackOption(StreamFallbackOptions option);
int setRemoteDefaultVideoStreamType(RemoteVideoStreamType type);
String^ getErrorDescription(int code);
添加下列回调
onTokenPrivilegeWillExpire
onConnectionStateChanged
onFirstLocalAudioFrame
onFirstRemoteAudioFrame
onUserEnableLocalVideo
onVideoSizeChanged
onRemoteVideoStateChanged
onLocalPublishFallbackToAudioOnly
onRemoteSubscribeFallbackToAudioOnly
onCameraFocusAreaChanged
onRemoteAudioStats
onRemoteAudioTransportStats
onRemoteVideoTransportStats
onRemoteAudioMixingBegin
onRemoteAudioMixingEnd
onAudioEffectFinished
onStreamInjectedStatus
onMediaEngineLoadSuccess
onMediaEngineStartCallSuccess
修改 muteAllRemoteVideoStream 为 muteAllRemoteVideoStreams
添加下列函数
ConnectionStateType getConnectionState();
int setDefaultMuteAllRemoteAudioStreams(bool mute);
int setVideoEncoderConfiguration(ClrVideoEncoderConfiguration^ config);
int setDefaultMuteAllRemoteVideoStreams(bool mute);
int adjustAudioMixingPlayoutVolume(int volume);
int adjustAudioMixingPublishVolume(int volume);
int setExternalAudioSink(bool enabled, int sampleRate, int channels);
int setExternalVideoSource(bool enabled, bool useTexture);
int pushVideoFrame(ClrExternalVideoFrame^ frame);
int addVideoWatermark(ClrRtcImage^ image);
int clearVideoWatermark();
因2.3.0以后,声网就不再支持录制接口,转而由Recording SDK来提供,于是相应删除
startRecordingService
stopRecordingService
refreshRecordingServiceStatus
onRefreshRecordingServiceStatus
修改ClrLiveTranscoding不能设置transcodingUsers的BUG
修改信令中 messageInstantSend 方法不能处理中文的BUG
修改枚举设备列表BUG的issue
新增以下接口
int getEffectsVolume();
int setEffectsVolume(int volume);
int setVolumeOfEffect(int soundId, int volume);
int playEffect(int soundId, String^ file, int loopCount, double pitch, double pan, int gain, bool publish);
int stopEffect(int soundId);
int stopAllEffects();
int preloadEffect(int soundId, String^ file);
int unloadEffect(int soundId);
int pauseEffect(int soundId);
int pauseAllEffects();
int resumeEffect(int soundId);
int resumeAllEffects();
2.3
合并2.1分支进入主分支,2.2因为删除了一些头文件,造成不兼容,新开2.2分支进行开发,原2.1的一些没有开发完的功能将在2.2分支上实现
新增事件
void onStreamUrlUnpublished(String^ url);
void onStreamPublished(String^ url, int error);
void onTranscodingUpdated();
因为2.1版本声网进行了很大的改动,所以2.0(含)以前的版本进入2.0分支,需要的用户请使用2.0这个分支。2.1版本在2.1分支开发中,以后会并入master分支中。
新增以下接口
int setLocalVoiceEqualization(AudioEqualizationBandFrequency freq, int bandGain);
int setLocalVoiceReverb(AudioReverbType type, int value);
int setLocalVideoMirrorMode(VideoMirrorModeType mode);
String^ getVersion(int% build);
int enableLoopbackRecording(bool enabled);
int pushAudioFrame(ClrAudioFrameType type, ClrAudioFrame ^frame, bool wrap);
int addPublishStreamUrl(String^ url, bool transcodingEnabled);
int removePublishStreamUrl(String^ url);
int setLiveTranscoding(ClrLiveTranscoding ^transcoding);
int addInjectStreamUrl(String^ url, ClrInjectStreamConfig ^config);
int removeInjectStreamUrl(String^ url);
新增以下事件
virtual void onConnectionBanned()
virtual void onRequestToken();
virtual bool onMixedAudioFrame(AudioFrame& audioFrame);
官方依然没有在2.1的SDK上加入 pushExternalAudioFrame 这个方法。
2.0版本上声网有一个bug,摄像头占用问题,这个问题在2.0.2版本上就没有,大家可以先把agora_rtc_sdk.dll直接换成2.0.2的。
2.0版本中 IMediaEngine 接口新加了 registerVideoRenderFactory 与 pushAudioFrame ,但是官方文档里并没有,所以暂时不实现,等官方明确了这两个接口是干嘛的后在实现。 同时,官方文档里说2.0版本新加了 pushExternalAudioFrame 推送外部音频帧 这个方法,但实际上并没有。而且在咨询了官方后,声网表示并没有在2.0上发布这个方法,所以这个方法就没有出现在 CLI 项目里,请注意,这不是一个BUG。
项目所包含的SDK已经是1.14的了, 但官方文档还是1.12的. 原来我实现的信令接口是非常早期的版本, 在 1.12 的官方文档上删除了非常多的接口与事件, 但为了向下兼容还是什么的原因, 有一些事件还在头文件中存在, 这部分我暂时不去删除它, 但在以后的版本中会进行删除,大家请照官方的文档来进行开发, 也尽量不要用内测部分的接口, 虽然我也加了上去, 但不建议各位使用.
新增 API setAudioProfile() 设置音频参数和应用场景
int setAudioProfile(AudioProfileType profile, AudioScenarioType scenario)
新增 API setLocalVoicePitch() 提供基础变声功能
int setLocalVoicePicth(double pitch)
直播场景: 新增 API setInEarMonitoringVolume() 提供调节耳返音量功能
int setInEarMonitoringVolumne(int volumne)
添加更新屏幕截图区域(updateScreenCaptureRegion)接口
int updateScreenCaptureRegion(const Rect *rect)
因声网在1.12.0修改内部多个实现参数, 所以本版本无法与1.11.1兼容, 请测试后使用
配置旁路直播推流(configPublisher), 修改PublishConfiguration内容, 添加injectStream的部分.
virtual int configPublisher(ClrPublisherConfiguration config);
添加监测到活跃用户回调(onActiveSpeaker)事件
virtual void onActiveSpeaker(int uid);
修改开启屏幕共享(startScreenCapture)
int startScreenCapture(IntPtr windowsId, int captureFreq, ClrRect rect);
修改开始客户端录音 (startAudioRecording), 添加AudioRecordingQualityType参数
int startAudioRecording (const char* filePath, AudioRecordingQuality quality)
删除 int setScreenCaptureWindow(IntPtr windowId); 方法
拖动语音进度条(setAudioMixingPosition)
int setAudioMixingPosition(int pos /*in ms*/)
伴奏播放已结束回调(onAudioMixingFinished)
virtual void onAudioMixingFinished()
旁路这个API在声网的实现上规定是win32的, 所以你编译成win64的话, 这个接口献认返回0, 而不会有实际效果 配置旁路直播推流(configPublisher)
virtual int configPublisher(const PublisherConfiguration& config);
注册数据包观测器(registerPacketObserver)
int registerPacketObserver(IPacketObserver* observer)
这个方法已经通过代理的形式把内部的实现实现到了AgoraClr上了, 例如
//PacketObserver Part
public delegate bool onSendAudioPacket(ClrPacket^ packet);
public delegate bool onSendVideoPacket(ClrPacket^ packet);
public delegate bool onReceiveAudioPacket(ClrPacket^ packet);
public delegate bool onReceiveVideoPacket(ClrPacket^ packet);
这一系统方法