質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.32%

  • WebRTC

    80questions

    WebRTC(Web Real-Time Communication)とは、プラグイン無しでウェブブラウザ間の音声通話・ビデオチャットなどリアルタイムコミュニケーションができるオープンフレームワークです。W3CがAPIレベルで、IETFがプロトコルレベルでそれぞれ標準化が進められています。

SkyWayを利用したビデオ通話で、カメラが解放できない

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 316

olee46

score 24

SkyWayとFirebaseを利用したビデオ通話システム(SFU)を開発中です。

やりたいこと

ページ遷移をしたときに、webカメラを解放したい

起きていること/エラー

ページ遷移をしても、webカメラが使用中のまま
(skype等でビデオ通話ができない)

コード

/* 省略 */
let localStream = null;

peer.on('open', function(id) {
    // set peerId
    peerId = id;

    // DB: handle disconnections
    disconnectionHandler(peerId, user);

    navigator.mediaDevices
    .getUserMedia({
        audio: false,
        video: {width: 1, height: 1}
    }).then(function(stream) {
        localStream = stream;
        // SW: join room
        room = peer.joinRoom(roomId, {mode: 'sfu', stream: localStream});
        // start roomHandler
        roomHandler(room, user);
    }).then(() => {
        // automatically add users from BR
        return breakUsersHandler(user, peerId, room);
    }).catch((error) => {
        if (error.name) {
            initMediaErrorHandler(error.name, peerId, user);
        }
        console.log(error);
    });
})

/* 省略 */

$(window).on('beforeunload', function() {
    // free camera
    console.log(localStream);
    var tracks = localStream.getTracks();
    tracks.forEach(function(track) {
        track.stop();
    });
    console.log(localStream);
}

確認したこと

  • beforeunloadの処理内で、最後にlocalStream.activeはfalseになっている
  • ページ遷移後、webカメラの明かりは消えている

よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

tracks.forEach(function(track) {
    track.stop();
});
localStream=null;

このように、localStream=null;を追加するとどうでしょうか?

[追記]
localStream=null;の後で、

document.getElementById('video').pause();
document.getElementById('video').srcObject=null;


このように、video要素とstreamの紐付けを解除してあげるとどうでしょうか?
getElementById のID名は実際のものと置き換えてください。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/20 12:30

    いただいた回答でも解放されていないようで、相変わらずSkypeを開いても「カメラがWebアプリケーションで使用中です」と表示されます。
    コンソールではたしかにlocalStreamはnullになっているのですが…

    キャンセル

  • 2018/07/20 14:30

    お使いのブラウザはChromeでしょうか?
    回答を修正しましたので、ご確認ください。

    キャンセル

  • 2018/07/20 19:08

    Chromeです。
    解決しました、ありがとうございます!

    キャンセル

  • 2018/07/20 19:12

    解決してよかったです!

    キャンセル

同じタグがついた質問を見る

  • WebRTC

    80questions

    WebRTC(Web Real-Time Communication)とは、プラグイン無しでウェブブラウザ間の音声通話・ビデオチャットなどリアルタイムコミュニケーションができるオープンフレームワークです。W3CがAPIレベルで、IETFがプロトコルレベルでそれぞれ標準化が進められています。