Sip.js: DOMException:「RTCPeerConnection」で「setRemoteDescription」の実行に失敗しました:SessionDescriptionの解析に失敗しました。 [オブジェクトオブジェクト]期待行:v =

作成日 2018年10月12日  ·  8コメント  ·  ソース: onsip/SIP.js

バグを説明する
ライブラリが正しく機能していません。

DOMException:「RTCPeerConnection」で「setRemoteDescription」の実行に失敗しました:SessionDescriptionの解析に失敗しました。 [オブジェクトオブジェクト]期待行:v =
http://localhost/sip-0.11.4%20 (1).js:9733:38

同じコードセクションで問題が発生しました:

`/ **
*リモートディスクリプションを基盤となるメディア実装に設定します
* @param {String} sessionDescriptionメディア実装に設定されるSIPメッセージによって提供される説明
* @param {Object} [options] getDescriptionで使用されるオプションオブジェクト
* @param {MediaStreamConstraints} [options.constraints] MediaStreamConstraints https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamConstraints
* @param {Object} [options.peerConnectionOptions]これが設定されている場合、新しいオプションでピア接続が再作成されます
* @param {Array} [modifiers]一度だけ使用する説明修飾子を持つ配列
* @returns {Promise}説明が設定されると解決するPromise
* /
setDescription:{書き込み可能:true、値:関数setDescription(sessionDescription、options、modifiers){
var _this = this;

    var self = this;

    options = options || {};
    if (options.peerConnectionOptions) {
      this.initPeerConnection(options.peerConnectionOptions);
    }

    modifiers = modifiers || [];
    if (!Array.isArray(modifiers)) {
      modifiers = [modifiers];
    }
    modifiers = modifiers.concat(this.modifiers);

    var description = {
      type: this.hasOffer('local') ? 'answer' : 'offer',
      sdp: sessionDescription
    };

    return SIP.Utils.Promise.resolve().then(function () {
      // Media should be acquired in getDescription unless we need to do it sooner for some reason (FF61+)
      if (this.shouldAcquireMedia && this.options.alwaysAcquireMediaFirst) {
        return this.acquire(this.constraints).then(function () {
          this.shouldAcquireMedia = false;
        }.bind(this));
      }
    }.bind(this)).then(function () {
      return SIP.Utils.reducePromises(modifiers, description);
    }).catch(function (e) {
      if (e instanceof SIP.Exceptions.SessionDescriptionHandlerError) {
        throw e;
      }
      var error = new SIP.Exceptions.SessionDescriptionHandlerError("setDescription", e, "The modifiers did not resolve successfully");
      _this.logger.error(error.message);
      self.emit('peerConnection-setRemoteDescriptionFailed', error);
      throw error;
    }).then(function (modifiedDescription) {
      self.emit('setDescription', modifiedDescription);
      return self.peerConnection.setRemoteDescription(modifiedDescription);
    }).catch(function (e) {
      if (e instanceof SIP.Exceptions.SessionDescriptionHandlerError) {
        throw e;
      }
      // Check the original SDP for video, and ensure that we have want to do audio fallback
      if (/^m=video.+$/gm.test(sessionDescription) && !options.disableAudioFallback) {
        // Do not try to audio fallback again
        options.disableAudioFallback = true;
        // Remove video first, then do the other modifiers
        return _this.setDescription(sessionDescription, options, [SIP.Web.Modifiers.stripVideo].concat(modifiers));
      }
      var error = new SIP.Exceptions.SessionDescriptionHandlerError("setDescription", e);
      _this.logger.error(error.error);
      _this.emit('peerConnection-setRemoteDescriptionFailed', error);
      throw error;
    }).then(function setRemoteDescriptionSuccess() {
      if (self.peerConnection.getReceivers) {
        self.emit('setRemoteDescription', self.peerConnection.getReceivers());
      } else {
        self.emit('setRemoteDescription', self.peerConnection.getRemoteStreams());
      }
      self.emit('confirmed', self);
    });
  } },`

全てのコメント8件

jsコードを調べると、「modifiedDescription.sdp」がsdpの再帰オブジェクトであることがわかりました。

完全なログを要点に投稿してください。 SDPを自分で変更しようとしていますか、それとも以前のバージョンから現在のバージョンに更新しようとしているだけですか?

アスタリスクまたはブラウザコンソールからのログ? そしてtraceSipをする必要があります:本当、ブラウザコンソールで?
0.11.4バージョンからsip.jsを使い始めました。 私はsdpを変更していません。

ブラウザコンソール

[要点](https://gist.github.com/kakabara/d39058805af90637a62931893900fb55)しかし、Firefoxで「SDPの解析に失敗しました:1行目のSDP解析エラー:バッファの終わりを超えた行の終わり」というエラーが発生しました。 326行でご覧ください。
Google Chromeで、構文解析に失敗した場合に例外を取得しますsetRemoteDescription

アスタリスクはICE候補を送信していません。 要旨の問題は、あなたが上で述べたのと同じ問題ではありません。

申し訳ありませんが、私の間違った問題のために、それは最初です。 発信者が氷の候補を送信する内容は正しいと理解していますが、アスタリスクは他のクライアントに送信しませんか?

ごめん。 理解できない。 WebRTCにはICEとDTLSが必要です。 これはアスタリスクの問題のように見えるので、これを閉じます。 そこでの問題については、Asteriskプロジェクトをフォローアップしてください。

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

raphaelhovsepyan picture raphaelhovsepyan  ·  6コメント

seanbright picture seanbright  ·  3コメント

tm1000 picture tm1000  ·  12コメント

Fzwael picture Fzwael  ·  5コメント

josephfrazier picture josephfrazier  ·  26コメント