javascript - 使用 Twilio 进行视频通话

标签 javascript php video twilio twilio-php

我使用 Twilio Javascript sdk 和 php 实现了 twilio 视频通话功能。如果我使用旧的 sdk 和 github 上快速入门教程中的代码,一切都会正常工作。(尽管它不支持 IOS)。当我使用最新的 sdk 时,出现错误并且功能不再起作用。

index.html 文件中使用的旧 Twilio Javascript sdk <script src="//media.twiliocdn.com/sdk/js/video/releases/1.0.0-beta2/twilio-video.js"></script>

使用新的 Twilio Javascript sdk: <script src="//media.twiliocdn.com/sdk/js/video/v1/twilio-video.min.js"></script>

这是我使用最新控制台时在控制台中看到的错误。 enter image description here

我的index.js文件。

var videoClient;
var activeRoom;
var previewMedia;
var identity;
var roomName;

// Check for WebRTC
if (!navigator.webkitGetUserMedia && !navigator.mozGetUserMedia) {
  alert('WebRTC is not available in your browser.');
}

// When we are about to transition away from this page, disconnect
// from the room, if joined.
window.addEventListener('beforeunload', leaveRoomIfJoined);
$(document).ready(function() {
  console.log('testing');

$.getJSON('./token.php', function (data) {
  identity = data.identity;

  console.log(data);
  // Create a Video Client and connect to Twilio
  videoClient = new Twilio.Video.Client(data.token);
  document.getElementById('room-controls').style.display = 'block';

  // Bind button to join room
  document.getElementById('button-join').onclick = function () {
    roomName = document.getElementById('room-name').value;
    if (roomName) {
      log("Joining room '" + roomName + "'...");

      videoClient.connect({ to: roomName}).then(roomJoined,
        function(error) {
          log('Could not connect to Twilio: ' + error.message);
        });
    } else {
      alert('Please enter a room name.');
    }
  };

  // Bind button to leave room
  document.getElementById('button-leave').onclick = function () {
    log('Leaving room...');
    activeRoom.disconnect();
  };
});

});

// Successfully connected!
function roomJoined(room) {
  activeRoom = room;

  log("Joined as '" + identity + "'");
  document.getElementById('button-join').style.display = 'none';
  document.getElementById('button-leave').style.display = 'inline';

  // Draw local video, if not already previewing
  if (!previewMedia) {
    room.localParticipant.media.attach('#local-media');
  }

  room.participants.forEach(function(participant) {
    log("Already in Room: '" + participant.identity + "'");
    participant.media.attach('#remote-media');
  });

  // When a participant joins, draw their video on screen
  room.on('participantConnected', function (participant) {
    log("Joining: '" + participant.identity + "'");
    participant.media.attach('#remote-media');
  });

  // When a participant disconnects, note in log
  room.on('participantDisconnected', function (participant) {
    log("Participant '" + participant.identity + "' left the room");
    participant.media.detach();
  });

  // When we are disconnected, stop capturing local video
  // Also remove media for all remote participants
  room.on('disconnected', function () {
    log('Left');
    room.localParticipant.media.detach();
    room.participants.forEach(function(participant) {
      participant.media.detach();
    });
    activeRoom = null;
    document.getElementById('button-join').style.display = 'inline';
    document.getElementById('button-leave').style.display = 'none';
  });
}

//  Local video preview
document.getElementById('button-preview').onclick = function () {
  if (!previewMedia) {
    previewMedia = new Twilio.Video.LocalMedia();
    Twilio.Video.getUserMedia().then(
    function (mediaStream) {
      previewMedia.addStream(mediaStream);
      previewMedia.attach('#local-media');
    },
    function (error) {
      console.error('Unable to access local media', error);
      log('Unable to access Camera and Microphone');
    });
  };
};

// Activity log
function log(message) {
  var logDiv = document.getElementById('log');
  logDiv.innerHTML += '<p>&gt;&nbsp;' + message + '</p>';
  logDiv.scrollTop = logDiv.scrollHeight;
}

function leaveRoomIfJoined() {
  if (activeRoom) {
    activeRoom.disconnect();
  }
}

github中的代码(使用快速入门示例作为引用)最近发生了变化,他们改用express.js,因此我不确定哪里出了问题。有人可以帮我解决这个问题吗?

最佳答案

这里是 Twilio 开发者布道者。

在测试版和发布版本之间,我们更改了初始化库的方式。您不再使用构造函数,这就是您看到该错误的原因。

相反,您应该使用 Twilio.Video.connect(token, { name: 'room-name' }) ,它返回一个 promise ,一旦您加入房间,该 promise 就会解决。

查看 latest Twilio Video JS documentation获取完整的代码示例并了解如何使用版本 1 SDK。

请告诉我这是否有帮助。

关于javascript - 使用 Twilio 进行视频通话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45834759/

相关文章:

javascript - React 不会在 props 更新时重新渲染

javascript - 父页面元素的 JQuery 单击事件

php mysql 语法错误但我没有看到它?

php - 如何用 'x' 替换 mysql 列中的某些字符?

winforms - VideoLan.Net : Play media backwards/Change playback speed?

android - 使视频文件 Android 准备好通过 HTTP 播放

ios - AVPlayer 音频在比特率峰值后停止

javascript - 缩放 div 以适合窗口但保持纵横比

javascript - Angular 绑定(bind)不起作用

php - 创建一个简单的基于 PHP 和 MYSQL 的登录系统