Skip to content

Commit 510d20d

Browse files
committed
api: initial implementation of MediaStreamTrack.getSettings
Implemented for video streams. It currently implements height, width and frameRate, taking their effective values on track creation.
1 parent d58dbb5 commit 510d20d

File tree

6 files changed

+57
-2
lines changed

6 files changed

+57
-2
lines changed

MediaStreamTrack.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ type MediaStreamTrackState = "live" | "ended";
2121
class MediaStreamTrack extends EventTarget(MEDIA_STREAM_TRACK_EVENTS) {
2222
_constraints: Object;
2323
_enabled: boolean;
24+
_settings: Object;
25+
2426
id: string;
2527
kind: string;
2628
label: string;
@@ -39,6 +41,8 @@ class MediaStreamTrack extends EventTarget(MEDIA_STREAM_TRACK_EVENTS) {
3941

4042
this._constraints = info.constraints || {};
4143
this._enabled = info.enabled;
44+
this._settings = info.settings || {};
45+
4246
this.id = info.id;
4347
this.kind = info.kind;
4448
this.label = info.label;
@@ -103,7 +107,7 @@ class MediaStreamTrack extends EventTarget(MEDIA_STREAM_TRACK_EVENTS) {
103107
}
104108

105109
getSettings() {
106-
throw new Error('Not implemented.');
110+
return deepClone(this._settings);
107111
}
108112

109113
release() {

android/src/main/java/com/oney/WebRTCModule/AbstractVideoCaptureController.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,18 @@ public void dispose() {
3030
}
3131
}
3232

33+
public int getHeight() {
34+
return height;
35+
}
36+
37+
public int getWidth() {
38+
return width;
39+
}
40+
41+
public int getFrameRate() {
42+
return fps;
43+
}
44+
3345
public VideoCapturer getVideoCapturer() {
3446
return videoCapturer;
3547
}

android/src/main/java/com/oney/WebRTCModule/GetUserMediaImpl.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,17 @@ private void createStream(MediaStreamTrack[] tracks, BiConsumer<String, ArrayLis
332332
trackInfo.putString("label", trackId);
333333
trackInfo.putString("readyState", track.state().toString());
334334
trackInfo.putBoolean("remote", false);
335+
336+
if (track instanceof VideoTrack) {
337+
TrackPrivate tp = this.tracks.get(trackId);
338+
AbstractVideoCaptureController vcc = tp.videoCaptureController;
339+
WritableMap settings = Arguments.createMap();
340+
settings.putInt("height", vcc.getHeight());
341+
settings.putInt("width", vcc.getWidth());
342+
settings.putInt("frameRate", vcc.getFrameRate());
343+
trackInfo.putMap("settings", settings);
344+
}
345+
335346
tracksInfo.add(trackInfo);
336347
}
337348

ios/RCTWebRTC/VideoCaptureController.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66

77
@interface VideoCaptureController : CaptureController
88

9+
@property (nonatomic, readonly, copy) AVCaptureDeviceFormat *selectedFormat;
10+
@property (nonatomic, readonly) int frameRate;
11+
912
-(instancetype)initWithCapturer:(RTCCameraVideoCapturer *)capturer
1013
andConstraints:(NSDictionary *)constraints;
1114
-(void)startCapture;

ios/RCTWebRTC/VideoCaptureController.m

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ @implementation VideoCaptureController {
1414
int _fps;
1515
}
1616

17+
@dynamic frameRate;
18+
1719
-(instancetype)initWithCapturer:(RTCCameraVideoCapturer *)capturer
1820
andConstraints:(NSDictionary *)constraints {
1921
self = [super init];
@@ -79,6 +81,8 @@ -(void)startCapture {
7981
return;
8082
}
8183

84+
_selectedFormat = format;
85+
8286
RCTLog(@"[VideoCaptureController] Capture will start");
8387

8488
// Starting the capture happens on another thread. Wait for it.
@@ -121,6 +125,10 @@ -(void)switchCamera {
121125
[self startCapture];
122126
}
123127

128+
-(int)frameRate {
129+
return _fps;
130+
}
131+
124132
#pragma mark Private
125133

126134
- (AVCaptureDevice *)findDeviceForPosition:(AVCaptureDevicePosition)position {

ios/RCTWebRTC/WebRTCModule+RTCMediaStream.m

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,14 +151,31 @@ - (RTCVideoTrack *)createScreenCaptureVideoTrack {
151151
NSString *trackId = track.trackId;
152152

153153
self.localTracks[trackId] = track;
154+
155+
NSDictionary *settings = @{};
156+
if ([track.kind isEqualToString:@"video"]) {
157+
RTCVideoTrack *videoTrack = (RTCVideoTrack *)track;
158+
VideoCaptureController *vcc = (VideoCaptureController *)videoTrack.captureController;
159+
AVCaptureDeviceFormat *format = vcc.selectedFormat;
160+
CMVideoDimensions dimensions = CMVideoFormatDescriptionGetDimensions(format.formatDescription);
161+
settings = @{
162+
@"height": @(dimensions.height),
163+
@"width": @(dimensions.width),
164+
@"frameRate": @(3)
165+
};
166+
}
167+
154168
[tracks addObject:@{
155169
@"enabled": @(track.isEnabled),
156170
@"id": trackId,
157171
@"kind": track.kind,
158172
@"label": trackId,
159173
@"readyState": @"live",
160-
@"remote": @(NO)
174+
@"remote": @(NO),
175+
@"settings": settings
161176
}];
177+
178+
162179
}
163180

164181
self.localStreams[mediaStreamId] = mediaStream;

0 commit comments

Comments
 (0)