LoginSignup
1
3

More than 3 years have passed since last update.

agora.io VideoSDK画面共有(ScreenSharing)実装例(その1)

Last updated at Posted at 2019-10-01

概要

現在、agora.io VideoSDK 画面共有(ScreenSharing)については、以下のデモが用意されています。
このサンプルの場合、Joinボタンクリック時に画面共有(ScreenSharing)ダイアログが表示され、キャンセルした時は一度leaveする必要があります。
Share The Screen

この記事では(Join後)leaveせずに画面共有ダイアログを繰り返し表示できるサンプルに改造します。

参考リファレンス:Share the Screen

サンプル

こちらをご利用ください。
(バージョン3はAgoraIO-Screen-Sharing-Web-WithCamera-v3
バージョン4はAgoraIO-Screen-Sharing-Web-WithCamera-v4

以降は、バージョン4用サンプルで説明しています。

機能一覧

※追加機能のみ表示
・SCREENSHARINGボタン 

開発環境

・agora.io VideoSDK(Web)

agora.io VideoSDK 画面共有ダイアログ再表示の実装例

SCREENSHARINGボタンの追加

はじめに画面共有ダイアログを起動させるためのボタンを追加します。

./index.html
<button id="screensharing" type="button" class="btn btn-primary btn-sm">SCREENSHARING</button>

SCREENSHARINGボタンクリック時

次に、SCREENSHARINGボタンをクリックしたときの処理を追加します。

./index.js
$("#screensharing").click(function (e) {
  screensharing();
})

SCREENSHARINGボタンクリック時の詳細処理

SCREENSHARINGボタンクリック後、画面共有ダイアログを起動させる処理を追加します。

./index.js

async function screensharing() {

  [ localTracks.videoTrack ] = await Promise.all([
    AgoraRTC.createScreenVideoTrack({encoderConfig: {width: {max: 1280} , height: {max: 720}, frameRate: 30}},"disable")
  ]);
  localTracks.videoTrack.on("track-ended", handleTrackEnded);
  localTracks.videoTrack.play("local-player");
  $("#local-player-name").text(`localVideo(${options.uid})`);

  // publish local tracks to channel
  await client.publish(Object.values(localTracks));
  console.log("publish success");

}

共有停止ボタンクリック時の処理

画面共有を停止した時に表示している映像を停止する処理になります。

./index.js
function handleTrackEnded() {
  var track = localTracks["videoTrack"];
  if(track) {
    track.stop();
    track.close();
    localTracks["videoTrack"] = undefined;
  }
  $("#local-player-name").text("");
  client.unpublish(track);
  console.log("handleTrackEnded");
}

共有画面ダイアログのキャンセル時対応

共有画面ダイアログをキャンセルした場合でもJoin処理は成功するように、
(画面共有用)VideoTrack取得処理を分けています。

./index.js
async function join() {
 //省略
 /*JoinおよびAudioTrack取得処理*/
  [ options.uid, localTracks.audioTrack] = await Promise.all([
    // join the channel
    client.join(options.appid, options.channel, options.token || null),
    // ** create local tracks, using microphone and screen
    AgoraRTC.createMicrophoneAudioTrack()
  ]);
  console.log(options.uid);

 /*(画面共有用)VideoTrack取得処理*/
  [ localTracks.videoTrack ] = await Promise.all([
    AgoraRTC.createScreenVideoTrack({encoderConfig: {width: {max: 1280} , height: {max: 720}, frameRate: 30}},"disable")
  ]);
  localTracks.videoTrack.on("track-ended", handleTrackEnded);

 //省略
}

動作確認

それでは動作確認してみます。

1.画面起動

画面を起動します。(index.htmlをクリック)
image1.PNG

2.各種選択・入力

appId、チャネル名を入力します。
image2.PNG
(注)appIdは実物のものではありません。

3.Join(画面共有ダイアログ起動)

Joinをクリックします。(画面共有ダイアログが起動)

Join後に画面共有ダイアログが起動します。
image3.PNG

4.画面共有ダイアログのキャンセル

画面共有ダイアログをキャンセルしたため、VideoTrackの取得できずエラーとなります。
image5.PNG

5.画面共有ダイアログの再表示

(Join後に再び画面共有ダイアログを起動するため)SCREENSHARINGボタンをクリックします。

画面共有ダイアログが再び表示されます。
image3.PNG

6.共有の開始

共有ボタンをクリックし、共有を開始します。
image6.PNG

7.共有の停止

共有を停止します。

8.画面共有ダイアログの再々表示

再びSCREENSHARINGボタンをクリックします。
再び画面共有ダイアログが表示されます。
image3.PNG

SCREENSHARINGボタンをクリックすることで、Join後に繰り返し画面共有ダイアログを表示させることができました。

最後に

agora.ioに関するお問い合わせはこちらから
スクリーンショット 0001-08-15 13.41.56.png

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3