Skip to content

Commit ce8c9be

Browse files
committed
refactor: use separate interface
1 parent d77e93e commit ce8c9be

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+1521
-1369
lines changed

lib/dart_webrtc.dart

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,9 @@
1-
export 'src/enums.dart';
2-
export 'src/event.dart';
1+
library dart_webrtc;
2+
3+
export 'package:webrtc_interface/webrtc_interface.dart'
4+
hide MediaDevices, MediaRecorder, Navigator;
5+
36
export 'src/media_devices.dart';
4-
export 'src/media_stream.dart';
5-
export 'src/media_stream_track.dart';
6-
export 'src/navigator.dart';
7-
export 'src/rtc_data_channel.dart';
8-
export 'src/rtc_dtmf_sender.dart';
9-
export 'src/rtc_ice_candidate.dart';
10-
export 'src/rtc_peerconnection.dart';
11-
export 'src/rtc_peerconnection.dart';
12-
export 'src/rtc_rtcp_parameters.dart';
13-
export 'src/rtc_rtp_parameters.dart';
14-
export 'src/rtc_rtp_receiver.dart';
15-
export 'src/rtc_rtp_sender.dart';
16-
export 'src/rtc_rtp_transceiver.dart';
17-
export 'src/rtc_session_description.dart';
18-
export 'src/rtc_stats_resport.dart';
19-
export 'src/rtc_track_event.dart';
7+
export 'src/media_recorder.dart';
8+
export 'src/rtc_peerconnection_factory.dart';
209
export 'src/video_element.dart';

lib/src/enums.dart

Lines changed: 0 additions & 174 deletions
This file was deleted.

lib/src/event.dart

Lines changed: 0 additions & 9 deletions
This file was deleted.

lib/src/factory_impl.dart

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import 'dart:async';
2+
import 'dart:convert';
3+
import 'dart:html' as html;
4+
import 'package:webrtc_interface/webrtc_interface.dart';
5+
6+
import 'media_recorder_impl.dart';
7+
import 'media_stream_impl.dart';
8+
import 'navigator_impl.dart';
9+
import 'rtc_peerconnection_impl.dart';
10+
11+
class RTCFactoryWeb extends RTCFactory {
12+
RTCFactoryWeb._internal();
13+
static final instance = RTCFactoryWeb._internal();
14+
15+
@override
16+
Future<RTCPeerConnection> createPeerConnection(
17+
Map<String, dynamic> configuration,
18+
[Map<String, dynamic>? constraints]) async {
19+
final constr = (constraints != null && constraints.isNotEmpty)
20+
? constraints
21+
: {
22+
'mandatory': {},
23+
'optional': [
24+
{'DtlsSrtpKeyAgreement': true},
25+
],
26+
};
27+
final jsRtcPc = html.RtcPeerConnection({...constr, ...configuration});
28+
final _peerConnectionId = base64Encode(jsRtcPc.toString().codeUnits);
29+
return RTCPeerConnectionWeb(_peerConnectionId, jsRtcPc);
30+
}
31+
32+
@override
33+
Future<MediaStream> createLocalMediaStream(String label) async {
34+
final jsMs = html.MediaStream();
35+
return MediaStreamWeb(jsMs, 'local');
36+
}
37+
38+
@override
39+
MediaRecorder mediaRecorder() {
40+
return MediaRecorderWeb();
41+
}
42+
43+
@override
44+
VideoRenderer videoRenderer() {
45+
throw UnimplementedError();
46+
}
47+
48+
@override
49+
Navigator get navigator => NavigatorWeb();
50+
}

lib/src/media_devices.dart

Lines changed: 17 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,25 @@
1-
@JS()
2-
library dart_webrtc;
3-
4-
import 'package:js/js.dart';
5-
import 'package:js/js_util.dart';
6-
7-
import 'event.dart';
8-
import 'media_stream.dart';
9-
10-
@JS()
11-
@anonymous
12-
class MediaStreamConstraints {
13-
external factory MediaStreamConstraints({dynamic audio, dynamic video});
14-
external dynamic get audio;
15-
external dynamic get video;
16-
}
17-
18-
@JS('MediaDeviceInfo')
19-
class MediaDeviceInfo {
20-
external String get deviceId;
21-
external String get groupId;
22-
external String get kind;
23-
external String get label;
24-
}
25-
26-
@JS('MediaDevices')
27-
class MediaDevicesJs {
28-
external factory MediaDevicesJs();
29-
external dynamic enumerateDevices();
30-
external dynamic getUserMedia(MediaStreamConstraints constraints);
31-
external dynamic getDisplayMedia(MediaStreamConstraints constraints);
32-
external set devicechange(Function(Event<MediaDevicesJs> event) func);
33-
}
1+
import 'package:webrtc_interface/webrtc_interface.dart';
2+
import '../dart_webrtc.dart';
3+
import 'rtc_peerconnection_factory.dart';
344

355
class MediaDevices {
36-
MediaDevices(this._js);
37-
38-
Future<List<MediaDeviceInfo>> enumerateDevices() async {
39-
try {
40-
var jsList = await promiseToFuture<List<dynamic>>(_js.enumerateDevices());
41-
return jsList.map((e) => e as MediaDeviceInfo).toList();
42-
} catch (e) {
43-
rethrow;
44-
}
6+
@Deprecated(
7+
'Use the navigator.mediaDevices.getUserMedia(Map<String, dynamic>) provide from the facrory instead')
8+
static Future<MediaStream> getUserMedia(
9+
Map<String, dynamic> mediaConstraints) async {
10+
return navigator.mediaDevices.getUserMedia(mediaConstraints);
4511
}
4612

47-
Future<MediaStream> getUserMedia({MediaStreamConstraints constraints}) async {
48-
try {
49-
var jsStream =
50-
await promiseToFuture<MediaStreamJs>(_js.getUserMedia(constraints));
51-
return MediaStream(jsStream);
52-
} catch (e) {
53-
rethrow;
54-
}
13+
@Deprecated(
14+
'Use the navigator.mediaDevices.getDisplayMedia(Map<String, dynamic>) provide from the facrory instead')
15+
static Future<MediaStream> getDisplayMedia(
16+
Map<String, dynamic> mediaConstraints) async {
17+
return navigator.mediaDevices.getDisplayMedia(mediaConstraints);
5518
}
5619

57-
Future<MediaStream> getDisplayMedia(
58-
{MediaStreamConstraints constraints}) async {
59-
try {
60-
var jsStream = await promiseToFuture<MediaStreamJs>(
61-
_js.getDisplayMedia(constraints));
62-
return MediaStream(jsStream);
63-
} catch (e) {
64-
rethrow;
65-
}
20+
@Deprecated(
21+
'Use the navigator.mediaDevices.getSources() provide from the facrory instead')
22+
static Future<List<dynamic>> getSources() {
23+
return navigator.mediaDevices.getSources();
6624
}
67-
68-
final MediaDevicesJs _js;
6925
}

lib/src/media_recorder.dart

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import 'package:webrtc_interface/src/media_recorder.dart' as _interface;
2+
import 'package:webrtc_interface/webrtc_interface.dart';
3+
4+
import '../dart_webrtc.dart';
5+
import 'rtc_peerconnection_factory.dart';
6+
7+
class MediaRecorder extends _interface.MediaRecorder {
8+
MediaRecorder() : _delegate = mediaRecorder();
9+
final _interface.MediaRecorder _delegate;
10+
11+
@override
12+
Future<void> start(String path,
13+
{MediaStreamTrack? videoTrack, RecorderAudioChannel? audioChannel}) =>
14+
_delegate.start(path, videoTrack: videoTrack, audioChannel: audioChannel);
15+
16+
@override
17+
Future stop() => _delegate.stop();
18+
19+
@override
20+
void startWeb(
21+
MediaStream stream, {
22+
Function(dynamic blob, bool isLastOne)? onDataChunk,
23+
String? mimeType,
24+
}) =>
25+
_delegate.startWeb(stream,
26+
onDataChunk: onDataChunk, mimeType: mimeType ?? 'video/webm');
27+
}

0 commit comments

Comments
 (0)