Skip to content

Commit b38d5a8

Browse files
committed
first commit.
1 parent dacd470 commit b38d5a8

23 files changed

+1261
-0
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,5 @@ doc/api/
1919
*.js_
2020
*.js.deps
2121
*.js.map
22+
23+
.DS_Store

lib/src/enums.dart

Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
enum RecorderAudioChannel { INPUT, OUTPUT }
2+
3+
/// RTCDataChannelMessage type
4+
enum MessageType { text, binary }
5+
6+
enum RTCDataChannelState {
7+
RTCDataChannelConnecting,
8+
RTCDataChannelOpen,
9+
RTCDataChannelClosing,
10+
RTCDataChannelClosed,
11+
}
12+
13+
enum RTCSignalingState {
14+
RTCSignalingStateStable,
15+
RTCSignalingStateHaveLocalOffer,
16+
RTCSignalingStateHaveRemoteOffer,
17+
RTCSignalingStateHaveLocalPrAnswer,
18+
RTCSignalingStateHaveRemotePrAnswer,
19+
RTCSignalingStateClosed
20+
}
21+
22+
enum RTCIceGatheringState {
23+
RTCIceGatheringStateNew,
24+
RTCIceGatheringStateGathering,
25+
RTCIceGatheringStateComplete
26+
}
27+
28+
enum RTCPeerConnectionState {
29+
RTCPeerConnectionStateClosed,
30+
RTCPeerConnectionStateFailed,
31+
RTCPeerConnectionStateDisconnected,
32+
RTCPeerConnectionStateNew,
33+
RTCPeerConnectionStateConnecting,
34+
RTCPeerConnectionStateConnected
35+
}
36+
37+
enum RTCIceConnectionState {
38+
RTCIceConnectionStateNew,
39+
RTCIceConnectionStateChecking,
40+
RTCIceConnectionStateCompleted,
41+
RTCIceConnectionStateConnected,
42+
RTCIceConnectionStateCount,
43+
RTCIceConnectionStateFailed,
44+
RTCIceConnectionStateDisconnected,
45+
RTCIceConnectionStateClosed,
46+
}
47+
48+
enum RTCVideoViewObjectFit {
49+
RTCVideoViewObjectFitContain,
50+
RTCVideoViewObjectFitCover,
51+
}
52+
enum RTCRtpMediaType {
53+
RTCRtpMediaTypeAudio,
54+
RTCRtpMediaTypeVideo,
55+
RTCRtpMediaTypeData,
56+
}
57+
58+
final typeRTCRtpMediaTypetoString = <RTCRtpMediaType, String>{
59+
RTCRtpMediaType.RTCRtpMediaTypeAudio: 'audio',
60+
RTCRtpMediaType.RTCRtpMediaTypeVideo: 'video',
61+
RTCRtpMediaType.RTCRtpMediaTypeData: 'data',
62+
};
63+
64+
final typeStringToRTCRtpMediaType = <String, RTCRtpMediaType>{
65+
'audio': RTCRtpMediaType.RTCRtpMediaTypeAudio,
66+
'video': RTCRtpMediaType.RTCRtpMediaTypeVideo,
67+
'data': RTCRtpMediaType.RTCRtpMediaTypeData,
68+
};
69+
70+
enum TransceiverDirection {
71+
SendRecv,
72+
SendOnly,
73+
RecvOnly,
74+
Inactive,
75+
}
76+
77+
final typeStringToRtpTransceiverDirection = <String, TransceiverDirection>{
78+
'sendrecv': TransceiverDirection.SendRecv,
79+
'sendonly': TransceiverDirection.SendOnly,
80+
'recvonly': TransceiverDirection.RecvOnly,
81+
'inactive': TransceiverDirection.Inactive,
82+
};
83+
84+
final typeRtpTransceiverDirectionToString = <TransceiverDirection, String>{
85+
TransceiverDirection.SendRecv: 'sendrecv',
86+
TransceiverDirection.SendOnly: 'sendonly',
87+
TransceiverDirection.RecvOnly: 'recvonly',
88+
TransceiverDirection.Inactive: 'inactive',
89+
};
90+
91+
RTCIceConnectionState iceConnectionStateForString(String? state) {
92+
switch (state) {
93+
case 'new':
94+
return RTCIceConnectionState.RTCIceConnectionStateNew;
95+
case 'checking':
96+
return RTCIceConnectionState.RTCIceConnectionStateChecking;
97+
case 'connected':
98+
return RTCIceConnectionState.RTCIceConnectionStateConnected;
99+
case 'completed':
100+
return RTCIceConnectionState.RTCIceConnectionStateCompleted;
101+
case 'failed':
102+
return RTCIceConnectionState.RTCIceConnectionStateFailed;
103+
case 'disconnected':
104+
return RTCIceConnectionState.RTCIceConnectionStateDisconnected;
105+
case 'closed':
106+
return RTCIceConnectionState.RTCIceConnectionStateClosed;
107+
case 'count':
108+
return RTCIceConnectionState.RTCIceConnectionStateCount;
109+
}
110+
return RTCIceConnectionState.RTCIceConnectionStateClosed;
111+
}
112+
113+
RTCIceGatheringState iceGatheringStateforString(String? state) {
114+
switch (state) {
115+
case 'new':
116+
return RTCIceGatheringState.RTCIceGatheringStateNew;
117+
case 'gathering':
118+
return RTCIceGatheringState.RTCIceGatheringStateGathering;
119+
case 'complete':
120+
return RTCIceGatheringState.RTCIceGatheringStateComplete;
121+
}
122+
return RTCIceGatheringState.RTCIceGatheringStateNew;
123+
}
124+
125+
RTCSignalingState signalingStateForString(String? state) {
126+
switch (state) {
127+
case 'stable':
128+
return RTCSignalingState.RTCSignalingStateStable;
129+
case 'have-local-offer':
130+
return RTCSignalingState.RTCSignalingStateHaveLocalOffer;
131+
case 'have-local-pranswer':
132+
return RTCSignalingState.RTCSignalingStateHaveLocalPrAnswer;
133+
case 'have-remote-offer':
134+
return RTCSignalingState.RTCSignalingStateHaveRemoteOffer;
135+
case 'have-remote-pranswer':
136+
return RTCSignalingState.RTCSignalingStateHaveRemotePrAnswer;
137+
case 'closed':
138+
return RTCSignalingState.RTCSignalingStateClosed;
139+
}
140+
return RTCSignalingState.RTCSignalingStateClosed;
141+
}
142+
143+
RTCDataChannelState rtcDataChannelStateForString(String state) {
144+
switch (state) {
145+
case 'connecting':
146+
return RTCDataChannelState.RTCDataChannelConnecting;
147+
case 'open':
148+
return RTCDataChannelState.RTCDataChannelOpen;
149+
case 'closing':
150+
return RTCDataChannelState.RTCDataChannelClosing;
151+
case 'closed':
152+
return RTCDataChannelState.RTCDataChannelClosed;
153+
}
154+
return RTCDataChannelState.RTCDataChannelClosed;
155+
}
156+
157+
RTCPeerConnectionState peerConnectionStateForString(String? state) {
158+
switch (state) {
159+
case 'new':
160+
return RTCPeerConnectionState.RTCPeerConnectionStateNew;
161+
case 'connecting':
162+
return RTCPeerConnectionState.RTCPeerConnectionStateConnecting;
163+
case 'connected':
164+
return RTCPeerConnectionState.RTCPeerConnectionStateConnected;
165+
case 'closed':
166+
return RTCPeerConnectionState.RTCPeerConnectionStateClosed;
167+
case 'disconnected':
168+
return RTCPeerConnectionState.RTCPeerConnectionStateDisconnected;
169+
case 'failed':
170+
return RTCPeerConnectionState.RTCPeerConnectionStateFailed;
171+
}
172+
173+
return RTCPeerConnectionState.RTCPeerConnectionStateClosed;
174+
}

lib/src/factory.dart

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import 'media_stream.dart';
2+
import 'navigator.dart';
3+
import 'rtc_peerconnection.dart';
4+
5+
abstract class RTCFactory {
6+
Future<RTCPeerConnection> createPeerConnection(
7+
Map<String, dynamic> configuration,
8+
[Map<String, dynamic> constraints]);
9+
10+
Future<MediaStream> createLocalMediaStream(String label);
11+
12+
Navigator get navigator;
13+
}

lib/src/media_recorder.dart

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import 'enums.dart';
2+
import 'media_stream.dart';
3+
import 'media_stream_track.dart';
4+
5+
abstract class MediaRecorder {
6+
/// For Android use audioChannel param
7+
/// For iOS use audioTrack
8+
Future<void> start(
9+
String path, {
10+
MediaStreamTrack? videoTrack,
11+
RecorderAudioChannel? audioChannel,
12+
});
13+
14+
/// Only for Flutter Web
15+
void startWeb(
16+
MediaStream stream, {
17+
Function(dynamic blob, bool isLastOne)? onDataChunk,
18+
String mimeType,
19+
});
20+
21+
Future<dynamic> stop();
22+
}

lib/src/media_stream.dart

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import 'media_stream_track.dart';
2+
3+
typedef MediaTrackCallback = void Function(MediaStreamTrack track);
4+
5+
///https://w3c.github.io/mediacapture-main/#mediastream
6+
abstract class MediaStream {
7+
MediaStream(this._id, this._ownerTag);
8+
final String _id;
9+
final String _ownerTag;
10+
11+
/// The event type of this event handler is addtrack.
12+
MediaTrackCallback? onAddTrack;
13+
14+
/// The event type of this event handler is removetrack.
15+
MediaTrackCallback? onRemoveTrack;
16+
17+
String get id => _id;
18+
19+
String get ownerTag => _ownerTag;
20+
21+
/// The active attribute return true if this [MediaStream] is active and false otherwise.
22+
/// [MediaStream] is considered active if at least one of its [MediaStreamTracks] is not in the [MediaStreamTrack.ended] state.
23+
/// Once every track has ended, the stream's active property becomes false.
24+
bool? get active;
25+
26+
@deprecated
27+
Future<void> getMediaTracks();
28+
29+
/// Adds the given [MediaStreamTrack] to this [MediaStream].
30+
Future<void> addTrack(MediaStreamTrack track, {bool addToNative = true});
31+
32+
/// Removes the given [MediaStreamTrack] object from this [MediaStream].
33+
Future<void> removeTrack(MediaStreamTrack track,
34+
{bool removeFromNative = true});
35+
36+
/// Returns a List [MediaStreamTrack] objects representing all the tracks in this stream.
37+
List<MediaStreamTrack> getTracks();
38+
39+
/// Returns a List [MediaStreamTrack] objects representing the audio tracks in this stream.
40+
/// The list represents a snapshot of all the [MediaStreamTrack] objects in this stream's track set whose kind is equal to 'audio'.
41+
List<MediaStreamTrack> getAudioTracks();
42+
43+
/// Returns a List [MediaStreamTrack] objects representing the video tracks in this stream.
44+
/// The list represents a snapshot of all the [MediaStreamTrack] objects in this stream's track set whose kind is equal to 'video'.
45+
List<MediaStreamTrack> getVideoTracks();
46+
47+
/// Returns either a [MediaStreamTrack] object from this stream's track set whose id is equal to trackId, or [StateError], if no such track exists.
48+
MediaStreamTrack? getTrackById(String trackId) {
49+
for (var item in getTracks()) {
50+
if (item.id == trackId) {
51+
return item;
52+
}
53+
}
54+
return null;
55+
}
56+
57+
/// Clones the given [MediaStream] and all its tracks.
58+
MediaStream clone();
59+
60+
Future<void> dispose() async {
61+
return Future.value();
62+
}
63+
}

0 commit comments

Comments
 (0)