From 1537df2251b296b30511e97907bbd4e47e8c0df2 Mon Sep 17 00:00:00 2001 From: Sergio Amoruso Date: Fri, 20 Nov 2020 18:34:41 -0300 Subject: [PATCH] [conference-ios] - add - R5StreamConference class --- .../R5StreamConference-Bridging-Header.h | 1 + .../R5VideoView/R5StreamConference.swift | 98 +++++++++++++++++++ .../R5VideoView/R5StreamConferenceBridge.h | 7 ++ 3 files changed, 106 insertions(+) create mode 100644 ios/R5VideoView/R5VideoView/R5StreamConference-Bridging-Header.h create mode 100644 ios/R5VideoView/R5VideoView/R5StreamConference.swift create mode 100644 ios/R5VideoView/R5VideoView/R5StreamConferenceBridge.h diff --git a/ios/R5VideoView/R5VideoView/R5StreamConference-Bridging-Header.h b/ios/R5VideoView/R5VideoView/R5StreamConference-Bridging-Header.h new file mode 100644 index 0000000..5a4bae0 --- /dev/null +++ b/ios/R5VideoView/R5VideoView/R5StreamConference-Bridging-Header.h @@ -0,0 +1 @@ +#import \ No newline at end of file diff --git a/ios/R5VideoView/R5VideoView/R5StreamConference.swift b/ios/R5VideoView/R5VideoView/R5StreamConference.swift new file mode 100644 index 0000000..d14374a --- /dev/null +++ b/ios/R5VideoView/R5VideoView/R5StreamConference.swift @@ -0,0 +1,98 @@ +import UIKit +import R5Streaming + +@objc(R5StreamConference) +class R5StreamConference: { + + var timer : Timer? = nil + var failCount: Int = 0; + + @objc func subscribeBegin() + { + performSelector(onMainThread: #selector(subscribeTrigger), with: nil, waitUntilDone: false) + } + + @objc func subscribeTrigger() + { + if( subscribeStream == nil ) + { + let config = getConfig() + // Set up the connection and stream + let connection = R5Connection(config: config) + self.subscribeStream = R5Stream(connection: connection) + self.subscribeStream!.delegate = self + self.subscribeStream?.client = self + + currentView?.attach(subscribeStream) + + self.subscribeStream!.play(appconfig.getParameter(param: "stream2") as! String, withHardwareAcceleration:appconfig.getParameter(param: "hwaccel_on") as! Bool) + } + } + + override func onR5StreamStatus(_ stream: R5Stream!, withStatus statusCode: Int32, withMessage msg: String!) { + + if(stream == self.publishStream){ + + if(Int(statusCode) == Int(r5_status_start_streaming.rawValue)){ + + self.timer = Timer.scheduledTimer(timeInterval: 2.5, target: self, selector: #selector(getStreams), userInfo: nil, repeats: false) + } + } + + if(stream == self.subscribeStream){ + if(Int(statusCode) == Int(r5_status_connection_error.rawValue)){ + failCount += 1 + if(failCount < 4){ + self.timer = Timer.scheduledTimer(timeInterval: 2.5, target: self, selector: #selector(subscribeBegin), userInfo: nil, repeats: false) + self.subscribeStream = nil + } + else{ + print("The other stream appears to be invalid") + } + } + } + } + + + @objc func getStreams (){ + publishStream?.connection.call("streams.getLiveStreams", withReturn: "onGetLiveStreams", withParam: nil) + } + + @objc func onGetLiveStreams (streams : String){ + + NSLog("Got streams: " + streams) + + var names : NSArray + + do{ + names = try JSONSerialization.jsonObject(with: streams.data(using: String.Encoding.utf8)!, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSArray + } catch _ { + self.timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(getStreams), userInfo: nil, repeats: false) + return + } + + for i in 0.. + +@interface RCT_EXTERN_MODULE(R5StreamConference, NSObject) + +RCT_EXTERN_METHOD(subscribeBegin) + +@end \ No newline at end of file