美文网首页
IE 10+ webrtc 插件及eaas问题调试

IE 10+ webrtc 插件及eaas问题调试

作者: MengchunCao | 来源:发表于2018-07-31 23:03 被阅读0次

    eaas为了支持IE浏览器, 选用了Temasys WebRTC Plugin 这个插件来支持webrtc。 最近发现IE下eaas打不开了,所有log记录都正常。

    加了各种log, 调试了好久,最后发现IE下插件为了支持webrtc, Temasys在attachMediaStream 方法中将video tag 转成object对象,而我们eaas中需要监听video第一帧的数据后才会把视频部分显示出来,同时清除超时timer。video tag已经没有了,loadeddata 事件自然就不会触发。所以看到的现象是所有log都正常,但是一直超时。

    // from https://github.com/Temasys/AdapterJS
    attachMediaStream = function (element, stream) {
          
          if (!element || !element.parentNode) {
            return;
          }
    
          var streamId;
          if (stream === null) {
            streamId = '';
          } else {
            if (typeof stream.enableSoundTracks !== 'undefined') {
              stream.enableSoundTracks(true);
            }
            streamId = stream.id;
          }
    
          var elementId = element.id.length === 0 ? Math.random().toString(36).slice(2) : element.id;
          var nodeName = element.nodeName.toLowerCase();
          if (nodeName !== 'object') { // not a plugin <object> tag yet
            var tag;
            switch (nodeName) {
              case 'audio':
                tag = AdapterJS.WebRTCPlugin.TAGS.AUDIO;
                break;
              case 'video':
                tag = AdapterJS.WebRTCPlugin.TAGS.VIDEO;
                break;
              default:
                tag = AdapterJS.WebRTCPlugin.TAGS.NONE;
            }
    
            var frag = document.createDocumentFragment();
            var temp = document.createElement('div');
            var classHTML = '';
            if (element.className) {
              classHTML = 'class="' + element.className + '" ';
            } else if (element.attributes && element.attributes['class']) {
              classHTML = 'class="' + element.attributes['class'].value + '" ';
            }
    
            temp.innerHTML = '<object id="' + elementId + '" ' + classHTML +
              'type="' + AdapterJS.WebRTCPlugin.pluginInfo.type + '">' +
              '<param name="pluginId" value="' + elementId + '" /> ' +
              '<param name="pageId" value="' + AdapterJS.WebRTCPlugin.pageId + '" /> ' +
              '<param name="windowless" value="true" /> ' +
              '<param name="streamId" value="' + streamId + '" /> ' +
              '<param name="tag" value="' + tag + '" /> ' +
              '</object>';
            while (temp.firstChild) {
              frag.appendChild(temp.firstChild);
            }
    
            var height = '';
            var width = '';
            if (element.clientWidth || element.clientHeight) {
              width = element.clientWidth;
              height = element.clientHeight;
            }
            else if (element.width || element.height) {
              width = element.width;
              height = element.height;
            }
    
            element.parentNode.insertBefore(frag, element);
            frag = document.getElementById(elementId);
            frag.width = width;
            frag.height = height;
            element.parentNode.removeChild(element);
          } else { // already an <object> tag, just change the stream id
            var children = element.children;
            for (var i = 0; i !== children.length; ++i) {
              if (children[i].name === 'streamId') {
                children[i].value = streamId;
                break;
              }
            }
            element.setStreamId(streamId);
          }
          var newElement = document.getElementById(elementId);
          AdapterJS.forwardEventHandlers(newElement, element, Object.getPrototypeOf(element));
    
          return newElement;
          
        };
    

    相关文章

      网友评论

          本文标题:IE 10+ webrtc 插件及eaas问题调试

          本文链接:https://www.haomeiwen.com/subject/swskvftx.html