内蔵カメラ
SDKは内蔵カメラを提供し、開発者が迅速にカメラを呼び出す、またはカメラにより多くのインタラクション制御する必要がある場合は、内蔵カメラ方式を使用することをお勧めします。
ステップ1:SDKの統合
import { ArSdk } from 'tencentcloud-webar';// SDKクラス
プロジェクトをコンパイルする必要がない場合は、直接次の方式を引用することができます。
<script charset="utf-8" src="https://webar-static.tencent-cloud.com/ar-sdk/resources/latest/webar-sdk.umd.js"></script>
ステップ2:インスタンスの初期化
続いて、SDKインスタンスを初期化して表示に使用します。
// 認証パラメータの取得const authData = {licenseKey: 'xxxxxxxxx',appId: 'xxx',authFunc: authFunc // 詳細については「License の設定と使用 - 署名方法」をご参照ください};const config = {module: { // 0.2.0バージョンの追加beautify: true, // 美顔モジュールを有効にするかどうか。有効にすると美顔、メイクアップ、ステッカーなどの機能を使用することができますsegmentation: true // 人物画像分割モジュールを有効にするかどうか。有効にすると背景機能が使用できますsegmentation: true // 人物画像分割モジュールを有効にするかどうか。有効にすると背景機能が使用できます},auth: authData, // 認証パラメータcamera: { // camera設定を渡して内蔵カメラを呼び出しますwidth: 1280,height: 720},beautify: { // 美顔パラメータの初期化(オプション)whiten: 0.1,dermabrasion: 0.3,eye: 0.2,chin: 0,lift: 0.1,shave: 0.2}}const sdk = new ArSdk(// configオブジェクトを渡してsdkの初期化に使用しますconfig)let effectList = [];let filterList = [];sdk.on('created', () => {// ページ表示のためにcreatedコールバックでエフェクトおよびフィルターリストをプルすることができます。詳細については、「SDKへのアクセス - パラメータと方法」をご参照くださいsdk.getEffectList({Type: 'Preset',Label: 'メイクアップ',}).then(res => {effectList = res});sdk.getCommonFilter().then(res => {filterList = res})})// readyコールバックでsetBeautify/setEffect/setFilterなどのレンダリング方法を呼び出すことができます// 詳細については「SDKへのアクセス - 美顔およびエフェクトの設定」をご参照くださいsdk.on('ready', () => {// 美顔設定sdk.setBeautify({whiten: 0.2});// エフェクトの設定sdk.setEffect({id: effectList[0].EffectId,intensity: 0.7});// フィルターの設定sdk.setFilter(filterList[0].EffectId, 0.5)})
ご注意:
美顔検出および人物画像分割はいずれも一定のロード時間およびリソースを消費するため、初期化設定でモジュール設定を提供することよって、必要な機能を選択できるようにします。無効化したモジュールはプリロードおよび初期化を行いません。
config内のcameraパラメータはSDKが現在のデバイスのカメラのメディアストリームを収集して入力とすることを表します。cameraパラメータを設定すると、SDKはさらに一連の基本的なデバイス管理方法を提供します。詳細については、デバイス制御をご参照ください。
ステップ3:ストリームの再生
SDKは迅速にページで出力効果をプレビューできるプレーヤーを提供し、ローカルのプレビュー効果のシナリオに使用することができます。異なるコールバックイベントで取得したplayerには若干の違いがあり、異なるシナリオに適用されます。自身の業務ニーズに応じて処理方式を選択することができます。
画面表示に対する時間制限の要求がある場合、
cameraReady
コールバックでプレーヤーを取得することができます。この時SDKがリソースのロードおよび検出の初期化を開始していない場合、元の画面のみを表示します。sdk.on('cameraReady', async () => {// SDKのplayerを初期化します。その内、my-dom-idはプレーヤーを設定する必要があるコンテナidを表しますconst player = await sdk.initLocalPlayer('my-dom-id')// 直接再生await player.play()})
初期化が完了し、美顔を有効化した後に再び再生したことを検出する必要がある場合は、readyコールバックでプレーヤーを取得することができます。
sdk.on('ready', async () => {// SDKのplayerを初期化します。その内、my-dom-idはプレーヤーを設定する必要があるコンテナidを表しますconst player = await sdk.initLocalPlayer('my-dom-id')// 直接再生await player.play()})
ご注意:
initLocalPlayerが取得したプレーヤーはデフォルトではミュートです。ミュートを解除するとエコーが発生する可能性があります。
取得したplayerは、内部に
sdk.getOutput()
メソッドがパッケージ化され、ユーザーが使用しやすくなっています。SDK initLocalPlayerの後、そのplayerオブジェクトはいくつかの一般的なインターフェースをパッケージ化し、以下のメソッドをサポートしています。
方法名 | 説明 | 入力パラメータ | 戻り値 |
play | 再生 | - | Promise; |
pause | 一次停止(ストリーミングは停止せず、再開できます) | - | - |
stop | 停止(ストリーミングも停止します) | - | - |
mute | ミュート | - | - |
unmute | ミュート解除 | - | - |
setMirror | イメージの設定 | true|false | - |
getVideoElement | 内蔵videoオブジェクトの取得 | - | HTMLVideoElement |
destroy | 破棄 | - | - |
ご注意:
プレーヤーはデフォルトではcamera デバイス制御の変化に追従します。cameraのデバイス制御はメインスイッチで、localPlayerの再生制御はサブスイッチであることが簡単に理解できます。例:
camera.muteVideo
を呼び出すと、デバイスのビデオストリームを無効化します。この時localPlayerが再びplayを呼び出しても再生停止状態になります。camera.unmuteVideo
を呼び出すと、再びビデオストリームを有効化します。この時localPlayerはデフォルトで再生状態を自動的に復元します。
そのためcamera設定を有効にした状況ではlocalPlayerの状態を手動で制御する必要はなく、cameraデバイスの状態の管理のみとなります。ステップ4:出力の取得
ストリームをプッシュする必要がある場合は、getOutputメソッドを使用して出力するメディアストリームを取得することができます。
出力するMediaStreamを取得してから、サードパーティーのSDK(例えばTRTC Web SDK、ライブイベントストリーミングWeb SDK)を組み合わせてプッシュなどの後続処理を行うことができます。
const output = await sdk.getOutput()
ご注意:
内蔵カメラを使用して初期化した場合、getOutput出力するメディアストリームはいずれも
MediaStream
タイプです。出力するメディアストリーム内のvideoトラックは ArSdkリアルタイムで処理され、
audio
トラックがあれば変更されません。getOutputメソッドは非同期メソッドで、sdkが一連の初期化動作を実行するまで待機し、ストリームを生成した後に返すことができます。
getOutputメソッドはFPSパラメータを渡し、出力するフレームレートをFPS(例えば15)に設定することをサポートし、渡されない場合、デフォルトで入力ストリームのフレームレートを使用します。
ステップ5:デバイス制御
カメラの起動/停止などの操作を行う必要がある場合、sdk.cameraインスタンスによって実現できます。サンプルコードは次のとおりです。
const output = await sdk.getOutput()// todoではいくつかのサービスロジックを省略しています// ...// getOutputの後にsdk.cameraの初期化がすでに完了していた場合は、直接取得することができますconst cameraApi = sdk.camera// 現在のデバイスリストの取得const devices = await cameraApi.getDevices()console.log(devices)// ビデオトラックの無効化// cameraApi.muteVideo()// ビデオトラックの有効化// cameraApi.unmuteVideo()// 複数のカメラがある場合はデバイスidに応じて切り替えできます// await cameraApi.switchDevices('video', 'your-device-id')
すぐに
sdk.camera
を取得する必要がある場合は、初期化時に、cameraReadyイベントで取得できます。// todoではいくつかの初期化パラメータを省略しています// ...const sdk = new ArSdk(config)let cameraApi;sdk.on('cameraReady', async () => {cameraApi = sdk.camera// 現在のデバイスリストの取得const devices = await cameraApi.getDevices()console.log(devices)// ビデオトラックの無効化// cameraApi.muteVideo()// ビデオトラックの有効化// cameraApi.unmuteVideo()// 複数のカメラがある場合はデバイスidに応じて切り替えできます// await cameraApi.switchDevices('video', 'your-device-id')})
デバイスを制御しやすくするために、内蔵された
camera
は次のような方法の呼び出しを提供しています。メソッド名 | 説明 | 入力パラメータ | 戻り値 |
getDevices | 現在のすべてのデバイスリストを取得します | - | Promise<Array<MediaDeviceInfo>> |
switchDevice | デバイスを切り替えます | type:string, deviceId:string | Promise |
muteAudio | 現在のカメラストリームをミュートする | - | - |
unmuteAudio | ミュートの復元 | - | - |
muteVideo | 現在のカメラストリーム内の画面を無効化します。この場合、ストリームは存在しますがビデオトラックはすでに無効化されています | - | - |
unmuteVideo | 現在のカメラストリーム内の画面を有効化します | - | - |
stopVideo | 現在のカメラデバイスを停止すると、ビデオストリームが停止します(オーディオストリームはまだ存在します) | - | - |
restartVideo | 現在のカメラを再起動し、stopVideoの後に使用します | - | Promise |
stop | 現在のカメラのビデオおよびオーディオデバイスを停止します | - | - |