Flutter Quickblox Flatter SDK-正在调用,但视频未流式传输
我是一个新手,这已经是几天了,我正在努力使用alpha sdk进行视频通话。我可以打电话,我可以听到音频,但无法播放视频(没有本地视频,也没有远程视频流) 所有权限都是从设置中授予应用的 Android手机到Android模拟器-音频正常,但没有视频 Android手机对Android手机-音频正常,但没有视频 Android手机到IOS模拟器-音频正常,但没有视频Flutter Quickblox Flatter SDK-正在调用,但视频未流式传输,flutter,video,quickblox,videocall,Flutter,Video,Quickblox,Videocall,我是一个新手,这已经是几天了,我正在努力使用alpha sdk进行视频通话。我可以打电话,我可以听到音频,但无法播放视频(没有本地视频,也没有远程视频流) 所有权限都是从设置中授予应用的 Android手机到Android模拟器-音频正常,但没有视频 Android手机对Android手机-音频正常,但没有视频 Android手机到IOS模拟器-音频正常,但没有视频 Sdk初始化很好 聊天室正在连接 WebRTC init在调用之前工作正常 我打了个视频电话 startCall(op
- Sdk初始化很好
- 聊天室正在连接
- WebRTC init在调用之前工作正常
- 我打了个视频电话
startCall(opponentIds) async{ bool connected = await QB.chat.isConnected(); print('starting call'+connected.toString()); int sessionType = QBRTCSessionTypes.VIDEO; try { QBRTCSession session = await QB.webrtc.call(opponentIds, sessionType); print('starting call'+session.toString()); sessionId = session.id; play(myQBUserId,opponentIds[0],session.id); } on PlatformException catch (e) { print('error while initializing call'+e.toString()); } }
- ListenforCall
_listenForCall() async { print('listening for call'); String eventName = QBRTCEventTypes.CALL; try { await QB.webrtc.subscribeRTCEvent(eventName, (data) async { Map<String, Object> payloadMap = new Map<String, Object>.from(data["payload"]); Map<String, Object> sessionMap = new Map<String, Object>.from(payloadMap["session"]); String sessionId = sessionMap["id"]; int initiatorId = sessionMap["initiatorId"]; int callType = sessionMap["type"]; setState(() { this.sessionId = sessionId; _incomingCall = true; }); play(myQBUserId,initiatorId,sessionId); }); await QB.webrtc.subscribeRTCEvent(QBRTCEventTypes.RECEIVED_VIDEO_TRACK, (data) async { Map<String, Object> payloadMap = new Map<String, Object>.from(data["payload"]); Map<String, Object> sessionMap = new Map<String, Object>.from(payloadMap["session"]); String sessionId = sessionMap["id"]; int initiatorId = sessionMap["initiatorId"]; int callType = sessionMap["type"]; print('receiving video even from initiator:'+initiatorId.toString()); this.sessionId = sessionId; setState(() { _callStarted = true; }); await QB.webrtc.enableAudio(sessionId, enable: true); await QB.webrtc.enableVideo(sessionId, enable: true); }); } on PlatformException catch (e) { print('error while listening for calls'+e.toString()); } }
- 结束通话
_endCall() async{ try { QBRTCSession session = await QB.webrtc.hangUp(sessionId); setState(() { _callStarted = false; _incomingCall = false; }); } on PlatformException catch (e) { // Some error occured, look at the exception message for more details } }
- 视频通话布局来自-
_endCall() async{
try {
QBRTCSession session = await QB.webrtc.hangUp(sessionId);
setState(() {
_callStarted = false;
_incomingCall = false;
});
} on PlatformException catch (e) {
// Some error occured, look at the exception message for more details
}
}
RTCVideoViewController _localVideoViewController;
RTCVideoViewController _remoteVideoViewController;
...
child: new Container(
margin: new EdgeInsets.fromLTRB(10.0, 10.0, 10.0, 10.0),
width: 160.0,
height: 160.0,
child: RTCVideoView(
onVideoViewCreated: _onLocalVideoViewCreated,
),
decoration: new BoxDecoration(color: Colors.black54),
)
...
child: new Container(
margin: new EdgeInsets.fromLTRB(10.0, 10.0, 10.0, 10.0),
width: 160.0,
height: 160.0,
child: RTCVideoView(
onVideoViewCreated: _onRemoteVideoViewCreated,
),
decoration: new BoxDecoration(color: Colors.black54),
)
...
void _onLocalVideoViewCreated(RTCVideoViewController controller) {
_localVideoViewController = controller;
}
void _onRemoteVideoViewCreated(RTCVideoViewController controller) {
_remoteVideoViewController = controller;
}