I use v0.4 with success.
I try to implement v2.2.0 in new app but i successfully send my video/sound but i never received the video/sound from it.
_newRemoteFeed(int feed) async {
debugPrint('[VideoRoom] New Remote Feed : ' + feed.toString());
if (renderers.containsKey(feed)) { return; }
// Add a new Plugin for the user
var plugin = await session.attach<JanusVideoRoomPlugin>();
setState(() { plugins[feed] = plugin; });
// Prepare Video
setState(() { renderers[feed] = RTCVideoRenderer(); });
await renderers[feed]?.initialize();
// Register to user
var register = {
"request": "join",
"room": widget.roomNumber,
"ptype": "subscriber",
"feed": feed,
};
await plugins[feed]!.send(data: register);
// Listen potential stream for the user
plugins[feed]!.remoteStream!.listen((MediaStream stream) async {
debugPrint("[VideoRoom] Stream received for $feed");
setState(() { renderers[feed]?.srcObject = stream; });
await _waitUntilVideoNotLoad(renderers[feed]!); // Wait for MediaStream setup ok
setState(() { indicatorVisibility = false; });
},
onError: (e) { debugPrint('[VideoRoom] Listen Stream onError ' + e.toString()); },
onDone: () { debugPrint('[VideoRoom] Listen Stream onDone'); },
);
// Listen messages about the user
plugins[feed]!.messages!.listen((msg) async {
debugPrint('[VideoRoom] New message for feed : ' + feed.toString() +
'. Message : ' + msg.toString());
if (msg.event['janus'] == 'event') {
if (msg.jsep != null) {
debugPrint('[VideoRoom] Handling sdp for feed : ' + feed.toString());
debugPrint('[VideoRoom] RTCSessionDescription = sdp : ' + msg.jsep!.sdp! + ' || type : ' + msg.jsep!.type!);
await plugins[feed]?.handleRemoteJsep(msg.jsep);
var body = {"request": "start", "room": widget.roomNumber};
await plugins[feed]?.send(
data: body,
jsep: await plugins[feed]?.createAnswer(
audioRecv: true,
videoRecv: true,
audioSend: false,
videoSend: false));
}
var pluginData = msg.event['plugindata'];
if (pluginData != null) {
Map<String, dynamic> data = pluginData['data'];
if (data['videoroom'] == 'attached') {
debugPrint('[VideoRoom] Plugin attached for feed ' + feed.toString());
}
}
}
},
onError: (e) { debugPrint('[VideoRoom] Listen Message onError ' + e.toString()); },
onDone: () { debugPrint('[VideoRoom] Listen Message onDone'); },);
}
Future<void> initPlatformState() async {
//Create Janus Client
j = JanusClient(iceServers: [
RTCIceServer(urls: "XXX", username: "XXX", credential: "XXX"),
RTCIceServer(urls: "XXX", username: "XXX", credential: "XXX")
],
transport: RestJanusTransport(url: 'XXX'),
isUnifiedPlan: false,
withCredentials: false);
debugPrint('[VideoRoom] Try to connect to Janus Server');
session = await j.createSession();
plugins[0] = await session.attach<JanusVideoRoomPlugin>();
var mediaConstraints = {
"audio": true,
"video": {
"mandatory": {
"minWidth": '640',
"minHeight": '480',
"minFrameRate": '60',
},
"facingMode": "user",
"optional": [],
}
};
var stream = await plugins[0]?.initializeMediaDevices(mediaConstraints: mediaConstraints);
setState(() {
renderers[0] = RTCVideoRenderer();
});
await renderers[0]?.initialize();
setState(() {
renderers[0]?.srcObject = stream;
});
// Join room as publisher
var register = {
"request": "join",
"room": widget.roomNumber,
"ptype": "publisher",
"display": widget.username
};
await plugins[0]?.send(data: register);
plugins[0]?.messages?.listen((msg) async {
debugPrint('[VideoRoom] Message received : ' + msg.toString());
if (msg.event['janus'] == 'event') {
if (msg.jsep != null) {
debugPrint('[VideoRoom] Handling sdp');
debugPrint('[VideoRoom] RTCSessionDescription = sdp : ' + msg.jsep!.sdp! + ' || type : ' + msg.jsep!.type!);
await plugins[0]?.handleRemoteJsep(msg.jsep);
}
var pluginData = msg.event['plugindata'];
if (pluginData != null) {
var data = pluginData['data'];
if (data != null) {
if (data["publishers"] != null) {
List<dynamic> list = data["publishers"];
debugPrint('[VideoRoom] Got publishers : ' + list.toString());
for (var element in list) {
_newRemoteFeed(element['id']);
}
}
if (data['videoroom'] == 'event' &&
data.containsKey('unpublished') ||
data.containsKey('leaving')) {
if (renderers.containsKey(data['unpublished'])) {
RTCVideoRenderer? renderer;
setState(() {
renderer = renderers.remove(data['unpublished']);
});
renderer?.srcObject = null;
}
if (renderers.containsKey(data['leaving'])) {
RTCVideoRenderer? renderer;
setState(() {
renderer = renderers.remove(data['leaving']);
});
renderer?.srcObject = null;
}
if (plugins.containsKey(data['unpublished'])) {
await plugins[data['unpublished']]?.dispose();
plugins.remove(data['unpublished']);
}
}
if (data['videoroom'] == 'joined') {
var publish = {"request": "publish", "bitrate": 10000000};
RTCSessionDescription offer = await plugins[0]!.createOffer(
videoRecv: false,
audioRecv: false,
videoSend: true,
audioSend: true);
await plugins[0]?.send(data: publish, jsep: offer);
}
}
}
}
});
}
My video/sound works for me and other users of the room.
But i never received video or sound from anyone...