Android 无法解析符号';rtpeerconnection()';
我试图解决这个问题 但看起来是这样的: “rtcpeerconnection()”在webrtc的最新版本中不存在: “org.webrtc:google webrtc:1.0.28513” 我的onAddStream在旧版本中有一个回调。但现在不是了 请帮帮我 在@philip的回答后编辑 我无法覆盖peerObserver,android studio说:Android 无法解析符号';rtpeerconnection()';,android,webrtc,Android,Webrtc,我试图解决这个问题 但看起来是这样的: “rtcpeerconnection()”在webrtc的最新版本中不存在: “org.webrtc:google webrtc:1.0.28513” 我的onAddStream在旧版本中有一个回调。但现在不是了 请帮帮我 在@philip的回答后编辑 我无法覆盖peerObserver,android studio说: “peerConnection.Observer”类型的表达式PeerRobServer不能为空 作为函数调用。找不到函数“invoke
“peerConnection.Observer”类型的表达式PeerRobServer不能为空 作为函数调用。找不到函数“invoke()” 我创建factory和source的部分:
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,他说:
# 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)
试着这样做。请注意,onTrack是在PeerConnectionObserver(pcObserver)中实现的,而不是在peerConnection本身中实现的:
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);
//在一个单独的类中创建一个从PeerConnection.Observer继承的PeerConnectionObserver
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 + "]");
}
//....
}
谢谢你回复我,也许我不清楚,但我的问题是webrtc android中不存在RTPeerConnection。android中有一个类PeerConnection,但她没有实现ontrack。哦,我明白了,看起来ontrack是在PeerConnectionObserver中实现的,而不是PeerConnection本身。我将更新我的答案以反映这一点。哦,我忘了提到要使用onTrack,您必须在RTC配置中使用统一计划sdp语义。将相应地编辑答案。感谢您抽出时间。我用你说的来编辑我的帖子,我在这里解释我的新问题。不客气。PeerRobServer类是否实现了PeerConnection.Observer?此外,AddStream不能用于UnifiedPlan Sdp语义。这是老办法。新的方法是做peerConnection.add收发器(videoTrack),或者我想你可以做peerConnection.addTrack(videoTrack)
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 + "]");
}
//....
}