22library dart_webrtc;
33
44import 'dart:html' as html;
5-
65import 'package:js/js.dart' ;
7-
86import 'media_stream.dart' ;
97
108class RTCVideoElement {
@@ -14,14 +12,11 @@ class RTCVideoElement {
1412 ..muted = false
1513 ..controls = false
1614 ..style.objectFit = 'contain'
17- ..style.border = 'none'
18- ..id = 'dart-webrtc-video-${_idx ++}' ;
15+ ..style.border = 'none' ;
1916
2017 // Allows Safari iOS to play the video inline
2118 _html.setAttribute ('playsinline' , 'true' );
2219 }
23- static int _idx = 0 ;
24- Element _rtc;
2520 MediaStream _stream;
2621
2722 html.VideoElement _html;
@@ -32,8 +27,7 @@ class RTCVideoElement {
3227
3328 set srcObject (MediaStream stream) {
3429 _stream = stream;
35- _rtc = querySelector ('#${_html .id }' );
36- _rtc.srcObject = _stream? .js;
30+ _html.srcObject = convertToHtmlMediaStream (stream);
3731 }
3832
3933 int get videoWidth => _html.videoWidth;
@@ -66,10 +60,10 @@ class RTCVideoElement {
6660 void removeAttribute (String name) => _html.removeAttribute (name);
6761}
6862
69- @JS ('Element' )
70- abstract class Element {
71- external set srcObject (MediaStreamJs stream);
63+ html.MediaStream convertToHtmlMediaStream (MediaStream jsStream) {
64+ var htmlStream = html.MediaStream ();
65+ jsStream.getTracks ().forEach ((track) {
66+ htmlStream.addTrack (track as html.MediaStreamTrack );
67+ });
68+ return htmlStream;
7269}
73-
74- @JS ('window.document.querySelector' )
75- external Element querySelector (String id);
0 commit comments