LoginSignup
2
3

More than 1 year has passed since last update.

WebRTCでトランシーバーアプリを作成

Posted at

イベント警備や家電量販店で無線を利用したトランシーバー(インカム)を今回スマホブラウザで作成してみました。
この記事ではAgora.io SDKを用いて以下の機能の実装方法を解説します。

  • 特定のCHに接続
  • ボタンを押している時だけ発話

利用するSDKはWebSDKになります。
サンプルはAgoraIO-WebRTC-Transceiverに公開しています。

実装内容

実装内容を詳しく見ていきます。

STEP1

まずは、音声通話への入室を実行します。プルダウンで選択したCHに入室します。
入室時には音声ミュートをしておきます。

index.js
async function join() {

  // add event listener to play remote tracks when remote user publishs.
  client.on("user-published", handleUserPublished);
  client.on("user-unpublished", handleUserUnpublished);

  // join a channel and create local tracks, we can use Promise.all to run them concurrently
  [ 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 camera
    AgoraRTC.createMicrophoneAudioTrack()
  ]);

  //default mute
  localTracks.audioTrack.setMuted(true);//ボタンを押したら発話する仕様なのでデフォルトでミュートにしておく
  // publish local tracks to channel
  await client.publish(localTracks.audioTrack);
  console.log("publish success");
}

STEP2

次に発話するための実装です。

index.js
function startup() {
  var el = document.getElementById("talk");
  el.addEventListener("touchforcechange", function(evt){evt.preventDefault()}, false);
  el.addEventListener("touchstart", function(evt){localTracks.audioTrack.setMuted(false)}, false);
  el.addEventListener("touchend", function(evt){localTracks.audioTrack.setMuted(true)}, false);
}
document.addEventListener("DOMContentLoaded", startup);

Talkボタンをタッチしている間はミュートを解除します。
ボタンから離れるとミュートをかけます。

touchforcechangeについてはiOS Safariでボタンを長押ししているとコピー等のメニューが出てしまうため、処理を追加しておきました。
(正しい実装なのかは怪しいですが、、、)
スクリーンショット 0003-10-19 17.16.28.png

実装の解説は以上になります。

補足

実サービスにおいては発話しているのは1名だけという制御が必要になるかもしれません。
その際は、他者が発話中はTalkボタンを無効にするという実装が追加になります。
(複数に同時で発話できてよいかとも思いますが、要件次第かと思います)

最後に

agora.ioに関するお問い合わせはこちらから

スクリーンショット 0001-08-15 13.41.56.png

2
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
2
3