8000 move to package:web (#1546) · baihua666/flutter-webrtc@33c9a3e · GitHub
[go: up one dir, main page]

Skip to content

Commit 33c9a3e

Browse files
jezelltimu-jesse-ezellcloudwebrtc
authored
move to package:web (flutter-webrtc#1546)
* move to package:web * update. * fix. --------- Co-authored-by: Jesse Ezell <jesse.ezell@timu.com> Co-authored-by: cloudwebrtc <duanweiwei1982@gmail.com>
1 parent 21d57df commit 33c9a3e

File tree

4 files changed

+96
-86
lines changed
Filter options

4 files changed

+96
-86
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
# Changelog
22

33
--------------------------------------------
4+
[0.10.0] - 2024-04-08
5+
6+
* [Web] move to package:web.
7+
48
[0.9.48+hotfix.1] - 2024-02-05
59

610
* [Android] bump version for libwebrtc.

lib/src/web/rtc_video_renderer_impl.dart

Lines changed: 79 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import 'dart:async';
2-
import 'dart:html' as html;
2+
import 'dart:js_interop';
33
import 'dart:js_util' as jsutil;
4-
import 'dart:ui_web' as ui;
54

65
import 'package:flutter/foundation.dart';
76
import 'package:flutter/services.dart';
87

98
import 'package:dart_webrtc/dart_webrtc.dart';
9+
import 'package:web/web.dart' as web;
1010

1111
// An error code value to error name Map.
1212
// See: https://developer.mozilla.org/en-US/docs/Web/API/MediaError/code
@@ -39,13 +39,13 @@ class RTCVideoRenderer extends ValueNotifier<RTCVideoValue>
3939

4040
static const _elementIdForAudioManager = 'html_webrtc_audio_manager_list';
4141

42-
html.AudioElement? _audioElement;
42+
web.AudioElement? _audioElement;
4343

4444
static int _textureCounter = 1;
4545

46-
html.MediaStream? _videoStream;
46+
web.MediaStream? _videoStream;
4747

48-
html.MediaStream? _audioStream;
48+
web.MediaStream? _audioStream;
4949

5050
MediaStreamWeb? _srcObject;
5151

@@ -115,14 +115,14 @@ class RTCVideoRenderer extends ValueNotifier<RTCVideoValue>
115115

116116
if (null != _srcObject) {
117117
if (stream.getVideoTracks().isNotEmpty) {
118-
_videoStream = html.MediaStream();
119-
for (final track in _srcObject!.jsStream.getVideoTracks()) {
118+
_videoStream = web.MediaStream();
119+
for (final track in _srcObject!.jsStream.getVideoTracks().toDart) {
120120
_videoStream!.addTrack(track);
121121
}
122122
}
123123
if (stream.getAudioTracks().isNotEmpty) {
124-
_audioStream = html.MediaStream();
125-
for (final track in _srcObject!.jsStream.getAudioTracks()) {
124+
_audioStream = web.MediaStream();
125+
for (final track in _srcObject!.jsStream.getAudioTracks().toDart) {
126126
_audioStream!.addTrack(track);
127127
}
128128
}
@@ -133,7 +133,7 @@ class RTCVideoRenderer extends ValueNotifier<RTCVideoValue>
133133

134134
if (null != _audioStream) {
135135
if (null == _audioElement) {
136-
_audioElement = html.AudioElement()
136+
_audioElement = web.AudioElement()
137137
..id = _elementIdForAudio
138138
..muted = stream.ownerTag == 'local'
139139
..autoplay = true;
@@ -163,16 +163,16 @@ class RTCVideoRenderer extends ValueNotifier<RTCVideoValue>
163163

164164
if (null != _srcObject) {
165165
if (stream.getVideoTracks().isNotEmpty) {
166-
_videoStream = html.MediaStream();
167-
for (final track in _srcObject!.jsStream.getVideoTracks()) {
166+
_videoStream = web.MediaStream();
167+
for (final track in _srcObject!.jsStream.getVideoTracks().toDart) {
168168
if (track.id == trackId) {
169169
_videoStream!.addTrack(track);
170170
}
171171
}
172172
}
173173
if (stream.getAudioTracks().isNotEmpty) {
174-
_audioStream = html.MediaStream();
175-
for (final track in _srcObject!.jsStream.getAudioTracks()) {
174+
_audioStream = web.MediaStream();
175+
for (final track in _srcObject!.jsStream.getAudioTracks().toDart) {
176176
_audioStream!.addTrack(track);
177177
}
178178
}
@@ -183,7 +183,7 @@ class RTCVideoRenderer extends ValueNotifier<RTCVideoValue>
183183

184184
if (null != _audioStream) {
185185
if (null == _audioElement) {
186-
_audioElement = html.AudioElement()
186+
_audioElement = web.AudioElement()
187187
..id = _elementIdForAudio
188188
..muted = stream.ownerTag == 'local'
189189
..autoplay = true;
@@ -201,21 +201,19 @@ class RTCVideoRenderer extends ValueNotifier<RTCVideoValue>
201201
value = value.copyWith(renderVideo: renderVideo);
202202
}
203203

204-
html.DivElement _ensureAudioManagerDiv() {
205-
var div = html.document.getElementById(_elementIdForAudioManager);
206-
if (null != div) return div as html.DivElement;
204+
web.HTMLDivElement _ensureAudioManagerDiv() {
205+
var div = web.document.getElementById(_elementIdForAudioManager);
206+
if (null != div) return div as web.HTMLDivElement;
207207

208-
div = html.DivElement()
208+
div = web.HTMLDivElement()
209209
..id = _elementIdForAudioManager
210210
..style.display = 'none';
211-
html.document.body?.append(div);
212-
return div as html.DivElement;
211+
web.document.body?.append(div);
212+
return div as web.HTMLDivElement;
213213
}
214214

215-
html.VideoElement? findHtmlView() {
216-
final element = html.document.getElementById(_elementIdForVideo);
217-
if (null != element) return element as html.VideoElement;
218-
return null;
215+
web.VideoElement? findHtmlView() {
216+
return videoElement;
219217
}
220218

221219
@override
@@ -228,8 +226,8 @@ class RTCVideoRenderer extends ValueNotifier<RTCVideoValue>
228226
element?.removeAttribute('src');
229227
element?.load();
230228
_audioElement?.remove();
231-
final audioManager = html.document.getElementById(_elementIdForAudioManager)
232-
as html.DivElement?;
229+
final audioManager = web.document.getElementById(_elementIdForAudioManager)
230+
as web.HTMLDivElement?;
233231
if (audioManager != null && !audioManager.hasChildNodes()) {
234232
audioManager.remove();
235233
}
@@ -252,66 +250,65 @@ class RTCVideoRenderer extends ValueNotifier<RTCVideoValue>
252250
return false;
253251
}
254252

253+
web.VideoElement? videoElement;
254+
255255
@override
256256
Future<void> initialize() async {
257257
// ignore: undefined_prefixed_name
258-
ui.platformViewRegistry.registerViewFactory(viewType, (int viewId) {
259-
for (var s in _subscriptions) {
260-
s.cancel();
261-
}
262-
_subscriptions.clear();
263-
264-
final element = html.VideoElement()
265-
..autoplay = true
266-
..muted = true
267-
..controls = false
268-
..srcObject = _videoStream
269-
..id = _elementIdForVideo
270-
..setAttribute('playsinline', 'true');
271-
272-
_applyDefaultVideoStyles(element);
273-
274-
_subscriptions.add(
275-
element.onCanPlay.listen((dynamic _) {
276-
_updateAllValues();
277-
}),
278-
);
279-
280-
_subscriptions.add(
281-
element.onResize.listen((dynamic _) {
282-
_updateAllValues();
283-
onResize?.call();
284-
}),
285-
);
286-
287-
// The error event fires when some form of error occurs while attempting to load or perform the media.
288-
_subscriptions.add(
289-
element.onError.listen((html.Event _) {
290-
// The Event itself (_) doesn't contain info about the actual error.
291-
// We need to look at the HTMLMediaElement.error.
292-
// See: https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/error
293-
final error = element.error;
294-
print('RTCVideoRenderer: videoElement.onError, ${error.toString()}');
295-
throw PlatformException(
296-
code: _kErrorValueToErrorName[error!.code]!,
297-
message:
298-
error.message != '' ? error.message : _kDefaultErrorMessage,
299-
details: _kErrorValueToErrorDescription[error.code],
300-
);
301-
}),
302-
);
303-
304-
_subscriptions.add(
305-
element.onEnded.listen((dynamic _) {
306-
// print('RTCVideoRenderer: videoElement.onEnded');
307-
}),
308-
);
309-
310-
return element;
311-
});
258+
for (var s in _subscriptions) {
259+
s.cancel();
260+
}
261+
_subscriptions.clear();
262+
263+
final element = web.VideoElement()
264+
..autoplay = true
265+
..muted = true
266+
..controls = false
267+
..srcObject = _videoStream
268+
..id = _elementIdForVideo
269+
..setAttribute('playsinline', 'true');
270+
271+
_applyDefaultVideoStyles(element);
272+
273+
_subscriptions.add(
274+
element.onCanPlay.listen((dynamic _) {
275+
_updateAllValues();
276+
}),
277+
);
278+
279+
_subscriptions.add(
280+
element.onResize.listen((dynamic _) {
281+
_updateAllValues();
282+
onResize?.call();
283+
}),
284+
);
285+
286+
// The error event fires when some form of error occurs while attempting to load or perform the media.
287+
_subscriptions.add(
288+
element.onError.listen((web.Event _) {
289+
// The Event itself (_) doesn't contain info about the actual error.
290+
// We need to look at the HTMLMediaElement.error.
291+
// See: https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/error
292+
final error = element.error;
293+
print('RTCVideoRenderer: videoElement.onError, ${error.toString()}');
294+
throw PlatformException(
295+
code: _kErrorValueToErrorName[error!.code]!,
296+
message: error.message != '' ? error.message : _kDefaultErrorMessage,
297+
details: _kErrorValueToErrorDescription[error.code],
298+
);
299+
}),
300+
);
301+
302+
_subscriptions.add(
303+
element.onEnded.listen((dynamic _) {
304+
// print('RTCVideoRenderer: videoElement.onEnded');
305+
}),
306+
);
307+
308+
videoElement = element;
312309
}
313310

314-
void _applyDefaultVideoStyles(html.VideoElement element) {
311+
void _applyDefaultVideoStyles(web.VideoElement element) {
315312
// Flip the video horizontally if is mirrored.
316313
if (mirror) {
317314
element.style.transform = 'scaleX(-1)';

lib/src/web/rtc_video_view_impl.dart

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import 'dart:async';
33
import 'package:flutter/material.dart';
44

55
import 'package:dart_webrtc/dart_webrtc.dart';
6+
import 'package:web/web.dart' as web;
67
import 'package:webrtc_interface/webrtc_interface.dart';
78

89
import 'rtc_video_renderer_impl.dart';
@@ -66,7 +67,14 @@ class RTCVideoViewState extends State<RTCVideoView> {
6667
}
6768

6869
Widget buildVideoElementView() {
69-
return HtmlElementView(viewType: videoRenderer.viewType);
70+
return HtmlElementView.fromTagName(
71+
tagName: "div",
72+
onElementCreated: (element) {
73+
final div = element as web.HTMLDivElement;
74+
div.style.width = '100%';
75+
div.style.height = '100%';
76+
div.appendChild(videoRenderer.videoElement!);
77+
});
7078
}
7179

7280
@override

pubspec.yaml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
name: flutter_webrtc
22
description: Flutter WebRTC plugin for iOS/Android/Destkop/Web, based on GoogleWebRTC.
3-
version: 0.9.48+hotfix.1
3+
version: 0.10.0
44
homepage: https://github.com/cloudwebrtc/flutter-webrtc
55
environment:
6-
sdk: '>=2.12.0 <4.0.0'
6+
sdk: '>=3.3.0 <4.0.0'
77
flutter: '>=1.22.0'
88

99
dependencies:
1010
collection: ^1.17.0
11-
dart_webrtc: ^1.2.0
11+
dart_webrtc: ^1.3.0
1212
flutter:
1313
sdk: flutter
1414
path_provider: ^2.0.2
15+
web: ^0.5.1
1516
webrtc_interface: ^1.1.2
1617

1718
dev_dependencies:

0 commit comments

Comments
 (0)
0