浏览代码

feat(JitsiTrack): Implement interface for adding handlers to MediaStream

dev1
hristoterezov 8 年前
父节点
当前提交
1b05d28a3a
共有 1 个文件被更改,包括 21 次插入7 次删除
  1. 21
    7
      modules/RTC/JitsiTrack.js

+ 21
- 7
modules/RTC/JitsiTrack.js 查看文件

@@ -7,6 +7,15 @@ import * as JitsiTrackEvents from "../../JitsiTrackEvents";
7 7
 var EventEmitter = require("events");
8 8
 var MediaType = require("../../service/RTC/MediaType");
9 9
 
10
+/**
11
+ * Maps our handler types to MediaStreamTrack properties.
12
+ */
13
+var trackHandler2Prop = {
14
+    "track_mute": "onmute",//Not supported on FF
15
+    "track_unmute": "onunmute",
16
+    "track_ended": "onended"
17
+};
18
+
10 19
 /**
11 20
  * This implements 'onended' callback normally fired by WebRTC after the stream
12 21
  * is stopped. There is no such behaviour yet in FF, so we have to add it.
@@ -90,15 +99,20 @@ function JitsiTrack(conference, stream, track, streamInactiveHandler, trackMedia
90 99
  * @param {Function} handler the handler.
91 100
  */
92 101
 JitsiTrack.prototype._setHandler = function (type, handler) {
93
-    if(this.stream) {
94
-        if(type === "inactive") {
95
-            if (RTCBrowserType.isFirefox()) {
96
-                implementOnEndedHandling(this);
97
-            }
98
-            addMediaStreamInactiveHandler(this.stream, handler);
102
+    this.handlers[type] = handler;
103
+    if(!this.stream)
104
+        return;
105
+
106
+    if(type === "inactive") {
107
+        if (RTCBrowserType.isFirefox()) {
108
+            implementOnEndedHandling(this);
99 109
         }
110
+        addMediaStreamInactiveHandler(this.stream, handler);
111
+    } else if(trackHandler2Prop.hasOwnProperty(type)) {
112
+        this.stream.getVideoTracks().forEach(function (track) {
113
+            track[trackHandler2Prop[type]] = handler;
114
+        }, this);
100 115
     }
101
-    this.handlers[type] = handler;
102 116
 }
103 117
 
104 118
 /**

正在加载...
取消
保存