Twilio Rooms API работает не так, как ожидалось

#javascript #ember.js #twilio #ruby-on-rails-5

#javascript #ember.js #twilio #ruby-on-rails-5

Вопрос:

Я создаю приложение для видеоконференций, ранее использовавшее Twilio conversation API. Согласно последним обновлениям от Twilio, я попробовал использовать Rooms API с помощью приложения быстрого запуска twilio. Я столкнулся с проблемой при извлечении и прикреплении мультимедийных дорожек удаленных участников. Сюда я приложил пример кода, библиотеку Twilio, которую я использую, и код ruby для генерации токенов.

Примечание: Я использую Ember JS для интерфейса и ROR для серверной части.

Код JavaScript:

 var twilioVideo = Twilio.Video;
Ember.debug('Initiaizing Video Client for '   data.identity);
var twilioClient = new twilioVideo.Client(data.video_token);
Ember.debug('Initiaizing LocalMedia for '   data.identity);
var localMedia = new twilioVideo.LocalMedia();
twilioVideo.getUserMedia().then(function(mediaStream){
  localMedia.addStream(mediaStream);
  localMedia.attach('#video-local');
  twilioClient.connect({to: 'randomRoomname'}). then(function(activeRoom){
    Ember.debug('Connected to the Room: '   activeRoom.name);
    activeRoom.participants.forEach(function(participant) {
      participant.media.attach('div#remote-media');
      Ember.debug("Already in activeRoom: '"   participant.identity   "'");
    });
    activeRoom.once('participantConnected', function(participant){
      participant.media.attach('div#remote-media');
      Ember.debug('Participant ' participant.identity ' is connected');
    });
    activeRoom.once('participantDisconnected', function(participant){
      Ember.debug('Participant ' participant.identity ' is disconnected');
    });
  }, function(error) {
    Ember.debug('Failed to connect to room as '   error);
  });
});
  

Видеотека Twilio взята из этого CDN.

Код Ruby:

 video_token = Twilio::Util::AccessToken.new(ENV['TWILIO_ACCOUNT_SID'], ENV['TWILIO_API_KEY'], ENV['TWILIO_API_SECRET'], 3600, identity)}

grant = Twilio::Util::AccessToken::VideoGrant.new
grant.configuration_profile_sid = ENV['TWILIO_CONFIGURATION_SID']
video_token.add_grant grant

json :identity => identity, :video_token => video_token.to_jwt
  

Twilio- используемый драгоценный камень ruby: версия 4.13.0.

PS: Я использую action cable для обмена сообщениями между участниками для некоторых других функций в соответствии с моими требованиями.

Я пропускаю какие-либо другие конфигурации или мне нужно включить что-либо со стороны twilio? Я использую этот учебник.

Ответ №1:

Без журналов я не могу быть уверен, что происходит не так; однако я вижу некоторые улучшения, которые вы могли бы внести.

  1. Вы создаете LocalMedia и добавляете к нему MediaStream, но вы никогда не используете его. Вместо этого, я думаю, вам следует передать его в свой connect вызов, например

     twilioClient.connect({to: 'randomRoomname', localMedia: localMedia}).then(function(activeRoom) {
      
  2. Вероятно, вам следует передать audio: true and video: true в getUserMedia вызов, например

     twilioVideo.getUserMedia({ audio: true, video: true }).then(function(mediaStream){
      
  3. В последней строке, я думаю, вам следует обработать случай ошибки, если getUserMedia произойдет сбой, например

     twilioVideo.getUserMedia({ audio: true, video: true }).then(function(mediaStream){
      // ...
    }, function(error) {
      console.error('getUserMedia failed:'   error);
    });
      
  4. Вы также можете включить ведение журнала отладки, например

     var twilioClient = new twilioVideo.Client(data.video_token, { logLevel: 'debug' });
      

Можете ли вы повторить попытку после внесения этих изменений?

Комментарии:

1. Спасибо за ваш ответ. Я попытался улучшить свой код с учетом ваших предложений. Но мне все равно не помогло. Здесь я прилагаю свои журналы конфигурации twilio. Также, просматривая журналы, я обнаружил, что треки отправляются через сообщения wss. Это мешает мне улучшить этот модуль приложения. 🙁