Skip to content

Commit 88ae3f3

Browse files
committed
Add set degradation preference method
1 parent 32b8f7e commit 88ae3f3

File tree

4 files changed

+41
-3
lines changed

4 files changed

+41
-3
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ Podfile.lock
44
Release-iphoneos.xcarchive
55
Release-iphonesimulator.xcarchive
66
Release*
7+
Package.resolved

WebRTCiOSSDK/api/AntMediaClient.swift

+19-1
Original file line numberDiff line numberDiff line change
@@ -116,11 +116,15 @@ open class AntMediaClient: NSObject, AntMediaClientProtocol {
116116

117117
private var cameraSourceFPS: Int = 30;
118118

119+
/**
120+
Degradation preference when publishing streams. By default its values is maintainResolution because when resolution changes HLS playback does not play in safari
121+
*/
122+
private var degradationPreference: RTCDegradationPreference = RTCDegradationPreference.maintainResolution;
123+
119124
var pingTimer: Timer?
120125

121126
var disableTrackId:String?
122127

123-
124128
var reconnectIfRequiresScheduled: Bool = false;
125129

126130
struct HandshakeMessage:Codable {
@@ -533,6 +537,7 @@ open class AntMediaClient: NSObject, AntMediaClientProtocol {
533537
self.webRTCClientMap[id] = WebRTCClient.init(remoteVideoView: remoteView, localVideoView: localView, delegate: self, mode: mode != .unspecified ? mode : self.mode , cameraPosition: self.cameraPosition, targetWidth: self.targetWidth, targetHeight: self.targetHeight, videoEnabled: self.videoEnable, enableDataChannel: self.enableDataChannel, useExternalCameraSource: self.useExternalCameraSource, externalAudio: self.externalAudioEnabled, externalVideoCapture: self.externalVideoCapture, cameraSourceFPS: self.cameraSourceFPS, streamId:id);
534538

535539
self.webRTCClientMap[id]?.setToken(token)
540+
self.webRTCClientMap[id]?.setDegradationPreference(degradationPreference: self.degradationPreference);
536541

537542
AntMediaClient.rtcAudioSession.add(self);
538543
}
@@ -1180,6 +1185,19 @@ open class AntMediaClient: NSObject, AntMediaClientProtocol {
11801185
}
11811186
}
11821187

1188+
public func setDegradationPreference(_ degradationPreference: RTCDegradationPreference)
1189+
{
1190+
self.degradationPreference = degradationPreference;
1191+
let rtc = self.webRTCClientMap[self.getPublisherStreamId()]
1192+
1193+
guard let params = rtc?.videoSender?.parameters else {
1194+
return
1195+
}
1196+
1197+
params.degradationPreference = (degradationPreference.rawValue) as NSNumber
1198+
rtc?.videoSender?.parameters = params
1199+
}
1200+
11831201
public func disconnect() {
11841202
for (streamId, webrtcClient) in self.webRTCClientMap {
11851203
webrtcClient.disconnect()

WebRTCiOSSDK/api/AntMediaClientProtocol.swift

+5
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,11 @@ public protocol AntMediaClientProtocol {
345345
*/
346346
func join(streamId:String)
347347

348+
/**
349+
Set the degradation prefernece in publishing streams. It can be called before the stream starts or while it's streaming.
350+
*/
351+
func setDegradationPreference(_ degradationPreference: RTCDegradationPreference);
352+
348353
/**
349354
Disconnects websocket connection
350355
*/

WebRTCiOSSDK/api/webrtc/WebRTCClient.swift

+16-2
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ class WebRTCClient: NSObject {
6060
State of the connection
6161
*/
6262
var iceConnectionState:RTCIceConnectionState = .new;
63+
64+
private var degradationPreference:RTCDegradationPreference = .maintainResolution;
6365

6466
public init(remoteVideoView: RTCVideoRenderer?, localVideoView: RTCVideoRenderer?, delegate: WebRTCClientDelegate, externalAudio:Bool) {
6567
super.init()
@@ -405,10 +407,9 @@ class WebRTCClient: NSObject {
405407
let videoTrack = WebRTCClient.factory.videoTrack(with: videoSource, trackId: "video0")
406408
return videoTrack
407409
}
408-
409-
410410
}
411411

412+
412413
private func addLocalMediaStream() -> Bool {
413414

414415

@@ -418,6 +419,15 @@ class WebRTCClient: NSObject {
418419
self.localVideoTrack = createVideoTrack();
419420

420421
self.videoSender = self.peerConnection?.add(self.localVideoTrack, streamIds: [LOCAL_MEDIA_STREAM_ID])
422+
423+
if let params = videoSender?.parameters
424+
{
425+
params.degradationPreference = (self.degradationPreference.rawValue) as NSNumber
426+
videoSender?.parameters = params
427+
}
428+
else {
429+
AntMediaClient.printf("DegradationPreference cannot be set");
430+
}
421431
}
422432

423433
let audioSource = WebRTCClient.factory.audioSource(with: Config.createTestConstraints())
@@ -432,6 +442,10 @@ class WebRTCClient: NSObject {
432442
return true
433443
}
434444

445+
public func setDegradationPreference(degradationPreference:RTCDegradationPreference) {
446+
self.degradationPreference = degradationPreference
447+
}
448+
435449
public func switchCamera() {
436450

437451
let cameraVideoCapturer = self.videoCapturer as? RTCCameraVideoCapturer;

0 commit comments

Comments
 (0)