如何解决抖动:未处理的异常:无法进行RTCPeerConnection :: createAnswer:错误空
伙计们,我不太明白这个例外,之前有人遇到过吗?
我使用的图书馆:
dependencies:
flutter:
sdk: flutter
flutter_webrtc: ^0.2.8
toast: ^0.1.5
web_socket_channel: ^1.1.0
random_string: ^1.1.0
shared_preferences: ^0.5.10
http: ^0.12.0+4
simple_permissions: ^0.1.9
sdp_transform: ^0.2.0
我的意图是按照该项目的教程https://github.com/jamalag/flutter-webrtc-part2尝试使用0.0.0.0
在flutter_webrtc: ^0.2.8
中建立呼叫。
我用Flutter(main.dart)编码
/// Server Changes Here 服务器在此更改
_createPeerConnection() async {
Map<String,dynamic> config = {
"iceServers": [
{"url": "stun:stun.l.google.com:19302"},],};
final Map<String,dynamic> offerSdpConstraints = {
"mandatory": {
"OfferToReceiveAudio": true,"OfferToReceiveVideo": true,},"optional": [],};
_localStream = await _getUserMedia();
RTCPeerConnection pc =
await createPeerConnection(config,offerSdpConstraints);
if (pc != null) print('HERE ==> $pc');
pc.addStream(_localStream);
pc.onIceCandidate = (e) {
if (e.candidate != null) {
print(json.encode(
{
'candidate': e.candidate.toString(),'sdpMid': e.sdpMid.toString(),'sdpMlineIndex': e.sdpMlineIndex,));
} else {
print('无效');
}
};
pc.onIceConnectionState = (e) {
print(e);
};
pc.onAddStream = (stream) {
print('addStream:' + stream.id);
_remoteRenderer.srcObject = stream;
};
return pc;
}
_getUserMedia() async {
final Map<String,dynamic> mediaConstraints = {
'audio': false,'video': {
'facingMode': 'user',};
MediaStream mediaStream = await navigator.getUserMedia(mediaConstraints);
_localRenderer.srcObject = mediaStream;
_localRenderer.mirror = true;
return mediaStream;
}
initRenderers() async {
await _localRenderer.initialize();
await _remoteRenderer.initialize();
}
requestPermission() {
if (Platform.isAndroid) {
AndroidOperatingSystemPermission().requestAndroidUserPermission();
} else if (Platform.isIOS) {
IOSOperatingSystemPermission().requestIOSUserPermission();
} else {
logger('没有这样的操作系统');
}
}
void _setCandidate() async {
String jsonString = sdpController.text;
dynamic session = await jsonDecode('$jsonString');
print(session['candidate']);
dynamic candidate = RTCIceCandidate(
session['candidate'],session['sdpMid'],session['sdpMlineIndex']);
await _peerConnection.addCandidate(candidate);
}
void _setRemoteDescription() async {
String jsonString = sdpController.text;
dynamic session = await jsonDecode('$jsonString');
String sdp = write(session,null);
RTCSessionDescription description =
RTCSessionDescription(sdp,_offer ? 'answer' : 'offer');
print(description.toMap());
// debugPrint(description.toMap().toString(),wrapWidth: 2048);
await _peerConnection.setRemoteDescription(description);
}
void _createOffer() async {
RTCSessionDescription description =
await _peerConnection.createOffer({'offerToReceiveVideo': 1});
var session = parse(description.sdp);
print(json.encode(session));
_offer = true;
// print('__CREATE_OFFER__');
print(
json.encode({
'sdp': description.sdp.toString(),'type': description.type.toString(),}),);
_peerConnection.setLocalDescription(description);
}
void _createAnswer() async {
RTCSessionDescription description =
await _peerConnection.createAnswer({'offerToReceiveVideo': 1});
var session = parse(description.sdp);
debugPrint(json.encode(session),wrapWidth: 2048);
_peerConnection.setLocalDescription(description);
}
我遇到的错误:
2020-09-22 16:54:56.539143+0800 Runner[603:86509] [VERBOSE-2:ui_dart_state.cc(166)] Unhandled Exception: Unable to RTCPeerConnection::createAnswer: Error (null)
#0 RTCPeerConnection.createAnswer (package:flutter_webrtc/rtc_peerconnection.dart:237:7)
<asynchronous suspension>
#1 _CallerAppState._createAnswer (package:/main.dart:190:31)
#2 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:992:19)
#3 _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:1098:38)
#4 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:184:24)
#5 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:524:11)
#6 BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:284:5)
#7 BaseTapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:256:7)
#8 GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:158:27)
#9 GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:224:20)
#10 GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:200:22)
#11 GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:158:7)
#12 GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:104:7)
#13 GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:88:7)
#14 _rootRunUnary (dart:async/zone.dart:1206:13)
#15 _CustomZone.runUnary (dart:async/zone.dart:1100:19)
#16 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)
#17 _invoke1 (dart:ui/hooks.dart:267:10)
#18 _dispatchPointerDataPacket (dart:ui/hooks.dart:176:5)
我尝试解决的方法,
debugPrint(json.encode(session),wrapWidth: 2048);
要打印清晰长的输出,我认为这是问题所在。由于我是新手,因此需要一些线索。
谢谢。
解决方法
不再使用 _localRenderer.mirror = true;
我正在使用 RTCVideoView(_localRenderer,mirror: true),
我在 youtube 上关注了他并为我工作。 你可以关注他or my code。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。