1
0
mirror of https://gitlab.com/comunic/comunicmobile synced 2024-12-26 12:58:51 +00:00

Can receive remote video

This commit is contained in:
Pierre HUBERT 2020-04-20 18:13:28 +02:00
parent 7364fc49a8
commit 167217a5a0
2 changed files with 31 additions and 2 deletions

View File

@ -60,6 +60,6 @@ class CallsHelper {
"callID": callID,
"peerID": peerID,
"type": "CANDIDATE",
"data": jsonEncode(candidate)
"data": jsonEncode(candidate.toMap())
});
}

View File

@ -44,6 +44,7 @@ class _CallScreenState extends SafeState<CallScreen> {
CallMembersList _membersList;
UsersList _usersList;
final _peersConnections = Map<int, RTCPeerConnection>();
final _renderers = Map<int, RTCVideoRenderer>();
@override
void initState() {
@ -168,9 +169,13 @@ class _CallScreenState extends SafeState<CallScreen> {
_peersConnections[memberID] = peerConnection;
// Create a renderer
_renderers[memberID] = RTCVideoRenderer()..initialize();
// Register callbacks
peerConnection.onIceCandidate =
(c) => CallsHelper.sendIceCandidate(convID, memberID, c);
peerConnection.onAddStream = (s) => _renderers[memberID].srcObject = s;
// Request an offer to establish a peer connection
await CallsHelper.requestOffer(convID, memberID);
@ -199,6 +204,7 @@ class _CallScreenState extends SafeState<CallScreen> {
// Send answer if required
if (ev.sessionDescription.type == "offer") {
final answer = await _peersConnections[ev.peerID].createAnswer({});
await _peersConnections[ev.peerID].setLocalDescription(answer);
await CallsHelper.sendSessionDescription(convID, ev.peerID, answer);
}
@ -223,6 +229,11 @@ class _CallScreenState extends SafeState<CallScreen> {
await _peersConnections[memberID].close();
_peersConnections.remove(memberID);
}
if (_renderers.containsKey(memberID)) {
await _renderers[memberID].dispose();
_renderers.remove(memberID);
}
}
/// Call this when a member has completely left the call
@ -264,7 +275,11 @@ class _CallScreenState extends SafeState<CallScreen> {
if (_membersList == null) return buildCenteredProgressBar();
return Column(
children: <Widget>[_buildMembersArea(), Spacer(), _buildFooterArea()],
children: <Widget>[
_buildMembersArea(),
_buildVideosArea(),
_buildFooterArea()
],
);
}
@ -287,6 +302,20 @@ class _CallScreenState extends SafeState<CallScreen> {
);
}
/// Videos area
Widget _buildVideosArea() {
return Expanded(
child: Column(
children: _membersList.readyPeers
.map((f) => _buildMemberVideo(f.userID))
.toList(),
));
}
Widget _buildMemberVideo(int peerID) {
return Expanded(child: RTCVideoView(_renderers[peerID]));
}
/// Footer area
Widget _buildFooterArea() {
return Material(