async def createAnswer(self):
        """
        Create an SDP answer to an offer received from a remote peer during
        the offer/answer negotiation of a WebRTC connection.

        :rtype: :class:`RTCSessionDescription`
        """
        # check state is valid
        self.__assertNotClosed()
        if self.signalingState not in ['have-remote-offer', 'have-local-pranswer']:
            raise InvalidStateError('Cannot create answer in signaling state "%s"' %
                                    self.signalingState)

        # create description
        ntp_seconds = clock.current_ntp_time() >> 32
        description = sdp.SessionDescription()
        description.origin = '- %d %d IN IP4 0.0.0.0' % (ntp_seconds, ntp_seconds)
        description.msid_semantic.append(sdp.GroupDescription(
            semantic='WMS',
            items=['*']))
        description.type = 'answer'

        for remote_m in self.__remoteDescription().media:
            if remote_m.kind in ['audio', 'video']:
                transceiver = self.__getTransceiverByMid(remote_m.rtp.muxId)
                description.media.append(create_media_description_for_transceiver(
                    transceiver,
                    cname=self.__cname,
                    direction=and_direction(transceiver.direction, transceiver._offerDirection),
                    mid=transceiver.mid))
            else:
                description.media.append(create_media_description_for_sctp(
                    self.__sctp, legacy=self._sctpLegacySdp, mid=self.__sctp.mid))

        bundle = sdp.GroupDescription(semantic='BUNDLE', items=[])
        for media in description.media:
            bundle.items.append(media.rtp.muxId)
        description.group.append(bundle)

        return wrap_session_description(description)
async def createAnswer ( self ) : self . __assertNotClosed ( ) if self . signalingState not in [ 'have-remote-offer' , 'have-local-pranswer' ] : raise InvalidStateError ( 'Cannot create answer in signaling state "%s"' % self . signalingState ) ntp_seconds = clock . current_ntp_time ( ) >> 32 description = sdp . SessionDescription ( ) description . origin = '- %d %d IN IP4 0.0.0.0' % ( ntp_seconds , ntp_seconds ) description . msid_semantic . append ( sdp . GroupDescription ( semantic = 'WMS' , items = [ '*' ] ) ) description . type = 'answer' for remote_m in self . __remoteDescription ( ) . media : if remote_m . kind in [ 'audio' , 'video' ] : transceiver = self . __getTransceiverByMid ( remote_m . rtp . muxId ) description . media . append ( create_media_description_for_transceiver ( transceiver , cname = self . __cname , direction = and_direction ( transceiver . direction , transceiver . _offerDirection ) , mid = transceiver . mid ) ) else : description . media . append ( create_media_description_for_sctp ( self . __sctp , legacy = self . _sctpLegacySdp , mid = self . __sctp . mid ) ) bundle = sdp . GroupDescription ( semantic = 'BUNDLE' , items = [ ] ) for media in description . media : bundle . items . append ( media . rtp . muxId ) description . group . append ( bundle ) return wrap_session_description ( description )
Create an SDP answer to an offer received from a remote peer during
        the offer/answer negotiation of a WebRTC connection.

        :rtype: :class:`RTCSessionDescription`