【Zoom Meeting SDK】Windows SDKのC# Wrapperに新しいインタフェースを追加する。
はじめに
Zoom Meeting SDKのWindows SDKはC++で提供されているのですが、合わせてC#へのWrapperも提供されています。
しかしながら、このWrapperプロジェクトはC++のインタフェースを完全に含んでいるわけではないとの事です。
Wrapperに含まれていないインタフェースについては、自力で追加する必要があります。
公式ドキュメントにインタフェースの追加の仕方が記載されてはいるのですが、説明不足なのか私の読解力の問題なのか記載内容に沿ってやると上手くいかなかったので、備忘録としてやり方を残しておきます。
ちなみに筆者はC++未経験、C#は業務で浅く触った程度でしたので、できればC#使いたいなと思い立った次第です。
C++使い慣れている方、プロジェクトの都合上C++でも問題ない方でしたら普通にC++のまま使った方が良いんじゃないかなぁ…と思いました。
前提条件
- Zoom SDKおよびWrapperのバージョン
- 5.9.7.3953
ケース
- 5.9.7.3953
Zoom Meeting SDKのWindows SDKを使って音声データ取得ができないか調査中でしたので、例として以下のような追加をしたいと思います。
手順
Wrapperを開く
- Zoom MarketplaceからWrapperをダウンロードします。
- ダウンロードしたZipファイルを解凍後、以下をVisual Studioで開きます。
zoom-c-sharp-wrapper-5.9.7.3953\zoom-c-sharp-wrapper-5.9.7.3953\x86\zoom_sdk_c_sharp_wrap\zoom_sdk_c_sharp_wrap.sln
- ソリューションを開くと
zoom_sdk_dotnet_wrap
というプロジェクトがあります。これが修正する対象のC# Wrapperです。
Wrapperを修正する。
zoom-c-sharp-wrapper-5.9.7.3953\zoom-c-sharp-wrapper-5.9.7.3953\x86\zoom_sdk_c_sharp_wrap\zoom_sdk_c_sharp_wrap.sln
zoom_sdk_dotnet_wrap
というプロジェクトがあります。これが修正する対象のC# Wrapperです。追加したいIMeetingRecordingController
クラスにWrapper上で対応しているファイルは以下になります。
- meeting_recording_wrap.h
- meeting_recording_wrap.cpp
- 上記2ファイルはドキュメントに記載なかったですが修正必要でした。
- meeting_recording_dotnet_wrap.h
- meeting_recording_dotnet_wrap.cpp
それぞれに対してStartRawRecording()
, StopRawRecording()
を追加していきます。
// ==== 省略 ====
//virtual SDKError DisAllowLocalRecording(unsigned int userid) = 0;
DEFINE_FUNC_1(DisAllowLocalRecording, SDKError, unsigned int, userid)
//virtual SDKError RequestCustomizedLocalRecordingSource() = 0;
DEFINE_FUNC_0(RequestCustomizedLocalRecordingSource, SDKError)
+ DEFINE_FUNC_0(StartRawRecording, SDKError)
+ DEFINE_FUNC_0(StopRawRecording, SDKError)
// ==== 省略 ====
定義しているマクロDEFINE_FUNC_0
ですが、追加したいメソッドの引数の数によって使用するマクロが異なります。
例えば、引数が1つであれば、DEFINE_FUNC_1
を使用する形です。
// ==== 省略 ====
//virtual SDKError DisAllowLocalRecording(unsigned int userid) = 0;
IMPL_FUNC_1(IMeetingRecordingController, DisAllowLocalRecording, SDKError, unsigned int, userid, SDKERR_UNINITIALIZE)
//virtual SDKError RequestCustomizedLocalRecordingSource() = 0;
IMPL_FUNC_0(IMeetingRecordingController, RequestCustomizedLocalRecordingSource, SDKError, SDKERR_UNINITIALIZE)
+ IMPL_FUNC_0(IMeetingRecordingController, StartRawRecording, SDKError, SDKERR_UNINITIALIZE)
+ IMPL_FUNC_0(IMeetingRecordingController, StopRawRecording, SDKError, SDKERR_UNINITIALIZE)
// ==== 省略 ====
こちらで使用しているIMPL_FUNC_0
についてもDEFINE_FUNC_0
と同様に引数の数で使用するマクロが変わります。
// ==== 省略 ====
public interface class IMeetingRecordingControllerDotNetWrap
{
public:
SDKError StartRecording(DateTime^% startTimestamp);
SDKError StopRecording(DateTime^% stopTimestamp);
SDKError CanStartRecording(bool cloudRecording, unsigned int userId);
SDKError CanAllowDisAllowLocalRecording();
SDKError StartCloudRecording();
SDKError StopCloudRecording();
SDKError IsSupportLocalRecording(unsigned int userId);
SDKError AllowLocalRecording(unsigned int userId);
SDKError DisAllowLocalRecording(unsigned int userId);
SDKError RequestCustomizedLocalRecordingSource();
+ SDKError StartRawRecording();
+ SDKError StopRawRecording();
// ==== 省略 ====
private ref class CMeetingRecordingControllerDotNetWrap : public IMeetingRecordingControllerDotNetWrap
{
public:
static property CMeetingRecordingControllerDotNetWrap^ Instance
{
CMeetingRecordingControllerDotNetWrap^ get() { return m_Instance; }
}
virtual SDKError StartRecording(DateTime^% startTimestamp);
virtual SDKError StopRecording(DateTime^% stopTimestamp);
virtual SDKError CanStartRecording(bool cloudRecording, unsigned int userId);
virtual SDKError CanAllowDisAllowLocalRecording();
virtual SDKError StartCloudRecording();
virtual SDKError StopCloudRecording();
virtual SDKError IsSupportLocalRecording(unsigned int userId);
virtual SDKError AllowLocalRecording(unsigned int userId);
virtual SDKError DisAllowLocalRecording(unsigned int userId);
virtual SDKError RequestCustomizedLocalRecordingSource();
+ virtual SDKError StartRawRecording();
+ virtual SDKError StopRawRecording();
// ==== 省略 ====
public interface class IMeetingRecordingControllerDotNetWrap
とrivate ref class CMeetingRecordingControllerDotNetWrap
の両方にメソッド定義を追加してください。
// ==== 省略 ====
SDKError CMeetingRecordingControllerDotNetWrap::DisAllowLocalRecording(unsigned int userId)
{
return (SDKError)ZOOM_SDK_NAMESPACE::CSDKWrap::GetInst().GetMeetingServiceWrap().
GetMeetingRecordingController().DisAllowLocalRecording(userId);
}
SDKError CMeetingRecordingControllerDotNetWrap::RequestCustomizedLocalRecordingSource()
{
return (SDKError)ZOOM_SDK_NAMESPACE::CSDKWrap::GetInst().GetMeetingServiceWrap().
GetMeetingRecordingController().RequestCustomizedLocalRecordingSource();
}
+ SDKError CMeetingRecordingControllerDotNetWrap::StartRawRecording()
+ {
+ return (SDKError)ZOOM_SDK_NAMESPACE::CSDKWrap::GetInst().GetMeetingServiceWrap().
+ GetMeetingRecordingController().StartRawRecording();
+ }
+
+ SDKError CMeetingRecordingControllerDotNetWrap::StopRawRecording()
+ {
+ return (SDKError)ZOOM_SDK_NAMESPACE::CSDKWrap::GetInst().GetMeetingServiceWrap().
+ GetMeetingRecordingController().StopRawRecording();
+ }
// ==== 省略 ====
こちらも上記の通り追加してください。
プロジェクトをビルドする
ソリューションエクスプローラーのzoom_sdk_dotnet_wrap
を右クリック > ビルド
を選択しwrapperをビルドします。
これで以下のdllが更新されるはず。
zoom-c-sharp-wrapper-5.9.7.3953\zoom-c-sharp-wrapper-5.9.7.3953\x86\bin\zoom_sdk_dotnet_wrap.dll
終わりに
Zoom SDKですが、日本語の記事などが見つからない上、公式のドキュメントも情報が足りず、かなり苦労しそうな印象です。
先にも書いた通り、C++ができる方であればSDKをそのまま使用した方が、まだリファレンスがあるのでやりやすいかと思います。
ちなみに、本来やりたかった音声データ取得のためには、IZoomSDKAudioRawDataDelegate
というクラスが必要っぽいのですが、Wrapperに含まれていないため追加が必要でした。
今回はメソッドのインタフェースを追加しましたが、使用したいクラス自体がWrapperに不足している場合はどうやって追加すればいいのか…ドキュメントに記載がない…。うーむ。。。
Author And Source
この問題について(【Zoom Meeting SDK】Windows SDKのC# Wrapperに新しいインタフェースを追加する。), 我々は、より多くの情報をここで見つけました https://qiita.com/h-ueno2/items/97d077ac7eb367afb547著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .