Sip.js: 'SessionDescriptionHandler' μœ ν˜•μ— 'peerConnection' 속성이 μ—†μŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2020λ…„ 05μ›” 28일  Β·  5μ½”λ©˜νŠΈ  Β·  좜처: onsip/SIP.js

μ•ˆλ…•ν•˜μ„Έμš”,
sipjs 0.15.11μ—μ„œ sjipjs 0.16.1둜 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜λ €κ³  ν•  λ•Œ λ‹€μŒκ³Ό 같은 λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. λ‚΄κ°€ μ—¬κΈ°μ—μ„œ λ­”κ°€λ₯Ό λ†“μΉ˜κ³  μžˆμŠ΅λ‹ˆκΉŒ?

버그 μ„€λͺ…
'SessionDescriptionHandler' μœ ν˜•μ— 'peerConnection' 속성이 μ—†μŠ΅λ‹ˆλ‹€.

둜그

error TS2339: Property 'peerConnection' does not exist on type 'SessionDescriptionHandler'.

μž¬ν˜„ν•˜κΈ° μœ„ν•΄
λ™μž‘μ„ μž¬ν˜„ν•˜λŠ” 단계:

  1. μ‚¬μš©μž μ—μ΄μ „νŠΈ 생성 및 μˆ˜μ‹  μ „ν™” 처리
  2. μ—¬κΈ° 에 μ–ΈκΈ‰λœ λŒ€λ‘œ λ―Έλ””μ–΄λ₯Ό 첨뢀해 λ³΄μ‹­μ‹œμ˜€.
    이 μ½”λ“œλ₯Ό μ‚¬μš©ν•˜μ—¬
// Assumes you have a media element on the DOM
const mediaElement = document.getElementById('mediaElement');

const remoteStream = new MediaStream();
function setupRemoteMedia(session: Session) {
  session.sessionDescriptionHandler.peerConnection.getReceivers().forEach((receiver) => {
    if (receiver.track) {
      remoteStream.addTrack(receiver.track);
    }
  });
  mediaElement.srcObject = remoteStream;
  mediaElement.play();
}

μ˜ˆμƒλ˜λŠ” 행동
속성 'peerConnection'은 'SessionDescriptionHandler' μœ ν˜•μ— μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

κ΄€μ°°λœ 행동
μ»΄νŒŒμΌν•˜λ©΄ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.
'SessionDescriptionHandler' μœ ν˜•μ— 'peerConnection' 속성이 μ—†μŠ΅λ‹ˆλ‹€.

ν™˜κ²½μ •λ³΄

  • SipJS 0.16.1
Typescript

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ‚˜λŠ” 같은 문제λ₯Ό λ§Œλ‚¬κ³  그것을 ν•΄κ²°ν•˜κΈ° μœ„ν•΄ '_sip.js/lib/platform/web_'μ—μ„œ SessionDescriptionHandler λ₯Ό κ°€μ Έμ™€μ„œ μ§€κΈˆκΉŒμ§€ 잘 μž‘λ™ν•©λ‹ˆλ‹€.

λͺ¨λ“  5 λŒ“κΈ€

더 μ •ν™•ν•˜κ²ŒλŠ” peerConnection이 platform/web/session-description-handler/session-description-handler.ts νŒŒμΌμ— μ‘΄μž¬ν•©λ‹ˆλ‹€.

  public peerConnection!: RTCPeerConnection;

κ·ΈλŸ¬λ‚˜ api/session-description-handler.tsμ—λŠ” μ—†μŠ΅λ‹ˆλ‹€.

이것이 μ •μ˜ 파일의 일뢀가 μ•„λ‹Œ μ΄μœ μž…λ‹ˆκΉŒ?

λ‚˜λŠ” 같은 문제λ₯Ό λ§Œλ‚¬κ³  그것을 ν•΄κ²°ν•˜κΈ° μœ„ν•΄ '_sip.js/lib/platform/web_'μ—μ„œ SessionDescriptionHandler λ₯Ό κ°€μ Έμ™€μ„œ μ§€κΈˆκΉŒμ§€ 잘 μž‘λ™ν•©λ‹ˆλ‹€.

_'sip.js/lib/platform/web'_ 의 λͺ¨λ“  ν•­λͺ©μ€ Web λ„€μž„μŠ€νŽ˜μ΄μŠ€λ‘œ λ‚΄λ³΄λ‚΄μ§€λ―€λ‘œ import { Web } from "sip.js" λ‹€μŒ Web.SessionDescriptionHandler 둜 μ°Έμ‘°ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

peerConnection μœ ν˜•μ€ SessionDescriptionHandler μΈν„°νŽ˜μ΄μŠ€μ— μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ•„μ΄λ””μ–΄λŠ” SIP.jsκ°€ μ•„λ‹ˆλ―€λ‘œ ν”Όμ–΄ 연결이 μ—†λŠ” ν™˜κ²½μ— λŒ€ν•΄ SDHλ₯Ό μž‘μ„±ν•  수 μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. μ›Ή κ΅¬ν˜„μ„ μ‚¬μš©ν•˜κ³  μžˆλŠ” 경우 Web.SessionDescriptionHandler μ—μ„œ μœ ν˜•μ„ κ°€μ Έμ˜€κ³  μ‚¬μš©ν•©λ‹ˆλ‹€. 이것은 μ˜λ„μ μž…λ‹ˆλ‹€.

λˆ„κ΅°κ°€κ°€ λ˜ν•œμ΄ λ¬Έμ œκ°€ μžˆμ–΄μ•Όν•œλ‹€λ©΄. 그것이 λ‚˜λ₯Ό μœ„ν•΄ μΌν•œ λ°©λ²•μž…λ‹ˆλ‹€.

import '{ SessionDescriptionHandler } from 'sip.js/lib/platform/web'

case SessionState.Established:
        let sessionDescriptionHandler: SessionDescriptionHandler = inviter.sessionDescriptionHandler as SessionDescriptionHandler;
        setupRemoteMedia(sessionDescriptionHandler);
        break;

function setupRemoteMedia(session: SessionDescriptionHandler) {
  let receiversList: any = session.peerConnection.getReceivers();
  receiversList.forEach((receiver: RTCRtpReceiver) => {
    if (receiver.track) {
      remoteStream.addTrack(receiver.track);
    }
  });
  mediaElement.srcObject = remoteStream;
  mediaElement.play();
}

κ°œμ„  사항 및 μ˜κ²¬μ€ 기쁘게 λ°›μ•„λ“€μž…λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰