首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法解析符号'RTCPeerConnection()‘

无法解析符号'RTCPeerConnection()‘
EN

Stack Overflow用户
提问于 2019-09-17 08:56:09
回答 1查看 1.4K关注 0票数 0

我试着解决这个问题,Why the function "onaddstream" is never called?

但看起来是这样的:

'rtcpeerconnection()‘不存在于webrtc的最后版本:“org.webrtc:google:1.0.28513”

我的onAddStream有一个旧版本的回调。但现在不是了

请帮帮我

在回答“philip”后进行编辑

我不能推翻peerObserver,安卓工作室说:

类型为“

”的peerObserver表达式不能作为函数调用。找不到函数'invoke()‘。

代码语言:javascript
复制
 override fun runnerConnect(peerObserver: PeerConnection.Observer) {
        Log.d("WebRTCClientCaster", "runnerConnect sdp ")
        //   mCurrentPeerConnection = mPeerConnectionFactory!!.createPeerConnection(IceServer.instance.listServers(), peerObserver)
        val rtcConfig: PeerConnection.RTCConfiguration = PeerConnection.RTCConfiguration(IceServer.instance.listServers())
        rtcConfig.sdpSemantics = PeerConnection.SdpSemantics.UNIFIED_PLAN
        mCurrentPeerConnection = mPeerConnectionFactory!!.createPeerConnection(rtcConfig, peerObserver)
    }

    override fun runnerConnect(sdpObserver: SdpObserver) {
        Log.d("WebRTCClientCaster", "runnerConnect peer")
       // mCurrentPeerConnection!!.addStream(mLocalMS)

        val mVideoTrack =
            mPeerConnectionFactory?.createVideoTrack(WebRTCConstant.VIDEO_ID, mVideoSource)
        mCurrentPeerConnection?.addTransceiver(mVideoTrack)
        val mAudioTrack =
            mPeerConnectionFactory?.createAudioTrack(WebRTCConstant.AUDIO_ID, mAudioSource)
        mCurrentPeerConnection?.addTransceiver(mAudioTrack)
        mCurrentPeerConnection!!.createOffer(sdpObserver, sdpConstraints)
    }

我创建工厂和资源的部分:

代码语言:javascript
复制
private fun setConfigurationOfCamera() {

        Log.d("webRTCClientCaster", "setConfigurationOfCamera")
        val options = PeerConnectionFactory.Options()
        val defaultVideoEncoderFactory = DefaultVideoEncoderFactory(
            this.mEglBase,
            true,
            true
        )
        val defaultVideoDecoderFactory = DefaultVideoDecoderFactory(this.mEglBase)
        mPeerConnectionFactory = PeerConnectionFactory.builder()
            .setOptions(options)
            .setVideoEncoderFactory(defaultVideoEncoderFactory)
            .setVideoDecoderFactory(defaultVideoDecoderFactory)
            .createPeerConnectionFactory()

        mLocalMS = mPeerConnectionFactory!!.createLocalMediaStream(WebRTCConstant.STREAM_LABEL)

        if (mPeerConnectionParameters.isVideoCallEnabled) {

            val surfaceTextureHelper = SurfaceTextureHelper.create("CaptureThread", this.mEglBase)
            videoCapturerAndroid = Capturer.getInstance().video
            mVideoSource = mPeerConnectionFactory?.createVideoSource(videoCapturerAndroid!!.isScreencast)

            videoCapturerAndroid?.initialize(surfaceTextureHelper, MyApp.getContext(), mVideoSource?.capturerObserver)
            Capturer.getInstance().startCapture(
                mPeerConnectionParameters.videoWidth,
                mPeerConnectionParameters.videoHeight,
                mPeerConnectionParameters.videoFps
            )
            // Add track to video capture with device
            mLocalMS.addTrack(createVideoTrack(WebRTCConstant.VIDEO_ID, mVideoSource!!))
        }

        mAudioSource = mPeerConnectionFactory!!.createAudioSource(audioConstraints)
        mLocalMS.addTrack(createAudioTrack(mAudioSource!!))

        listener.onConfigurationReady()
    }

注释它是我所替换的,用这段代码我有一个sigabrt,它说:

代码语言:javascript
复制
# Fatal error in: ../../../../usr/local/google/home/sakal/code/webrtc-aar-release/src/pc/peer_connection.cc, line 1240
    # last system error: 0
    # Check failed: !IsUnifiedPlan()
    # AddStream is not available with Unified Plan SdpSemantics. Please use AddTrack instead.
2019-09-23 12:53:07.223 4804-6057/com.Dazzl.debug A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 6057 (signaling_threa)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-20 12:18:37

试着做这个。注意,onTrack是在PeerConnectionObserver (pcObserver)中实现的,而不是peerConnection本身实现的:

代码语言:javascript
复制
    PeerConnection.RTCConfiguration rtcConfig =
            new PeerConnection.RTCConfiguration(mIceServers);
rtcConfig.sdpSemantics = PeerConnection.SdpSemantics.UNIFIED_PLAN;
//Unified Plan is the new standard for SDP semantics and is needed to use transceivers

peerConnection = factory.createPeerConnection(rtcConfig, new PcObserver("localPeerCreation")
        {
            @Override
            public void onTrack(RtpTransceiver transceiver) {
                showToast(getString(R.string.onReceivedTrackToastMessage));
                super.onTrack(transceiver);
                gotRemoteTrack(transceiver);
            }
        });

//Somewhere else in your code, where you create the local video track...
localVideoTrack = factory.createVideoTrack(VIDEO_TRACK_ID, videoSource);

peerConnection.addTransceiver(localVideoTrack);
peerConnection.addTransceiver(localAudioTrack);

//在一个单独的类中创建一个从PeerConnectionObserver继承的PeerConnection.Observer.

代码语言:javascript
复制
  public class PcObserver implements PeerConnection.Observer {
    private String logTag;

    CustomPeerConnectionObserver(String logTag) {
        this.logTag = logTag
    }

    @Override
    public void onSignalingChange(PeerConnection.SignalingState signalingState) {
        Log.d(logTag, "onSignalingChange() called with: signalingState = [" + signalingState + "]");
    }
 //....
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57970734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档