Skip to content

Commit fb92ea3

Browse files
committed
feat(*): add support for srt
1 parent dc21d89 commit fb92ea3

File tree

14 files changed

+739
-283
lines changed

14 files changed

+739
-283
lines changed

ApiVideoLiveStream.podspec

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,9 @@ Pod::Spec.new do |spec|
2424
spec.exclude_files = "Sources/Exclude"
2525

2626
spec.dependency "HaishinKit", "1.9.3"
27+
spec.dependency "SRTHaishinKit", "1.9.3"
28+
29+
spec.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'x86_64'}
30+
spec.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'x86_64'}
2731

2832
end

ApiVideoLiveStream.xcodeproj/project.pbxproj

Lines changed: 51 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,13 @@
88

99
/* Begin PBXBuildFile section */
1010
2102CD142BA9E0E700D0EBAD /* ApiVideoLiveStream.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2102CD092BA9E0E700D0EBAD /* ApiVideoLiveStream.framework */; };
11+
2192709F2C202CD90028BFFF /* RtmpLiveStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2192709E2C202CD90028BFFF /* RtmpLiveStream.swift */; };
12+
219270A12C202D020028BFFF /* LiveStreamProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219270A02C202D020028BFFF /* LiveStreamProtocol.swift */; };
13+
219270A32C202FA30028BFFF /* IOLiveStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219270A22C202FA30028BFFF /* IOLiveStream.swift */; };
14+
219270A52C2039910028BFFF /* SrtLiveStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219270A42C2039910028BFFF /* SrtLiveStream.swift */; };
15+
219270A72C203A360028BFFF /* SRTHaishinKit in Frameworks */ = {isa = PBXBuildFile; productRef = 219270A62C203A360028BFFF /* SRTHaishinKit */; };
16+
219270AA2C2064280028BFFF /* LiveStreamError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219270A92C2064280028BFFF /* LiveStreamError.swift */; };
17+
219270AC2C20644D0028BFFF /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219270AB2C20644D0028BFFF /* Extensions.swift */; };
1118
21BF485B2C10B54300EAEB5B /* HaishinKit in Frameworks */ = {isa = PBXBuildFile; productRef = 21BF485A2C10B54300EAEB5B /* HaishinKit */; };
1219
21BF485E2C10BAAF00EAEB5B /* InAppSettingsKit in Frameworks */ = {isa = PBXBuildFile; productRef = 21BF485D2C10BAAF00EAEB5B /* InAppSettingsKit */; };
1320
21CCD6A02BBC44EE00E58F5D /* ApiVideoLiveStream.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2102CD092BA9E0E700D0EBAD /* ApiVideoLiveStream.framework */; };
@@ -86,7 +93,12 @@
8693
2126C5152BCD4D6E006BEDF3 /* create-documentation-pr.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = "create-documentation-pr.yml"; sourceTree = "<group>"; };
8794
2126C5162BCD4D6E006BEDF3 /* create-release-from-changelog.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = "create-release-from-changelog.yml"; sourceTree = "<group>"; };
8895
2126C5172BCD4D6E006BEDF3 /* release.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = release.yml; sourceTree = "<group>"; };
89-
21E3585C2C10A27000D856D9 /* Cartfile */ = {isa = PBXFileReference; lastKnownFileType = text; path = Cartfile; sourceTree = "<group>"; };
96+
2192709E2C202CD90028BFFF /* RtmpLiveStream.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RtmpLiveStream.swift; sourceTree = "<group>"; };
97+
219270A02C202D020028BFFF /* LiveStreamProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveStreamProtocol.swift; sourceTree = "<group>"; };
98+
219270A22C202FA30028BFFF /* IOLiveStream.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IOLiveStream.swift; sourceTree = "<group>"; };
99+
219270A42C2039910028BFFF /* SrtLiveStream.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SrtLiveStream.swift; sourceTree = "<group>"; };
100+
219270A92C2064280028BFFF /* LiveStreamError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveStreamError.swift; sourceTree = "<group>"; };
101+
219270AB2C20644D0028BFFF /* Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = "<group>"; };
90102
21E3585D2C10A27000D856D9 /* ApiVideoLiveStream.podspec */ = {isa = PBXFileReference; lastKnownFileType = text; path = ApiVideoLiveStream.podspec; sourceTree = "<group>"; };
91103
21E358802C10A35300D856D9 /* MainViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainViewController.swift; sourceTree = "<group>"; };
92104
21E358812C10A35300D856D9 /* SettingsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsViewController.swift; sourceTree = "<group>"; };
@@ -110,6 +122,7 @@
110122
isa = PBXFrameworksBuildPhase;
111123
buildActionMask = 2147483647;
112124
files = (
125+
219270A72C203A360028BFFF /* SRTHaishinKit in Frameworks */,
113126
21BF485B2C10B54300EAEB5B /* HaishinKit in Frameworks */,
114127
);
115128
runOnlyForDeploymentPostprocessing = 0;
@@ -145,7 +158,6 @@
145158
2117CBD02BB1EBCA00B85BF0 /* CONTRIBUTING.md */,
146159
2126C5132BCD47DA006BEDF3 /* LICENSE.md */,
147160
2117CBD12BB1EBCA00B85BF0 /* README.md */,
148-
21E3585C2C10A27000D856D9 /* Cartfile */,
149161
21E3585D2C10A27000D856D9 /* ApiVideoLiveStream.podspec */,
150162
2117CC072BB1F1F900B85BF0 /* Package.swift */,
151163
2102CD0A2BA9E0E700D0EBAD /* Products */,
@@ -182,6 +194,26 @@
182194
path = .github;
183195
sourceTree = "<group>";
184196
};
197+
2192709D2C202C9B0028BFFF /* IOStream */ = {
198+
isa = PBXGroup;
199+
children = (
200+
2192709E2C202CD90028BFFF /* RtmpLiveStream.swift */,
201+
219270A42C2039910028BFFF /* SrtLiveStream.swift */,
202+
219270A22C202FA30028BFFF /* IOLiveStream.swift */,
203+
219270A02C202D020028BFFF /* LiveStreamProtocol.swift */,
204+
);
205+
path = IOStream;
206+
sourceTree = "<group>";
207+
};
208+
219270A82C20640D0028BFFF /* Utils */ = {
209+
isa = PBXGroup;
210+
children = (
211+
219270A92C2064280028BFFF /* LiveStreamError.swift */,
212+
219270AB2C20644D0028BFFF /* Extensions.swift */,
213+
);
214+
path = Utils;
215+
sourceTree = "<group>";
216+
};
185217
21CCD69F2BBC44EE00E58F5D /* Frameworks */ = {
186218
isa = PBXGroup;
187219
children = (
@@ -239,19 +271,21 @@
239271
path = Tests;
240272
sourceTree = "<group>";
241273
};
242-
21E358A12C10A39400D856D9 /* models */ = {
274+
21E358A12C10A39400D856D9 /* Configuration */ = {
243275
isa = PBXGroup;
244276
children = (
245277
21E3589F2C10A39400D856D9 /* Configuration.swift */,
246278
21E358A02C10A39400D856D9 /* Resolution.swift */,
247279
);
248-
path = models;
280+
path = Configuration;
249281
sourceTree = "<group>";
250282
};
251283
21E358A32C10A39400D856D9 /* ApiVideoLiveStream */ = {
252284
isa = PBXGroup;
253285
children = (
254-
21E358A12C10A39400D856D9 /* models */,
286+
219270A82C20640D0028BFFF /* Utils */,
287+
2192709D2C202C9B0028BFFF /* IOStream */,
288+
21E358A12C10A39400D856D9 /* Configuration */,
255289
21E358A22C10A39400D856D9 /* ApiVideoLiveStream.swift */,
256290
);
257291
path = ApiVideoLiveStream;
@@ -294,6 +328,7 @@
294328
name = ApiVideoLiveStream;
295329
packageProductDependencies = (
296330
21BF485A2C10B54300EAEB5B /* HaishinKit */,
331+
219270A62C203A360028BFFF /* SRTHaishinKit */,
297332
);
298333
productName = Databus;
299334
productReference = 2102CD092BA9E0E700D0EBAD /* ApiVideoLiveStream.framework */;
@@ -418,9 +453,15 @@
418453
isa = PBXSourcesBuildPhase;
419454
buildActionMask = 2147483647;
420455
files = (
456+
219270A12C202D020028BFFF /* LiveStreamProtocol.swift in Sources */,
457+
219270AC2C20644D0028BFFF /* Extensions.swift in Sources */,
458+
219270A32C202FA30028BFFF /* IOLiveStream.swift in Sources */,
421459
21E358A52C10A39400D856D9 /* Configuration.swift in Sources */,
422460
21E358A62C10A39400D856D9 /* Resolution.swift in Sources */,
461+
219270A52C2039910028BFFF /* SrtLiveStream.swift in Sources */,
423462
21E358A72C10A39400D856D9 /* ApiVideoLiveStream.swift in Sources */,
463+
219270AA2C2064280028BFFF /* LiveStreamError.swift in Sources */,
464+
2192709F2C202CD90028BFFF /* RtmpLiveStream.swift in Sources */,
424465
);
425466
runOnlyForDeploymentPostprocessing = 0;
426467
};
@@ -846,6 +887,11 @@
846887
/* End XCRemoteSwiftPackageReference section */
847888

848889
/* Begin XCSwiftPackageProductDependency section */
890+
219270A62C203A360028BFFF /* SRTHaishinKit */ = {
891+
isa = XCSwiftPackageProductDependency;
892+
package = 21E358A82C10A54D00D856D9 /* XCRemoteSwiftPackageReference "HaishinKit" */;
893+
productName = SRTHaishinKit;
894+
};
849895
21BF485A2C10B54300EAEB5B /* HaishinKit */ = {
850896
isa = XCSwiftPackageProductDependency;
851897
package = 21E358A82C10A54D00D856D9 /* XCRemoteSwiftPackageReference "HaishinKit" */;

Examples/iOS/SettingsManager.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@ enum SettingsManager {
55
// MARK: Endpoint
66

77
static var rtmpUrl: String {
8-
UserDefaults.standard.string(forKey: "RtmpUrl") ?? "rtmp://broadcast.api.video/s/"
8+
UserDefaults.standard.string(forKey: "RtmpUrl") ?? "rtmp://192.168.1.12/s/"
9+
}
10+
11+
static var srtUrl: String {
12+
UserDefaults.standard.string(forKey: "SrtUrl") ?? "srt://192.168.1.12:9998"
913
}
1014

1115
static var streamKey: String {

Examples/iOS/ViewControllers/MainViewController.swift

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,14 @@ class MainViewController: UIViewController {
5656
}()
5757

5858
private func callAlert(_ message: String, title: String = "Error", action: @escaping () -> Void = {}) {
59-
let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
60-
let okAction = UIAlertAction(title: "OK", style: .default) { _ in
61-
action()
62-
}
63-
64-
alert.addAction(okAction)
6559
DispatchQueue.main.async {
60+
let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
61+
let okAction = UIAlertAction(title: "OK", style: .default) { _ in
62+
action()
63+
}
64+
65+
alert.addAction(okAction)
66+
6667
self.present(alert, animated: true, completion: nil)
6768
}
6869
}
@@ -149,7 +150,8 @@ class MainViewController: UIViewController {
149150
return
150151
}
151152

152-
try self.liveStream.startStreaming(streamKey: SettingsManager.streamKey, url: SettingsManager.rtmpUrl)
153+
// try self.liveStream.startStreaming(streamKey: SettingsManager.streamKey, url: SettingsManager.rtmpUrl)
154+
try self.liveStream.startStreaming(streamKey: SettingsManager.streamKey, url: SettingsManager.srtUrl)
153155

154156
self.streamingButton.setTitle("Stop", for: [])
155157
self.streamingButton.isSelected = true

Package.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ let package = Package(
2626
.target(
2727
name: "ApiVideoLiveStream",
2828
dependencies: [
29-
.product(name: "HaishinKit", package: "HaishinKit.swift")
29+
.product(name: "HaishinKit", package: "HaishinKit.swift"),
30+
.product(name: "SRTHaishinKit", package: "HaishinKit.swift")
3031
]
3132
),
3233
.testTarget(

0 commit comments

Comments
 (0)